> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 형제 패키지를 가져올 때 'sys.path' 해킹을 어떻게 방지할 수 있나요?

Python에서 형제 패키지를 가져올 때 'sys.path' 해킹을 어떻게 방지할 수 있나요?

Patricia Arquette
풀어 주다: 2024-12-11 13:56:10
원래의
134명이 탐색했습니다.

How Can I Avoid `sys.path` Hacks When Importing Sibling Packages in Python?

동위 패키지 가져오기: 간편한 접근 방식

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'
로그인 후 복사

해결책< /h2>

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿