ProgramingTip

가져 오기 오기를위한 예비 패키징

bestdevel 2020. 11. 2. 08:12
반응형

가져 오기 오기를위한 예비 패키징


우선 : 미안합니다. 최적의 수입품에 대해 많은 질문이 있었지만 해결을 찾습니다. 가능한 경우 다음 디렉터리 레이아웃을 사용하고 싶습니다.

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가져 오려는 파일 아니라이 명령문 이있는 파일의 문제입니다 .

예를 들어 테스트에서 최후 가져 오기를 수행하는 경우 테스트를 패키지의 일부로 수행합니다.

  1. __init__.py테스트에 추가 /
  2. nosetests와 같은 외부 펼쳐보기에서 실행

으로 실행 python myClass/test/demo.py하면 실행 패키지가 아닌 데모 모듈을 실행 패키지 상대 가져 오기 작동하지 않습니다. 사용하는 비용은 사용하는 모듈이 패키지 모듈 from myClass.test.demo import blabla또는 상대 가져 오기 로 자체적으로 가져와야합니다.


어젯밤에 몇 시간 동안 검색 한 후에서 최다 수입에 대한 답을 찾았습니다 !! 또는 최소한 쉬운 해결책입니다. 이 문제를 해결하는 가장 좋은 방법은 다른 모듈에서 모듈을 호출하는 것입니다. 당신이 원하는 그래서 말을 demo.py가져올 myClass.py. myClass하위 패키지의 루트에 있는 폴더에는 다른 두 패키지를 호출하는 파일이 있어야합니다. 내가 작업 디렉토리는 항상 고려 수집 어떤에서 __main__당신이에서 가져 오기를 테스트하는 경우 demo.pydemo.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

반응형