>

파이썬 및 수입과 관련하여 SO에 대한 게시물이 많이 있다는 것을 알고 있지만 실제 게시물 패키지와 관련하여 수입 규칙/절차에 대해 묻는 게시물이 상당히 많은 것 같습니다 (단지 프로젝트 만 여러 디렉토리 및 파이썬 파일). 나는 파이썬을 처음 접했고 프로젝트 디렉토리에있는 여러 py 파일의 컨텍스트 내에서 액세스/가져 오기와 관련하여 가능하고 불가능한 것에 대한 더 기본적인 설명이 필요합니다.

다음과 같은 프로젝트 디렉토리가 있다고 가정 해 봅시다 (확실히 이것은 sys.path에있는 패키지가 아니라 데스크탑에 있습니다).

myProject/
├── __init__.py
├── scriptA.py
└── subfolder
    ├── __init__.py
    └── scriptB.py
    └── subsubfolder
        ├── __init__.py
        └── scriptC.py
        └── foo.py

scriptC.py 의 유일한 방법은   scriptB.py 내에서 메소드 또는 클래스를 가져오고 사용할 수 있습니다.  만약 scriptC.py   $ python scriptC.py 를 통해 직접 실행됩니다  그리고 subsubfolder 내에서   scriptB.py 에 상위 디렉토리와 경로를 추가하면   sys.path 를 통해 런타임에 Python 경로로  ?

그러나 pyzwyz는 가능하다   scriptC.py 를 가져 오려면  또는 foo.py   scriptB.py 를 가져 오려면  또는 scriptC.py   foo.py 를 다루지 않고 맞습니까? 하위 디렉토리의 인접한 py 파일과 py 파일은 상대 가져 오기 경로를 사용하여 액세스 할 수 있습니다 (sys.path를 사용하지 않고) 부모 또는 형제 디렉토리에있는 python 스크립트를 가져올 수는 없습니까?

sys.path

  • 답변 # 1

    가능한 것

    무엇이든.

    아뇨, 정말로 요 imp 를 참조하십시오  모듈, imputil  모듈- zipimport 를 살펴보십시오.  영감을 얻으려면 모듈이 작성됩니다.

    변수에 모듈 코드가있는 문자열을 얻을 수 있다면, 모듈을 sys.modules 로 가져올 수 있습니다  위의 내용을 사용하고 아마도 ast 를 사용하여 내용으로 해킹하십시오.  도중에 모듈.

    부모 디렉토리를 찾는 사용자 정의 가져 오기 후크? 가능성의 범위 내에서.

    <시간> 우수 사례

    제안하는 것은 실제로 좋은 습관이 아닙니다. 가장 좋은 방법은 다음과 같습니다.

    myProject/
    ├── setup.py
    └── src/
        ├── moduleA.py
        └── submodule/
            ├── __init__.py
            ├── moduleB.py
            └── subsubmodule/
                ├── __init__.py
                └── moduleC.py
    
    

    여기서 프로젝트의 최상위는 항상 myProject/src 입니다 . setup.py 를 사용하는 경우   moduleA:main 를 구성하는 방법 submodule.moduleB:main  그리고 submodule.subsubmodule.moduleC:main  진입 점 (아마도 scriptA ) scriptB  그리고 scriptC ) 그런 다음 main 라는 함수  사용자가 (setuptools에 의해 자동으로 생성 된) 스크립트를 실행했을 때 각 모듈에서 호출됩니다.

    이 레이아웃 (및 적절한 setuptools 사용)을 사용하면 moduleC.py  절대적으로 import moduleA 할 수 있습니다 또는 import submodule.moduleB .

    <시간>

    moduleC.py 에서 코드를 호출하는 진입 점을 포함하지 않는 다른 접근 방식  (모듈의 의도 된 계층 구조를 그대로 유지하고 python setup.py develop 가있는 virtualenv에 있다고 가정하면  다음과 같이 실행되었습니다 :

    python -m submodule.subsubmodule.moduleC
    
    

관련 자료

  • 이전 스프링 메일 인증 실패자
  • 다음 다른 수준의 PHP로 배열을 구문 분석하는 방법