PYTHONPATH问题上的一个生产服务器名称空间的挑战
-
20-09-2019 - |
题
我真的很感到困惑的一些错误我因为我是试图把一个应用程序投入生产。一切正常发展的机器,但我不能syncdb或进入的决壳上生产服务器。我得到一个错误的时候forum.models.py 是试图进口forum.managers.py 因为该模型是不是在空间。
我觉得这可能是一个PYTHONPATH问题,但它有一个奇怪的鸡还是先有蛋的一面。我不明白为什么TagManager不在名称空间。
TagManager是进口的通过:
从论坛。管理人员进*
这是之前执行的TagManager类被称为。
$python2.5manage.py syncdb
回溯(最近的呼吁最后一次):
文件"manage.py"11行中
execute_manager(设定)
文件"/home/app_name/webapp/app_name/lib/python2.5/django/core/管理/init.py",行362,在execute_manager
实用工具。执行()
文件"/home/app_name/webapp/app_name/lib/python2.5/django/core/管理/init.py",行303,在执行
自我。fetch_command(子命令).run_from_argv(自我。argv)
文件"/home/app_name/webapps/app_name/lib/python2.5/django/core/management/base.py"、线195,在run_from_argv
自我。执行(*args,**选择。字典)
文件"/home/app_name/webapps/app_name/lib/python2.5/django/core/management/base.py"、线221,在执行
自我。validate()
文件"/home/app_name/webapps/app_name/lib/python2.5/django/core/management/base.py",第249行,在验证
num_errors=get_validation_errors(s、应用程序)
文件"/home/app_name/webapps/app_name/lib/python2.5/django/core/management/validation.py"28行,在get_validation_errors
对于(app_name、错误)在get_app_errors().项目():
文件"/home/app_name/webapps/app_name/lib/python2.5/django/db/models/loading.py"、线131,在get_app_errors
自我。_populate()
文件"/home/app_name/webapps/app_name/lib/python2.5/django/db/models/loading.py"、线58,在_populate
自我。load_app(app_name,True)
文件"/home/app_name/webapps/app_name/lib/python2.5/django/db/models/loading.py"、线74,在load_app
模型=import_module('.模型',app_name)
文件"/home/app_name/webapps/app_name/lib/python2.5/django/utils/importlib.py"35行,在import_module
进口(名称)
文件"/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py"18行,
从论坛。管理人员进*
文件"/home/app_name/webapps/app_name/django_app/forum/managers.py"6行,
从论坛。模型进口*
文件"/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py"43行,
类标签(模型。模型):
文件"/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py"、线53,在标记
对象=TagManager()
NameError:名称'TagManager'不是定义
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>
>>>
解决方案
你的问题是你做的:
从论坛。管理人员进*(在线18models.py) 从论坛。模型进口*(在线6managers.py)
怎么可能没有工作?试图压扁这个出来(做到的进口通过手工抄和粘贴到一个新的文件)和你就会明白为什么,通过的时间就执行该线"的对象=TagManager()"它不可能已经执行的部分的管理模块在哪里TagManager定义,除非是定义的前线18。
一些一般性的提示:
- 避*进口,只要有可能(它使蟒蛇的程序很难阅读,如果没有别的)
- 如果你有圆形的进口那样,试图破坏他们。往往在一个模块,你可以移动进入一个功能打电话,或者你可以重构的某些要素进入第三个模块既可以进口。你也可以尝试移动的导下的模块,这有时会的工作。