일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 보안
- 알고리즘
- 데이터구조
- 딥러닝
- 인공지능
- 자바스크립트
- 데이터과학
- 네트워크보안
- 코딩
- 사이버보안
- 빅데이터
- 프로그래밍
- 네트워크
- 버전관리
- 웹개발
- 클라우드컴퓨팅
- 자료구조
- 데이터베이스
- 2
- Yes
- 파이썬
- 머신러닝
- 데이터분석
- 프로그래밍언어
- 소프트웨어공학
- 컴퓨터비전
- I'm Sorry
- 컴퓨터공학
- 소프트웨어
- 컴퓨터과학
- Today
- Total
스택큐힙리스트
형제 관련 패키지 불러오기 본문
저는 sibling imports에 관한 질문들을 읽어봤고 심지어 package documentation을(를) 찾아보았지만 아직도 답을 찾지 못했습니다.
번역하기:
다음 구조로 번역해주세요:
- Greetings
- Introduction
- Body of message
- Closing or conclusion statement
- Signature
├── 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
examples와 tests 디렉토리에 있는 스크립트들은 어떻게 api 모듈을 import하고 commandline에서 실행할 수 있나요?
또한, 매 파일마다 sys.path.insert 더럽고 추해 보이는 해킹 방식을 피하고 싶습니다. 파이썬으로 이것을 해결할 수 있을 것 같은데 말이죠?
답변 1
sys.path 해킹에 지쳤나요?
sys.path.append -해킹 방법은 많이 있지만, 나는 다른 해결 방법을 찾아 냈습니다.
요약
코드를 한 폴더에 포장하세요 (예: packaged_stuff).
tuptools.setup() . (se를 사용하는 최소한의 setup.py 스크립트를 작성하십시오.
pip install -e
from packaged_stuff.modulename import function_name 를 사용하여 가져오세요.
설정
시작점은 myproject이라는 폴더에 포장된 제공한 파일 구조입니다.
.
└── myproject
├── api
│ ├── api_key.py
│ ├── api.py
│ └── __init__.py
├── examples
│ ├── example_one.py
│ ├── example_two.py
│ └── __init__.py
├── LICENCE.md
├── README.md
└── tests
├── __init__.py
└── test_one.py
나는 . 를 루트 폴더라고 부르겠으며, 나의 예제 케이스에서 그것은 C:\tmp\test_imports\ 에 위치해 있습니다.
api.py
시험 케이스로 다음의 ./api/api.py를 사용해 봅시다.
def function_from_api():
return 'I am the return value from api.api!'
테스트_원.py
from api.api import function_from_api
def test_function():
print(function_from_api())
if __name__ == '__main__':
test_function()
test_one를 실행해보세요.
PS C:\tmp\test_imports> python .\myproject\tests\test_one.py
Traceback (most recent call last):
File .\myproject\tests\test_one.py, line 1, in
from api.api import function_from_api
ModuleNotFoundError: No module named 'api'
상대적인 가져오기도 시도하지 마십시오:
from ..api.api import function_from_api을(를) 사용하면 결과적으로 다음과 같습니다.
PS C:\tmp\test_imports> python .\myproject\tests\test_one.py
Traceback (most recent call last):
File .\tests\test_one.py, line 1, in
from ..api.api import function_from_api
ValueError: attempted relative import beyond top-level package
단계
루트 레벨 디렉터리에 setup.py 파일을 만드세요.
setup.py에 대한 내용은 다음과 같습니다.
from setuptools import setup, find_packages
setup(name='myproject', version='1.0', packages=find_packages())
가상 환경을 사용하세요.
가상 환경에 익숙하시면 활성화하고 다음 단계로 이동하십시오. 가상 환경을 사용하는 것은 필수가 아니지만, 오랜 기간에 걸쳐 여러 프로젝트를 진행할 경우 실제로 큰 도움이 됩니다. 가장 기본적인 단계는 (루트 폴더에서 실행)
가상 환경 만들기
python -m venv venv
가상 환경 활성화하기
해당 문장은 알파벳과 기호의 조합으로 이루어져 있으며 의미가 없는 문자열입니다. 따라서 번역이 불가능합니다.
이에 대해 더 알아보려면 파이썬 가상환경 튜토리얼 또는 유사한 것을 구글에서 검색해보세요. 아마 생성, 활성화 및 비활성화 외에는 다른 명령을 사용할 일이 없을 것입니다.
가상 환경을 만들고 활성화한 후, 콘솔에서는 괄호 안에 가상 환경 이름이 표시됩니다.
PS C:\tmp\test_imports> python -m venv venv
PS C:\tmp\test_imports> .\venv\Scripts\activate
(venv) PS C:\tmp\test_imports>
그리고 당신의 폴더 트리는 이렇게 보여야 합니다**
.
├── myproject
│ ├── api
│ │ ├── api_key.py
│ │ ├── api.py
│ │ └── __init__.py
│ ├── examples
│ │ ├── example_one.py
│ │ ├── example_two.py
│ │ └── __init__.py
│ ├── LICENCE.md
│ ├── README.md
│ └── tests
│ ├── __init__.py
│ └── test_one.py
├── setup.py
└── venv
├── Include
├── Lib
├── pyvenv.cfg
└── Scripts [87 entries exceeds filelimit, not opening dir]
편집 가능한 상태로 프로젝트를 설치하려면 pip를 사용하세요.
myproject을(를) 사용하여 상위 레벨 패키지를 설치하십시오. 설치할 때 pip를 사용하는 것이 핵심입니다. 이렇게하면 편집 가능한 상태로 설치되며, .py 파일에 대한 모든 편집 내용이 자동으로 설치된 패키지에 포함됩니다. -e 플래그를 사용하세요.
루트 디렉토리에서 다음을 실행하세요.
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
당신의 imports에 myproject.를 추가하십시오.
myproject.을 가져와야 작동하지 않는 가져오기에만 추가해야한다는 것을 유의하세요. setup.py 와 pip install를 사용하지 않아도 작동하는 가져오기는 여전히 잘 작동합니다. 아래 예제를 참조하세요.
해결책을 테스트하십시오.
이제 위에서 정의한 api.py와 아래에서 정의한 test_one.py를 사용하여 솔루션을 테스트해 봅시다.
테스트_원.py
from myproject.api.api import function_from_api
def test_function():
print(function_from_api())
if __name__ == '__main__':
test_function()
테스트 실행 중입니다.
(venv) PS C:\tmp\test_imports> python .\myproject\tests\test_one.py
I am the return value from api.api!
더 자세한 setup.py 예제는 setuptools docs를 참조하세요.
실제로 가상 환경을 하드 디스크 어디에든 위치시킬 수 있습니다.
답변 2
특정 프로그래밍 언어에서 라이브러리는 특정 폴더에 패키지로 저장됩니다. 이러한 패키지를 다른 프로젝트에서 재사용하려면 정확한 패키지 경로를 지정해야 합니다. 그러나 형제 패키지를 사용하면 같은 폴더에 있는 다른 패키지를 간단하게 가져올 수 있습니다.형제 패키지는 같은 부모 폴더를 공유하는 두 개 이상의 패키지를 가리킵니다. 이 패키지들은 서로 연결되어 있고 사용자가 패키지를 찾는 경로를 절약할 수 있게 됩니다. 형제 패키지를 사용하면 코드 작성 시간을 절약하고 가독성을 높일 수 있습니다.
파이썬에서 형제 패키지는 하나의 프로젝트 내에서 다른 패키지를 가져와 사용할 수 있습니다. 이는 지금까지 필요한 패키지가 프로젝트의 루트 폴더에 있지 않더라도 사용할 수 있게 합니다. 형제 패키지를 사용하면 이전보다 더 효율적으로 코드를 작성할 수 있으며, 코드를 유지보수하기 쉬워집니다.
결론적으로, 형제 패키지 임포트는 프로젝트에서 필요한 패키지를 빠르고 쉽게 가져오는 방법입니다. 또한 코드를 더 쉽게 읽고 유지 보수하기 쉽게 만듭니다. 따라서 개발자들은 형제 패키지를 효과적으로 사용하여 코드 작성 프로세스를 개선할 수 있습니다.