Poetry 및 VSCode를 활용한 Python 프로젝트 3부: Python 치트시트

그리고 마지막으로, 이 세 번째이자 마지막 부분에서는 다음을 수행합니다.
- 샘플 라이브러리 작성.
- Poetry를 사용하여 프로젝트 빌드.
- PyPI에 게시.
Poetry 명령어
다음은 이 시리즈에서 사용된 명령어와 그 설명이 포함된 표입니다. 전체 목록은 Poetry 문서를 참조하십시오.
| 명령어 | 설명 |
|---|---|
poetry new [package-name] | 새 Python 프로젝트를 시작합니다. |
poetry init | 대화형으로 pyproject.toml 파일을 생성합니다. |
poetry install | pyproject.toml 파일 내의 패키지를 설치합니다. |
poetry add [package-name] | 가상 환경에 패키지를 추가합니다. |
poetry add -D [package-name] | 가상 환경에 개발 패키지를 추가합니다. |
poetry remove [package-name] | 가상 환경에서 패키지를 제거합니다. |
poetry remove -D [package-name] | 가상 환경에서 개발 패키지를 제거합니다. |
poetry update | 종속성의 최신 버전을 가져옵니다. |
poetry shell | 가상 환경 내에서 셸을 생성합니다. |
poetry build | 소스 및 휠 아카이브를 빌드합니다. |
poetry publish | 패키지를 Pypi 에 게시합니다. |
poetry publish --build | 패키지를 빌드하고 게시합니다. |
poetry self:update | Poetry 를 최신 안정 버전으로 업데이트합니다. |
프로젝트
원하시면 GitHub에서 소스 코드를 다운로드할 수 있지만, 앞서 언급했듯이 이것은 함수가 실행되는 데 걸리는 시간을 콘솔에 출력하는 간단한 데코레이터가 될 것입니다.
다음과 같이 작동합니다.
from how_long import timer
@timer
def test_function():
[i for i in range(10000)]
test_function()
# Execution Time: 955 ms.
그리고 프로젝트 디렉토리는 다음과 같습니다.
how-long
├── how_long
│ ├── how_long.py
│ └── __init__.py
├── how_long.egg-info
│ ├── dependency_links.txt
│ ├── PKG-INFO
│ ├── requires.txt
│ ├── SOURCES.txt
│ └── top_level.txt
├── LICENSE
├── poetry.lock
├── pyproject.toml
├── README.rst
└── tests
├── __init__.py
└── test_how_long.py
시작하기 전에 poetry update 명령어로 패키지 업데이트를 확인하십시오.

README.rst에 프로젝트에 대한 간략한 설명을 추가합니다.
how_long
========
함수 실행 시간을 측정하는 간단한 데코레이터입니다.
예시
_______
.. code-block:: python
from how_long import timer
@timer
def some_function():
return [x for x in range(10_000_000)]
how_long/how_long.py로 이동합니다.
# how_long.py
from functools import wraps
import pendulum
def timer(function):
"""
함수 실행 시간을 측정하는 간단한 데코레이터입니다.
"""
@wraps(function)
def function_wrapper():
start = pendulum.now()
function()
elapsed_time = pendulum.now() - start
print(f"Execution Time: {elapsed_time.microseconds} ms.")
return function_wrapper
how_long/__init__.py에서:
from .how_long import timer
__version__ = "0.1.1"
그리고 마지막으로, tests/test_how_long.py 파일:
from how_long import __version__
from how_long import timer
def test_version():
assert __version__ == "0.1.1"
def test_wrap():
@timer
def wrapped_function():
return
assert wrapped_function.__name__ == "wrapped_function"
이제 터미널에서 poetry install을 사용하여 패키지를 로컬에 설치하고 테스트할 수 있습니다. 가상 환경을 활성화하지 않았다면 활성화하고 Python 대화형 셸에서:
>>> from how_long import timer
>>>
>>> @timer
... def test_function():
... [i for i in range(10000)]
...
>>> test_function()
Execution Time: 705 ms.
테스트를 실행하고 모든 것이 괜찮다면 다음으로 넘어갑니다.
빌드 및 게시
마침내 이 프로젝트를 세상에 공개할 때가 왔습니다! PyPI에 계정이 있는지 확인하십시오. 패키지 이름은 고유해야 합니다. 확실하지 않은 경우 검색을 사용하여 확인하십시오.
빌드
poetry build 명령어는 나중에 프로젝트의 소스로 업로드될 소스 및 휠 아카이브를 빌드합니다.

how_long.egg-info 디렉토리가 생성됩니다.
게시
이 명령어는 패키지를 PyPI에 게시하고, 처음 제출하는 경우 업로드하기 전에 자동으로 등록합니다.

$ poetry publish --build를 사용하여 프로젝트를 빌드하고 게시할 수도 있습니다.
자격 증명을 입력하고 모든 것이 괜찮다면 프로젝트를 탐색하면 다음과 같은 화면이 나타납니다.

이제 다른 사람들에게 어디서든 어떤 컴퓨터에서든 pip install how-long을 할 수 있다는 것을 알릴 수 있습니다!
결론
처음 패키지를 게시하려고 했을 때 악몽 같았던 기억이 납니다. 저는 Python 을 막 시작했을 때였고, setup.py 파일이 무엇이며 어떻게 사용해야 하는지 이해하려고 "몇 시간"을 보내야 했습니다. 결국 저는 Makefile, MANIFEST.in, requirements.txt, test_requirements.txt와 같은 여러 파일로 끝났습니다. 그래서 Poetry의 창시자인 Sébastien Eustace의 말이 저에게 큰 의미로 다가왔습니다.
Python 의 패키징 및 종속성 관리는 초보자에게는 다소 복잡하고 이해하기 어렵습니다. 숙련된 개발자에게도 Python 프로젝트에 필요한 모든 파일 (
setup.py,requirements.txt,setup.cfg,MANIFEST.in, 그리고 새로 추가된Pipfile) 을 만드는 것이 때로는 번거로울 수 있습니다.그래서 저는 종속성 관리, 패키징 및 게시를 수행하기 위해 모든 것을 단일 구성 파일로 제한하는 도구를 원했습니다.
이는
composer(PHP) 또는cargo(Rust) 와 같이 다른 언어에 존재하는 도구에서 영감을 받았습니다.그리고 마지막으로, Python 에는 종속성을 제대로 해결할 수 있는 신뢰할 수 있는 도구가 없으므로, 저는 Python 커뮤니티에 철저한 종속성 해결사를 제공하기 위해
poetry를 시작했습니다.
Poetry 는 결코 완벽하지 않지만, 다른 도구와 달리 약속한 바를 실제로 수행합니다.