복붙노트

[PYTHON] 파이썬으로 모듈을 올바르게 임포트하기

PYTHON

파이썬으로 모듈을 올바르게 임포트하기

각 모듈이 다른 모든 모듈의 객체에 액세스 할 수 있도록 모듈 가져 오기를 설정하려면 어떻게합니까?

다양한 하위 디렉토리에 모듈 파일이있는 중간 크기의 Python 응용 프로그램이 있습니다. sys.path에 이러한 하위 디렉토리를 추가하는 모듈을 생성하고 import thisModule을 tm으로 사용하여 모듈 그룹을 가져옵니다. 모듈 개체는 해당 자격으로 참조됩니다. 그런 다음 해당 모듈을 moduleImports import *에서 다른 모듈로 가져옵니다. 이 코드는 현재 매우 엉성하고 여러 가지가 있으며 종종 중복됩니다.

첫째, 일부 모듈 참조가 지정되지 않아 응용 프로그램이 실패합니다. 이 동일한 코드는 유닛 테스트시 실행됩니다.

둘째, 재귀 모듈 가져 오기에 문제가 발생한다고 걱정됩니다. moduleImports를 가져 오면 thisImodule을 가져 오며이 모듈은 moduleImports를 가져옵니다. . . .

이 작업을 수행하는 올바른 방법은 무엇입니까?

해결법

  1. ==============================

    1."다양한 하위 디렉토리에 모듈 파일이있는 중간 크기의 Python 응용 프로그램이 있습니다."

    "다양한 하위 디렉토리에 모듈 파일이있는 중간 크기의 Python 응용 프로그램이 있습니다."

    좋은. 패키지가되도록 각 디렉토리에 __init__.py 파일이 포함되도록하십시오.

    "이 하위 디렉토리를 sys.path에 추가하는 모듈을 만들었습니다"

    나쁜. PYTHONPATH를 사용하거나 전체 구조체 Lib / site-packages를 설치하십시오. sys.path를 동적으로 업데이트하지 마십시오. 나쁜 일이야. 관리 및 유지가 어렵다.

    "import thisModule을 tm으로 사용하여 모듈 그룹을 가져옵니다."

    말이되지 않습니다. 아마도 구조에있는 각 모듈에 대해 하나의 import thisModule을 가질 수 있습니다. 전형적이며 표준적인 방법입니다. 필요한 모듈 만 가져오고 다른 모듈은 가져 오지 마십시오.

    "그런 다음 해당 모듈을 moduleImports import *에서 다른 모듈로 가져옵니다."

    나쁜. 대량의 무작위 물건을 담요로 가져 오지 마십시오.

    각 모듈에는 필요한 특정 항목에 대한 목록이 있어야합니다.

    import this
    import that
    import package.module
    

    명시 적 목록. 마술은 없다. sys.path에 대한 동적 변경이 없습니다.

    현재 프로젝트에는 100 개의 모듈과 12 개 정도의 패키지가 있습니다. 각 모듈은 필요한 것을 가져옵니다. 마술은 없다.

  2. ==============================

    2.몇 가지 지침

    몇 가지 지침

  3. ==============================

    3.이것을하는 방법은 마술을 피하는 것입니다. 즉, 모듈이 다른 모듈의 내용을 필요로하는 경우 명시 적으로 가져와야합니다. 자동으로 가져 오는 것에 의존해서는 안됩니다.

    이것을하는 방법은 마술을 피하는 것입니다. 즉, 모듈이 다른 모듈의 내용을 필요로하는 경우 명시 적으로 가져와야합니다. 자동으로 가져 오는 것에 의존해서는 안됩니다.

    Zen of Python (임포트)이 가지고 있기 때문에 명시 적으로 암시적인 것보다 낫습니다.

  4. ==============================

    4.파이썬은 각 모듈을 캐시하고 이미로드 된 모듈을 다시로드하지 않으므로 가져 오기에 대한 재귀를 얻지 못합니다.

    파이썬은 각 모듈을 캐시하고 이미로드 된 모듈을 다시로드하지 않으므로 가져 오기에 대한 재귀를 얻지 못합니다.

  5. from https://stackoverflow.com/questions/896112/properly-importing-modules-in-python by cc-by-sa and MIT license