이 질문은 python 2.7 및 관련 가져 오기의 맥락에 있습니다. 나는 관련 질문을 겪었는데, 상황은 여전히 나를 위해 일하지 않습니다. 내가 뭘 놓치고 있는지 모르겠다. 다음형제 디렉토리에서 가져 오기와 관련한 문제
내 디렉토리 계층 구조
.
|-> wrapper.py
|-> __init__.py
|-> util
| |-> hello.py
| |-> __init__.py
|-> src
| |-> wrapper.py
| |-> __init__.py
모든 __init__.py 빈 파일은 ./util/hello.py 읽기 어떻게 다음
"를 포함하는 패키지와 같은 디렉토리를 치료"에 있습니다 . 이것은 자체의 주요 기능을 가지고 있으며 자체적으로 실행할 수 있습니다.
다음은 ./wrapper.py가 읽는 방법입니다. 이것은 또한 자체적 인 주요 기능을 가지고 있으며 목적을 달성하기 위해 ./util/hello.py를 사용합니다.
#!/usr/bin/python
# This is wrapper.py.
import sys
from util import hello
# Define a main() function that prints a little greeting.
def main():
hello.main() # This prints "Hello World!!!"
# Standard boilerplate that calls the main() function.
if __name__ == '__main__':
main()
다음은 ./src/wrapper.py에서 읽는 방법입니다.
#!/usr/bin/python
# This is wrapper.py.
import sys
from ..util import hello
# Define a main() function that prints a little greeting.
def main():
hello.main() # This prints "Hello World!!!"
# Standard boilerplate that calls the main() function.
if __name__ == '__main__':
main()
위와 같이 거의 변화가없는 ./wrapper.py와 거의 동일한 사본으로 변경 사항을 적용합니다 (가져 오기 변경). 모두 __init__.py도 있습니다. 그러나이를 실행하려고 시도하면 다음과 같은 오류가 발생합니다. 나는 다음과 같은 hello.py를 가져 오는 경우
Traceback (most recent call last):
File "wrapper.py", line 8, in <module>
from ..util import hello
ValueError: Attempted relative import in non-package
그러나, 그것은 작동합니다
import os
sys.path.append(os.path.abspath("../util/"))
import hello
두 질문 :
Q1을. 내가 뭘 잘못하고 있거나 내 관심을 잃어버린거야?
2. ./src/__init__.py을 코딩하면 ./src/wrapper.py에서 "import hello"가 작동합니다.
? 관련 - https://stackoverflow.com/questions/11536764/how-to-fix-attempted-relative-import-in-non-package-even-with-init-py –
Q1을 다루는 많은 기존 답변이 있습니다. "비 패키지에서 상대 가져 오기 시도"를 검색하십시오. 나는 질문이 잘못된 방향으로 인도하기 때문에 Q2에 대답 할 수 없다. 당신은'python -m src.wrapper'를 실행할 수 있습니다. 그렇다면'from hello import hello'도'src/wrapper.py'에서 작동합니다. 일반적으로 최상위 레벨이 아닌 위치에서 상대적인 수입을 피하는 것이 현명하다고 생각합니다! – mhoff
@AshishNitinPatil : "./src"에서 "python wrapper.py"로 실행 중입니다. –