__init__.py
이 아니라 init.py
입니다. 가져올 수 있으려면 계층 구조의 각 디렉토리에 포함되어 있는지 확인하십시오.
편집 : 나는 그것을 재현 할 수있었습니다.
내가 문제를 좁힐 수
data.py
의 맨 처음에 다음 코드를 삽입
[email protected]:/tmp/asdasd$ tree
.
`-- myapp
|-- __init__.py
|-- models
| |-- __init__.py
| `-- models.py
|-- scripts
| |-- data.py
| `-- __init__.py
`-- tests
|-- __init__.py
`-- tests.py
: 다음 data.py
방식의 영업 이익을 실행
import sys
import pprint
pprint.pprint(sys.path)
from myapp.models.models import *
을 yeilds의 ImportError를을 표시 :
다음은 디렉토리 구조의
[email protected]:/tmp/asdasd$ python myapp/scripts/data.py
['/tmp/asdasd/myapp/scripts',
'/usr/lib/python2.6',
'/usr/lib/python2.6/plat-linux2',
'/usr/lib/python2.6/lib-tk',
-- Skipped --
'/usr/local/lib/python2.6/dist-packages']
Traceback (most recent call last):
File "myapp/scripts/data.py", line 6, in
from myapp.models.models import *
ImportError: No module named myapp.models.models
하지만이 방법은 매력처럼 작동합니다.
[email protected]:/tmp/asdasd$ python -m myapp.scripts.data
['',
'/usr/lib/python2.6',
'/usr/lib/python2.6/plat-linux2',
'/usr/lib/python2.6/lib-tk',
-- Skipped --
'/usr/local/lib/python2.6/dist-packages']
sys.path
의 첫 번째 항목의 차이점에 유의하십시오.
'from foo import *'는 네임 스페이스 충돌을 야기하므로 대단히 권장하지 않습니다. 그 성명서에 어떤 일이 벌어 질지 말하기는 어렵습니다. – msw
나는'import'와 같은 파이썬 키워드로 모듈을 명명하는 것을 피하려고합니다. 이제 당신은'import myapp.import' 할 수 없습니다! – bobince
필자는 그것을 python myapp/scripts/data.py라고 이름을 바꿨다. 그러나 여전히 같은 문제이다. –