Python 가져오기를 처리할 때 형제 패키지 가져오기 문제가 발생하면 실망스러울 수 있습니다. 이 문제를 해결하기 위해 두려운 sys.path.insert 해킹에 대한 대안을 살펴보겠습니다.
다음 프로젝트 구조를 고려하세요.
├── LICENSE.md ├── README.md ├── api │ ├── __init__.py │ ├── api.py │ └── api_key.py ├── examples │ ├── __init__.py │ ├── example_one.py │ └── example_two.py └── tests │ ├── __init__.py │ └── test_one.py
예제 및 테스트 디렉터리 내의 api 모듈에서 가져오려고 하면 다음과 같은 오류가 발생할 수 있습니다.
ModuleNotFoundError: No module named 'api'
sys.path 해킹에 의존하는 대신 여기 Pythonic이 있습니다. 해결 방법:
1단계: pyproject.toml 파일 만들기
[project] name = "myproject" version = "0.1.0" description = "My small project" [build-system] requires = ["flit_core >=3.2,<4"] build-backend = "flit_core.buildapi"
2단계: pip -e로 설치
필요한 경우 가상 환경을 활성화한 다음 편집 가능한 상태로 프로젝트를 설치합니다. 상태:
pip install -e .
3단계: 가져오기 조정
이전에 api 모듈에서 가져올 수 없었던 파일의 가져오기를 수정하여 프로젝트 이름을 포함합니다. 예:
from myproject.api.api import function_from_api
a pi.py
def function_from_api(): return 'I am the return value from api.api!'
test_one.py
from myproject.api.api import function_from_api def test_function(): print(function_from_api()) if __name__ == '__main__': test_function()
실행 중 테스트
아직 가상 환경에 있는지 확인하고 다음을 실행하세요.
python .\myproject\tests\test_one.py
출력:
I am the return value from api.api!
위 내용은 Python에서 형제 패키지를 가져올 때 'sys.path' 해킹을 어떻게 방지할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!