PYTHONPATH problema su un server di Produzione e lo spazio dei nomi sfida
-
20-09-2019 - |
Domanda
Sono davvero confuso da alcuni errori sto diventando come sto cercando di mettere un App in produzione.Tutto funziona bene sulla macchina di sviluppo, ma non posso syncdb o inserire il Django shell sul server di Produzione.Ricevo un errore quando forum.models.py si tenta di importare forum.managers.py perché i modelli non sono in lo spazio dei nomi di sicurezza.
Penso che potrebbe essere un PYTHONPATH problema, ma non è una strana Pollo o Uovo aspetto.Non capisco perché TagManager non è nello spazio dei nomi.
TagManager è importato tramite:
dal forum.i gestori di importazione *
Che viene eseguita prima la TagManager di classe è chiamato.
$ python2.5 manage.py syncdb
Traceback (ultima call last):
File "manage.py" la riga 11, in
execute_manager(impostazioni)
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/core/gestione/init.py", linea 362, in execute_manager
il programma di utilità.execute()
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/core/gestione/init.py", la linea 303, in esecuzione di
auto.fetch_command(comando).run_from_argv(self.argv)
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/core/management/base.py" linea 195, in run_from_argv
auto.execute(*args, **opzioni.dict)
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/core/management/base.py" linea 221, in esecuzione di
auto.validate()
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/core/management/base.py" linea 249, in convalida
num_errors = get_validation_errors(s, app)
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/core/management/validation.py", linea 28, in get_validation_errors
per (app_name, errore) in get_app_errors().gli articoli():
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/db/models/loading.py" linea 131, in get_app_errors
auto._populate()
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/db/models/loading.py", linea 58, in _populate
auto.load_app(app_name, True)
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/db/models/loading.py" linea 74, in load_app
i modelli = import_module('.modelli', app_name)
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/utils/importlib.py", la linea 35, in import_module
importazione(nome)
Il File "/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py", la linea 18, in
dal forum.i gestori di importazione *
Il File "/home/app_name/webapps/app_name/django_app/forum/managers.py", linea 6, in
dal forum.modelli di importazione *
Il File "/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py", linea 43, in
Tag di classe(modelli.Modello):
Il File "/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py", linea 53, in Tag
oggetti = TagManager()
NameError:nome 'TagManager' non è definito
Python 2.5.4 (r254:67916, Aug 5 2009, 12:42:40)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ['DJANGO_SETTINGS_MODULE'] = 'django_app.settings'
>>>
>>> import sys
>>> import pprint
>>> pprint.pprint(sys.path)
['',
'/home/app_name/webapps/app_name/lib/python2.5',
'/home/app_name/lib/python2.5/markdown2-1.0.1.16-py2.5.egg',
'/home/app_name/lib/python2.5/html5lib-0.11.1-py2.5.egg',
'/home/app_name/lib/python2.5',
'/usr/local/lib/python25.zip',
'/usr/local/lib/python2.5',
'/usr/local/lib/python2.5/plat-linux2',
'/usr/local/lib/python2.5/lib-tk',
'/usr/local/lib/python2.5/lib-dynload',
'/usr/local/lib/python2.5/site-packages',
'/usr/local/lib/python2.5/site-packages/PIL']
>>> sys.path = ['/home/app_name/webapps/app_name/django_app','/home/app_name/webapps/app_name','/home/app_name/webapps/app_name/lib/python2.5'] + sys.path
>>> pprint.pprint(sys.path)['/home/app_name/webapps/app_name/django_app',
'/home/app_name/webapps/app_name',
'/home/app_name/webapps/app_name/lib/python2.5',
'',
'/home/app_name/webapps/app_name/lib/python2.5',
'/home/app_name/lib/python2.5/markdown2-1.0.1.16-py2.5.egg',
'/home/app_name/lib/python2.5/html5lib-0.11.1-py2.5.egg',
'/home/app_name/lib/python2.5',
'/usr/local/lib/python25.zip',
'/usr/local/lib/python2.5',
'/usr/local/lib/python2.5/plat-linux2',
'/usr/local/lib/python2.5/lib-tk',
'/usr/local/lib/python2.5/lib-dynload',
'/usr/local/lib/python2.5/site-packages',
'/usr/local/lib/python2.5/site-packages/PIL']
>>> from forum.managers import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/app_name/webapps/app_name/django_app/forum/managers.py", line 6, in <module>
from forum.models import *
File "/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py", line 43, in <module>
class Tag(models.Model):
File "/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py", line 53, in Tag
objects = TagManager()
NameError: name 'TagManager' is not defined
>>> from forum.models import *
>>> from forum.managers import *
>>> objects = TagManager()
>>> objects
<forum.managers.TagManager object at 0x9b9fdac>
>>>
Soluzione
Il tuo problema è che fai:
dal forum.i gestori di importazione * (riga 18 models.py) dal forum.modelli di importazione * (riga 6 managers.py)
Come è possibile che possa funzionare?Provare appiattimento questo non importa a mano, copia e incolla in un nuovo file) e vedrete il perché, dal momento in cui viene eseguita la riga "oggetti = TagManager()" non può avere eseguito la parte del manager di modulo in cui TagManager è definito, a meno che non è stato definito prima linea 18.
Alcuni consigli generali:
- Evitare l'importazione di ogni volta che si rende programmi python più difficile da leggere, se non altro)
- Se si dispone di circolare importazioni, ad esempio, provare a rompere il loro.Spesso in un modulo è possibile spostare l'importazione in una chiamata di funzione, o è possibile rielaborare alcuni elementi di un terzo modulo che sia in grado di importare dal.Si può anche provare a spostare l'importazione inferiore del modulo, che a volte funziona.