2014-05-23 9 views
3

나는 상속 된 프로젝트의 다음 디렉토리 구조가 :이 from models.model1 import Class1, Class2를 실행할 수 있습니다PyCharm은 모듈의 상대적 가져 오기를 어떻게 처리합니까?

work_dir/ 
    FlaskControlPanel/ 
     static/ 
     templates/ 
     app.py 
    models/ 
     __init__.py 
     model1.py 
     model2.py 
    script1.py 
    script2.py 

script1.py 또는 script2.py에서와 그것을 작동합니다. PyCharm을 사용할 때 app.py 내에서 동일한 가져 오기 행을 사용할 수 있습니다.

그러나 내 dev 서버에 배포 할 때 app.py에서 작동하지 않습니다. 오류가 발생합니다. ImportError: No module named models.model1

이 문제를 해결하기 위해 PyCharm은 무엇을합니까?

app.py에서 가져 오기를 PyCharm 및 개발 서버에서 Flask 응용 프로그램을 실행할 때 어떻게 수정합니까? 나는 보통 디렉토리에서 python app.py을 사용하여 서버에서 실행합니다.

답변

2

work_dir이 sys.path 또는 PYTHONPATH에 추가되었는지 확인해야합니다.

파이썬은 자동으로 sys.path에 스크립트 파일의 상위 폴더를 추가합니다. 따라서 셸에서 app.py를 실행하면 FlaskControlPanel만이 sys.path에 삽입되고 파이썬은 models이 어디인지 찾을 수 있습니다.

하지만 pycharm에서는 sys.path에 항상 work_dir이 추가됩니다. 그래서 app.py을 아무 문제없이 실행할 수 있습니다. 당신의 문제에 대한

, 당신은 work_dir로 디렉토리를 변경하고 PYTHONPATH=. python FlaskControlPanel/app.py

https://docs.python.org/2/using/cmdline.html#interface-options

가 참조 (절대 또는 상대) 파일 시스템 경로를해야 스크립트에 포함 된 파이썬 코드를 실행 실행 Python 파일, __main__.py 파일이 들어있는 디렉토리 또는 __main__.py 파일이 포함 된 zip 파일 중 하나입니다.

이 옵션을 지정하면 sys.argv의 첫 번째 요소는 명령 줄에 주어진 스크립트 이름이됩니다.

스크립트 이름이 Python 파일을 직접 참조하는 경우 해당 파일을 포함하는 디렉토리가 sys.path의 시작 부분에 추가되고 파일이 __main__ 모듈로 실행됩니다.

스크립트 이름이 디렉토리 또는 zipfile을 참조하면 스크립트 이름이 sys.path의 시작 부분에 추가되고 해당 위치의 __main__.py 파일이 __main__ 모듈로 실행됩니다.

+0

"FlaskControlPanel은 sys.path에 삽입되며 python은 모델이없는 위치를 찾을 수 없습니다."라는 뜻입니까? – Leo5188

관련 문제