가져 오기 오기를위한 예비 패키징
우선 : 미안합니다. 최적의 수입품에 대해 많은 질문이 있었지만 해결을 찾습니다. 가능한 경우 다음 디렉터리 레이아웃을 사용하고 싶습니다.
myClass/
__init__.py
test/
demo.py
benchmark.py
specs.py
src/
__init__.py
myClass.py
이제 내 질문은 다음과 가변합니다.
myClass.py를 제대로 가져 오나요?
libs / myClass 또는 include / myClass에서 myClass를 하위 모듈로 사용하는 가정하면 외부에서 패키지를 어떻게 가져 오겠습니까?
지금까지 나는 이것에 대한 우아한 해결책을 수 없습니다. 내가 귀도 결정을의 이해 한 바에 from ..src import myClass
따르면 가능해야 우리 하지만 오류가 발생합니다.
ValueError: Attempted relative import in non-package
myClass를 패키지로 취급하지 않는 것처럼 보입니다. 문서 읽기 :
__init__.py 파일은 Python이 디렉토리를 패키지를 포함하는 취급 취급하는 데 필요합니다.
패키지의 펼쳐가 어디에 지정하는 것이 누락 된 것입니다. .pth를 가지고 있습니까?
ValueError: Attempted relative import in non-package
패키지가 아닌 모듈에서 상대 가져 오기를 사용함을 의미합니다. from ... import
가져 오려는 파일 이 아니라이 명령문 이있는 파일의 문제입니다 .
예를 들어 테스트에서 최후 가져 오기를 수행하는 경우 테스트를 패키지의 일부로 수행합니다. 이
__init__.py
테스트에 추가 /- nosetests와 같은 외부 펼쳐보기에서 실행
으로 실행 python myClass/test/demo.py
하면 실행 패키지가 아닌 데모 모듈을 실행 패키지 상대 가져 오기 작동하지 않습니다. 사용하는 비용은 사용하는 모듈이 패키지 모듈 from myClass.test.demo import blabla
또는 상대 가져 오기 로 자체적으로 가져와야합니다.
어젯밤에 몇 시간 동안 검색 한 후에서 최다 수입에 대한 답을 찾았습니다 !! 또는 최소한 쉬운 해결책입니다. 이 문제를 해결하는 가장 좋은 방법은 다른 모듈에서 모듈을 호출하는 것입니다. 당신이 원하는 그래서 말을 demo.py
가져올 myClass.py
. myClass
하위 패키지의 루트에 있는 폴더에는 다른 두 패키지를 호출하는 파일이 있어야합니다. 내가 작업 디렉토리는 항상 고려 수집 어떤에서 __main__
당신이에서 가져 오기를 테스트하는 경우 demo.py
와 demo.py
해당 오류가 발생합니다. 설명하기 위해 :
폴더 계층 :
myClass/
main.py #arbitrary name, can be anything
test/
__init__.py
demo.py
src/
__init__.py
myClass.py
myClass.py :
def randomMaths(x):
a = x * 2
y = x * a
return y
demo.py :
from ..src import myClass
def printer():
print(myClass.randomMaths(42))
main.py :
import test.demo
demo.printer()
당신이 실행하는 경우 demo.py
인터프리터, 당신은 오류가 발생합니다 main.py
. 약간 복잡하지만 작동합니다 : D
내부 패키지 참조는 방법에 대해 설명 myClass
에서 test/*
. 외부에서 패키지를 가져 오려면 가져 PYTHONPATH
오기 응용 프로그램을 실행하기 전에 환경 변수에 경로를 추가 하거나 sys.path
가져 오기 전에 코드 에 나열해야합니다.
from ..src import myClass
실패 이유 : 아마도 src
파이썬 패키지가 아니므로 거기에서 가져올 수 없습니다. 위에서 설명한대로 파이썬 경로에 추가해야합니다.
참고 URL : https://stackoverflow.com/questions/4348452/python-packaging-for-relative-imports
'ProgramingTip' 카테고리의 다른 글
Google Maps API v3 + jQuery UI 탭의 문제 (0) | 2020.11.02 |
---|---|
JavaScript를 사용하여 웹 소켓을 인터페이스 비디오 스트리밍 (0) | 2020.11.02 |
이것은 JVM 버그입니까 아니면 "예상 된 동작"입니까? (0) | 2020.11.02 |
브라우저 간 북마크 / 즐겨 찾기에 추가 JavaScript (0) | 2020.11.02 |
Qt“비공개 양성소 :”이것은 무엇입니까? (0) | 2020.11.02 |