2010-04-04 2 views
3

OK, I가 다음 디렉토리 구조 (그것이 장고 프로젝트의) : ImportError를하고 장고 날 운전 미친

 
-> project 
--> app 

앱 폴더 내에

, 클래스를 참조 할 필요가있는 scraper.py 파일이


import urllib2 
import os 
import sys 
import time 
import datetime 
import re 
import BeautifulSoup 

sys.path.append('/home/userspace/Development/') 
os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings' 

from project.app.models import ClassName 

을하고이 코드는 작동하지 않습니다 : models.py

내에서 정의 된 나는 다음을 수행하려고 해요. 나는의 오류 얻을 :

 
Traceback (most recent call last): 
    File "scraper.py", line 14, in 
    from project.app.models import ClassName 
ImportError: No module named project.app.models 

이 코드는 위의 작업에 사용을하지만, 라인을 따라 어딘가 부러 나는 문제가 발생 이유에 매우 혼란 스러워요. Python2.5를 사용하여 SnowLeopard에서.

답변

3
import sys 
sys.path.append ('/path/to/the/project') 
from django.core.management import setup_environ 
import settings 
setup_environ(settings) 

from app.models import MyModel 
+0

좋아, 나는 이것이 효과가 있다고 생각한다. 나는 문제의 모델이 TineyMCE를 필요로하기 때문에 "think"라고 말하고 있는데, 그 문제는 다음과 같습니다. "ImportError : 이름 smart_unicode를 가져올 수 없습니다" setup_environ (설정)이 정확히 무엇을 설명 할 수 있습니까? –

+0

'django \ core \ management \ __ init __. py'를 읽었을 때'setup_environ'이 발견되었습니다. 1.'os.environ [ 'DJANGO_SETTINGS_MODULE']'; 2.'project'를 모듈로 임포트합니다. –

+0

'smart_unicode'를 어떻게 가져 옵니까? 가져 오기 파일의 dir이나'sys.path'에 함수가있는 모듈을 찾을 수 있습니까? –

0

project/home/userspace/Development/에 있으면 표시하지 않습니다. 나는 그것이 있다고 추정 할 것이다.

__init__.py이라는 파일이 project에 있고 다른 파일이 app에 있는지 확인하십시오.

편집 : 다음 스크립트의 디렉토리에 화재까지 파이썬 명령 줄을 시도 :

import project import project.app as app import project.app.models as models models.__dict__.keys() 

들이 모든 작업을 수행하려고 할
다음 일이? 그렇다면 마지막 라인의 출력은 무엇입니까? 그렇지 않다면, 먼저 죽는가?

+0

프로젝트가/home/userspace/Development에 있고 두 폴더에 빈 __init__.py가 있습니다. –

+0

'init.py' 또는'__init __. py'? –

+0

"프로젝트 가져 오기"가 작동하지 않습니다. ImportError : "project"라는 모듈이 없습니다. __init__.py (init.py가 아닙니다. 죄송합니다.) –

1

와우 워 워. 은 앱 이름에 프로젝트 이름을 입력해야합니다. 변경 사항없이 여러 프로젝트에서 앱 코드를 재사용 할 수 있어야합니다. Pinax는이 작업을 정말 잘 수행하며 많은 장고 베스트 프랙티스를 확인하는 것이 좋습니다.

여기에서 할 수있는 가장 나쁜 일은 절대 경로를 앱 또는 설정에 하드 코딩하는 것입니다. import local_settings 해킹을하지 않으면 배포 도중 중단되므로이 작업을 수행해서는 안됩니다. 프로젝트의 루트 디렉토리에 액세스해야하는 경우, pinax이 settings.py에 무슨 시도

...

import os.path 
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 

것은 같은 내 모델 모듈에 액세스하려고하는 것처럼 보이는 것입니다 응용 프로그램 및이 waaay 쉽습니다.

scraper.py (예 : django.db.models)에 models라는 이름이 있으면 import models 또는 import models as app_models을 사용하여 models.py를 같은 디렉토리에 가져 오면됩니다. 파이썬 모듈 규칙에 익숙합니까?

그러나 가장 좋은 방법은에서 ... 수입, 장고 관용구와 스틱 아마 ... 문이 자동으로 작동하지 않는 경우

from app import models 

, 다음 뭔가 설정에 잘못 .py.