문제

앱을 제작에 넣으려고 할 때 얻는 오류가 정말 혼란스러워집니다. 개발 기계에서 모든 것이 잘 작동하지만 프로덕션 서버에서 동기화하거나 Django 쉘을 입력 할 수 없습니다. Forum.Models.py가 모델이 아직 네임 스페이스에 없기 때문에 Forum.Managers.py를 가져 오려는 시도가되면 오류가 발생합니다.

나는 그것이 Pythonpath 문제 일 수 있다고 생각하지만 이상한 닭고기 또는 계란 측면이 있습니다. Tagmanager가 네임 스페이스에없는 이유를 이해하지 못합니다.
Tagmanager는 다음을 통해 가져옵니다.
Forum.Managers 가져 오기 *
Tagmanager 클래스가 호출되기 전에 실행됩니다.

$ python2.5 manage.py syncdb
Traceback (가장 최근의 호출) :
"manage.py", 11 행
execute_manager (설정)
"/home/app_name/webapps/app_name/lib/python2.5/django/core/management/ 파일이니.py ", 362 행, execute_manager
utility.execute ()
"/home/app_name/webapps/app_name/lib/python2.5/django/core/management/ 파일이니.py ", 303 행, 실행 중
self.fetch_command (subcommand) .run_from_argv (self.argv)
파일 "/home/app_name/webapps/app_name/lib/python2.5/django/core/management/base.py", 195 행, run_from_argv.
self.Execute (*args, ** 옵션.DITT)
"/home/app_name/webapps/app_name/lib/python2.5/django/core/management/base.py", Line 221, Execute 파일
self.validate ()
파일 "/home/app_name/webapps/app_name/lib/python2.5/django/core/management/base.py", 249 행, Validate에서
num_errors = get_validation_errors (S, 앱)
"/home/app_name/webapps/app_name/lib/python2.5/django/core/management/validation.py", 28 행, get_validation_errors.
get_app_errors (). items ()의 (app_name, error)를 위해 :
"/home/app_name/webapps/app_name/lib/python2.5/django/db/models/loading.py 파일", 131 행, get_app_errors.
self._populate ()
파일 "/home/app_name/webapps/app_name/lib/python2.5/django/db/models/loading.py", _populate 58 행
self.load_app (app_name, true)
load_app에서 "/home/app_name/webapps/app_name/lib/python2.5/django/db/models/loading.py", load_app에서 74 행
Models = import_module ( '. model', app_name)
"/home/app_name/webapps/app_name/lib/python2.5/django/utils/importlib.py"파일 35, import_module에서 35 행
수입(이름)
"/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py 파일", 18, in
Forum.Managers 가져 오기 *
"/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 행, in
클래스 태그 (Models.Model) :
파일 "/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py", 53 행, 태그에서
Objects = 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>  
>>>   
도움이 되었습니까?

해결책

당신의 문제는 당신이하는 것입니다 :

Forum.managers import * (Line 18 Models.py) Forum.Models import * (Line 6 Managers.py)

어떻게 작동 할 수 있습니까? 이것을 평평하게 해보십시오 (손으로 복사하고 새 파일에 붙여 넣어 가져 오기). "Objects = tagmanager () 라인을 실행할 때 왜 관리자 모듈의 일부를 실행할 수 없었을 지 알 수 있습니다. Tagmanager가 정의되는 경우, 18 행 전에 정의되지 않는 한.

몇 가지 일반적인 팁 :

  1. 가능할 때마다 * 가져 오기를 피하십시오 (다른 것이 없다면 파이썬 프로그램을 읽기가 더 어려워집니다)
  2. 그런 원형 수입품이 있다면 헤어집니다. 종종 하나의 모듈에서 가져 오기를 함수 호출로 옮기거나 일부 요소를 가져올 수있는 세 번째 모듈로 리팩터링 할 수 있습니다. 또한 모듈에서 가져 오기를 낮추는 시도를 할 수도 있습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top