2017-07-06 2 views
1

J'ai un serveur de flacon avec l'architecture suivanteFlask migration python2 à 3 ImportError: ne peut pas importer le nom

. 
├── doc 
│   ├── apidoc.json 
│   ├── docAPI 
│   └── generation_doc 
├── images 
│   ├── parking 
│   └── user 
├── log 
│   └── file.log 
├── README.md 
├── requirements.txt 
├── run_server.py 
├── server 
│   ├── controllers 
│   ├── __init__.py 
│   ├── models 
│   ├── myServerUtils 
│   ├── __pycache__ 
│   └── routes 
└── venv 
    ├── bin 
    ├── include 
    ├── lib 
    └── pip-selfcheck.json 

Tout fonctionne bien sous python2. Mais je dois migrer vers python3. Après avoir changé les exigences de python-mysql en pymysql et refactoring comment les importations sont faites, voici l'erreur que je reçois.

/home/myUser/Documents/myServer/backend/venv/bin/python /home/myUser/Documents/myServer/backend/run_server.py 
Traceback (most recent call last): 
    File "/home/myUser/Documents/myServer/backend/run_server.py", line 4, in <module> 
    from server import app 
    File "/home/myUser/Documents/myServer/backend/server/__init__.py", line 26, in <module> 
    from .controllers import * 
    File "/home/myUser/Documents/myServer/backend/server/controllers/__init__.py", line 1, in <module> 
    from .user import * 
    File "/home/myUser/Documents/myServer/backend/server/controllers/user.py", line 3, in <module> 
    from .. import UserTable 
ImportError: cannot import name 'UserTable' 

Process finished with exit code 1 

Les importations dans le fichier controllers/user.py sont

from .. import db 
from .. import return_error 
from .. import UserTable 
from .. import ErrorType 
from .. import Logger 
from .. import ParkingTable 
from .. import ParkingBookedTable 
from .. import reset_password as mail_reset_password 
from .. import app 
from flask import request, jsonify, send_file 
import exrex, hashlib 
from validate_email import validate_email 
from datetime import datetime 
import uuid 
import os 
import time 

et voici les importations en provenance models/users.pyUserTable est

définies
from .. import db 
from .. import ErrorType 
from validate_email import validate_email 
import uuid 
import time 

Merci par avance! [EDIT]: Pour ajouter un complément d'informations concernant la réponse de dmitrybelyakov, le problème provenait de mon IDE qui avait optimisé les importations et en a gâché certaines. En revenant sur mon git et en réglant mes importations correctement fait le travail.

Répondre

1

Je n'ai pas de réponse définitive, mais je commencerais par vérifier s'il y a des importations circulaires.

+0

Je ne vois aucune importation du contenu de 'controllers/user.py' dans le fichier' models/users.py'. Y a-t-il un autre endroit à rechercher? Et comment cela peut-il fonctionner dans python2 et ne pas fonctionner dans python3 s'il y a une importation circulaire? – RoToR