나는 어떤 언어가 다른 소스 파일을 가져올 정도로 간단한 일에서 파이썬만큼 두통을 일으키는 생각하지 않습니다. 그래서 여기에 질문 : 내 모듈 가져 오기가 코드 실행 방법에 의존해야합니까?파이썬 모듈 가져 오기는 코드 실행 방법에 따라 달라 집니까?
./__init__.py
./config.py
./kmer
./kmer/__init__.py
./kmer/__main__.py
./kmer/__pycache__
./kmer/__pycache__/__init__.cpython-36.pyc
./kmer/__pycache__/__main__.cpython-36.pyc
./kmer/__pycache__/bed.cpython-36.pyc
./kmer/__pycache__/config.cpython-36.pyc
./kmer/__pycache__/reference.cpython-36.pyc
./kmer/__pycache__/sets.cpython-36.pyc
./kmer/bed.py
./kmer/config.py
./kmer/reference.py
./kmer/sets.py
내가 kmer
패키지 안에 다른 모듈에서 khmer
내부 모듈을 가져 오려는 :
나는 다음과 같은 디렉토리 구조를 가지고있다. 단순한?
그래서 나는bed.py
의에서이 추가 : 나는
kmer
디렉토리에서
python bed.py
을 실행하면가 import reference
import config
import sets
지금은 일이 잘 작동합니다. 또한 하나의 디렉토리로 돌아와서 python kmer/bed.py
으로 전화하면 문제가 없습니다. 파이썬이 주어진 파일에 상대적으로 임포트 된 모듈을 검색하는 것처럼 보입니다.
kmer
디렉토리의 python -m bed
디렉토리를 다시 실행하면 하나의 디렉토리로 돌아가서 을 실행하면 모듈 오류가 발생합니다. 파이썬이 인터프리터의 현재 디렉토리 안에있는 모듈을 찾아 파일 시스템의 어느 곳에 나있을 수있는 것처럼 보입니다. 그래서 상대적인 가져 오기가 작동해서는 안됩니다.
이것은 기본적으로 수입이 코드가 어떤 의미가없는 실행하는 것입니다 방법에 의존한다는 것을 의미한다. 이것이 어떻게 작동해야하는지에 대한 약간의 설명에 감사드립니다.
this 질문에 대한 답변을 포함하여 많은 리소스를 살펴 보았지만 매우 자세한 내용 (실제로 가장 잘 나온 설명 중 하나)은 내 문제를 해결하지 못하고 적절한 예를 제공하지 않지만 .
업데이트 :이 질문은 코드를 실행하는 다른 방법은의 중복으로 표시된 것보다, 수입에 미치는 영향을보다 정확하게 상대 수입의 다른 측면에 더 초점을 맞추고 생각합니다. 그 이유는 내가 처음에 다른 질문을 언급했기 때문입니다. 그러므로 나는 이것이 중복되어야한다고 생각하지 않는다. 패키지를 작성할 때
링크 된 질문이 문제를 해결하지 못하는 이유를 설명해야합니다. 문제가 해결되는 것처럼 보입니다. – user2357112
@ user2357112이 질문을 다른 점은 데이비스의 대답이 지적한 패키지 및 스크립트 의미 부분의 혼동입니다. 나는 연결된 질문과 이해를 자연스럽게 주관적으로 이해하지 못했습니다. – DarthPaghius