형제 패키지에서 가져온 수입품에 관한 질문에도 비슷한 답변을 게시했습니다. 여기서 볼 수 있습니다 .
sys.path
해킹 없는 솔루션
요약
- (예를 들어 하나 개의 폴더에 코드를 바꿈
packaged_stuff
)
- setuptools.setup ()
setup.py
을 사용하는 스크립트 작성을 사용하십시오 .
- 편집 가능한 상태로 패키지를 핍 설치
pip install -e <myproject_folder>
- 를 사용하여 가져 오기
from packaged_stuff.modulename import function_name
설정
질문에서와 동일한 폴더 구조를 가정합니다.
.
└── ptdraft
├── __init__.py
├── nib.py
└── simulations
├── __init__.py
└── life
├── __init__.py
└── life.py
.
루트 폴더를 호출하고 제 경우에는에 있습니다 C:\tmp\test_imports
.
단계
1) setup.py
루트 폴더에 추가
내용은 setup.py
간단하게
from setuptools import setup, find_packages
setup(name='myproject', version='1.0', packages=find_packages())
기본적으로 "모든" setup.py
이 작동합니다. 이것은 최소한의 실례입니다.
2) 가상 환경 사용
가상 환경에 익숙한 경우 가상 환경을 활성화하고 다음 단계로 건너 뜁니다. 가상 환경에서의 사용은하지 않는 절대적으로 필요하지만 그들은 것 정말 장기적으로 당신을 도울 (당신이 진행하는 1 개 이상의 프로젝트가있을 때 ..). 가장 기본적인 단계는 (루트 폴더에서 실행)
- 가상 환경 생성
- 가상 환경 활성화
. /venv/bin/activate
(Linux) 또는 ./venv/Scripts/activate
(Win)
이에 대한 자세한 내용은 "python virtualenv tutorial"또는 유사 항목을 Google에 알려주십시오. 작성, 활성화 및 비활성화 이외의 다른 명령은 필요하지 않습니다.
가상 환경을 만들고 활성화 한 후 콘솔은 가상 환경의 이름을 괄호 안에 표시해야합니다
PS C:\tmp\test_imports> python -m venv venv
PS C:\tmp\test_imports> .\venv\Scripts\activate
(venv) PS C:\tmp\test_imports>
3) 프로젝트를 편집 가능한 상태로 pip 설치
를 myproject
사용하여 최상위 패키지 를 설치하십시오 pip
. 트릭은 -e
설치를 수행 할 때 플래그 를 사용하는 것 입니다. 이렇게하면 편집 가능한 상태로 설치되고 .py 파일에 대한 모든 편집 내용이 설치된 패키지에 자동으로 포함됩니다.
루트 디렉토리에서 다음을 실행하십시오.
pip install -e .
(점은 "현재 디렉토리"를 나타냄)
또한 다음을 사용하여 설치되었음을 확인할 수 있습니다. pip freeze
(venv) PS C:\tmp\test_imports> pip install -e .
Obtaining file:///C:/tmp/test_imports
Installing collected packages: myproject
Running setup.py develop for myproject
Successfully installed myproject
(venv) PS C:\tmp\test_imports> pip freeze
myproject==1.0
4) mainfolder
모든 수입 에 앞서 수입
이 예에서는 mainfolder
입니다 ptdraft
. 이것은 다른 모듈 이름 (python 표준 라이브러리 또는 타사 모듈에서)과 이름 충돌이 발생하지 않는 이점이 있습니다.
사용법 예
nib.py
def function_from_nib():
print('I am the return value from function_from_nib!')
life.py
from ptdraft.nib import function_from_nib
if __name__ == '__main__':
function_from_nib()
life.py 실행
(venv) PS C:\tmp\test_imports> python .\ptdraft\simulations\life\life.py
I am the return value from function_from_nib!