이것은 GitHub Actions CI/CD를 사용하여 자동화 된 테스트 및 패키지 게시 워크 플로우로 설정된 PYPI (Python Package Index) 패키지 예제입니다. 주로 첫 번째 PYPI 패키지를 작성하고 게시하려는 Github + vs Code (Windows / Mac / Linux) 사용자 용으로 만들어집니다. 패키지는 스타터 / 보일러 플레이트 / 데모 역할을 할 수 있으며 튜토리얼을 통해 패키지 / 모듈 이름 혼동 및 vs 코드 테스트 구성 문제와 같은 작지만 성가신 문제를 해결하기 위해 빠르고 간결한 설명을 제공 할 수 있습니다.
이 예제 패키지는 공식 샘플 프로젝트 PYPA / SampleProject를 기반으로 / 영감을 받았지만이 패키지는 다음과 같습니다.
master 또는 main 브랜치를 밀 때 테스트하고 릴리스를 만들 때 게시됩니다.PYTHONPATH 에 src/ 폴더를 추가하여 테스트 파일이 일렬 오류가없고 code에서 pytest로 실행될 수 있도록합니다.(위의 버튼을 클릭 하여이 예제 패키지를 새 Github Repo의 템플릿으로 사용하면 새 저장소가 초기화되며 내 커밋은 GIT 기록에 있지 않습니다).
(GitHub를 사용하지 않으면 예제 패키지의 아카이브를 다운로드 할 수 있습니다)
많은 사람들이 동일한 패키지와 모듈 이름을 사용하면 확실히 그렇게 할 수 있습니다. 그러나이 예제 패키지와 모듈 이름은 다릅니다 : example_pypi_package 및 examplepy .
Visual Studio Code, Ctrl + Shift + F ( example_pypi_package 또한 폴더 SRC/examplePy 의 이름을 변경해야합니다.
간단하고 대략적으로 말하면, 패키지 이름은 pip install <PACKAGENAME> import <MODULENAME> 두 이름 모두 소문자 기본 문자 (AZ)로 구성되어야합니다. 당신이 정말로 필요하면 밑줄이있을 수 있습니다 ( _ ). 하이픈 미니 누스 ( - )는 사용해서는 안됩니다.
또한 URL "https://pypi.org/project/example-pypi-package/"(패키지 이름으로 example-pypi-package 모두 _ - 되면서 교체)가 점유되지 않도록해야합니다.
밑줄 ( _ )을 사용할 수 있지만 그러한 사용은 권장되지 않습니다. 이름이 숫자로 시작되지 않으면 숫자를 사용할 수 있지만 그러한 사용도 낙담합니다.
숫자로 시작하거나 하이픈 - 미니 누스 ( - )를 포함하는 이름은 사용해서는 안됩니다. 기술적으로 합법적이지만 그러한 이름은 많은 문제를 일으 킵니다 - 사용자는 importlib 사용하여 가져와야합니다.
pypi.org의 URL "pypi.org/project/example-pypi-package/"및 "example-pypi-package"라는 이름에 속지 마십시오. pypi.org 및 pip 시스템은 모든 _ - 변환하고 웹 사이트 / in pip 명령에서 후자를 사용하지만 실제 이름은 여전히 _ 와 함께 사용되며, 사용자는 패키지를 가져올 때 사용해야합니다.
서브 패키지가 필요한 경우 사용할 네임 스페이스도 있습니다.
setup.py 에 필요한 변경을 수행하십시오.
패키지의 버전 번호 __version__ 는 src/examplepy/__ init__.py 에 있습니다. 당신은 그것을 바꾸고 싶을 수도 있습니다.
예제 패키지는 Python 3.6, 3.7, 3.8, 3.9와 호환되도록 설계되었으며 이러한 버전에 대해 테스트됩니다. 버전 범위를 변경 해야하는 경우 변경해야합니다.
classifiers , setup.py 의 python_requiresenvlistmatrix: python: in .github/Workflows/test.yml 테스트 목적을 위해 PYPI의 놀이터 인 TestPypi에 업로드하려는 경우 twine upload --repository pypi dist/* TWINE UPLOAD) 파일의 twine upload --repository testpypi dist/* 변경하십시오.
PIP는 파이썬 패키지 관리자입니다. Python 3.4 이상을 사용하는 경우 이미 PIP가 있습니다. PIP가 설치되어 있는지 확인하는 방법을 알아 보려면 이것을 읽으십시오. 설치 해야하는 경우 읽어보십시오.
Visual Studio Code는 오늘날 가장 인기있는 코드 편집기이며, 예제 패키지는 VS Code와 함께 작동하도록 구성되어 있습니다.
Code 확장 "Python"을 설치하십시오.
"Python"vs Code Extension은 Pylint를 설치하는 것이 좋습니다. 또한 예제 패키지는 VS Code + Python Extensions와 함께 Pytest를 사용하도록 구성되어 있으므로 Pylint 및 Pytest를 설치하십시오.
pip install pylint pytest(그렇다면 명령을 입력하고 실행할 필요가 없다면 설치하라는 메시지가 표시됩니다.
vscode.env 의 내용은 이제 PYTHONPATH=/;src/;${PYTHONPATH} 이며 Windows에 좋습니다. Linux 또는 MacOS를 사용하는 경우 PYTHONPATH=/:src/:${PYTHONPATH} (교체 ; with : 로 변경해야합니다. 경로가 올바르게 설정되지 않으면 테스트 파일에 라인 오류가 표시되며 Pytest는 테스트/테스트 _*를 실행할 수 없습니다. PY 파일을 올바르게 실행할 수 없습니다.
닫고 다시 열 수 있습니다. 이제 왼쪽 메뉴에서 실험실 플라스크 아이콘을 클릭하고 pytest를 사용하여 모든 테스트를 실행할 수 있습니다. Pytest는 표준 Unittest 프레임 워크보다 더 나은 것처럼 보이므로 unittest 지원하므로 테스트 파일에서 import unittest 계속 사용할 수 있습니다.
예제 패키지에는 .editorconfig 파일도 있습니다. 파일을 사용하는 대 코드 확장 "vs Code 용 editorConfig"를 설치할 수 있습니다. 현재 구성을 사용하면 EditorConfig 도구는 압입을 위해 공백 (.Py의 4 개 공간, 2의 공간 2 개), UTF-8 인코딩 설정, 라인의 LF 끝, 비 Markdown 파일에서 후행 흰색을 다듬기 등을 자동으로 사용할 수 있습니다.
vs 코드에서는 파일 -> 환경 설정 -> 설정으로 이동하여 검색 상자에 "Python 형식 형식 공급자"를 입력하고 세 가지 Python Code Formatting Tools (AutoPep8, Black 및 YAPF) 중 하나를 선택할 수 있습니다. 코드 파일의 서식을위한 바로 가기는 Shift + Alt + F (Windows)입니다. Shift + 옵션 (Alt) + F (MACOS); Ctrl + Shift + I (Linux).
src/ examplepy/ ( examplepy 모듈 이름으로 대체되어야 함) 폴더, module1.py 이름을 바꾸고 코드를 작성해야합니다. 필요한 경우 더 많은 모듈 .py 파일을 추가하십시오.
Tests/ Folder에서 Test_Module1.py 이름을 바꾸고 ( 테스트 _*. PY ) 단위 테스트 코드 (UnitTest 포함)를 작성하십시오. 필요한 경우 더 많은 테스트 _*. py 파일을 추가하십시오.
Tox를 설치하고 실행하십시오.
pip install tox
tox 우리의 구성에서, Tox는 체크-관리 (repo가 git-initialized ( git init ) 및 추가 ( git add . ), setuptools의 점검 및 Pytest를 사용한 단위 테스트를 사용하여 소스 배포 점검을 실행합니다. 그러나 확인 관리 및 pytest를 설치할 필요는 없지만 Tox는 별도의 환경에 설치합니다.
자동화 된 테스트는 여러 Python 버전에 대해 실행되지만 컴퓨터에서는 Python 3.9 인 경우 하나의 Python 버전 만 사용하여 실행할 수 있습니다.
tox -e py39 루트 디렉토리 ( example_pypi_package/ )에 더 많은 파일을 추가하면 tox.ini 의 check-manifest --ignore 목록에 파일을 추가해야합니다.
setuptools 및 wheel 설치 또는 업그레이드하십시오.
python -m pip install --user --upgrade setuptools wheel ( python3 이 컴퓨터의 명령 인 경우 위 명령에서 python python3 로 변경하거나 Linux에서 Bash를 사용하는 경우 alias python=python3 에 ~/.bashrc 또는 ~/.bash_aliases 파일을 추가하십시오.
dist 생성하십시오 example_pypi_package 디렉토리에서 dist Folder에서 소스 배포 (SDIST)를위한 프로덕션 버전을 생성하려면 다음 명령을 실행하십시오.
python setup.py sdist bdist_wheel선택적으로 PYPI 또는 TestPypi에 업로드하기 전에 로컬로 패키지의 Dist 버전을 설치할 수 있습니다.
pip install dist/example_pypi_package-0.1.0.tar.gz(먼저 기존 패키지를 제거해야 할 수도 있습니다.
pip uninstall example_pypi_package 동일한 이름을 가진 여러 설치 패키지가있을 수 있으므로 더 이상 제거 할 패키지가 없을 때까지 pip uninstall 하십시오.)
PYPI에 계정을 등록하고 계정 설정 § API 토큰, "API 토큰 추가"로 이동하십시오. PYPI 토큰은 한 번만 나타나서 어딘가에 복사하십시오. 놓친 경우 오래된 것을 삭제하고 새 토큰을 추가하십시오.
(testpypi에 업로드하는 경우 testpypi 계정 등록)
새로 생성 된 GitHub Repo의 페이지에서 설정 pypi- > 비밀 - PYPI_API_TOKEN 새 저장소 비밀을 클릭 하십시오 .
예제 패키지에는 자동화 된 테스트 및 업로드 (게시)가 이미 GitHub 작업으로 설정되었습니다.
master 또는 main 브랜치에 git push 또는 풀 요청이 제출 될 때마다 패키지는 GitHub 동작을 사용하여 원하는 Python 버전에 대해 자동으로 테스트됩니다. 패키지가 PYPI에 게시되면 https://pypi.org/project/example-pypi-package/ ( _ - )로 이동하십시오. 페이지에서 명령을 복사하고 실행하여 PYPI에서 패키지를 다운로드하여 설치하십시오. (또는 사용하는 경우 test.pypi.org)
pypi.org에서 패키지의 설명 / readme를 수정하려면 새 버전을 게시해야합니다.
꼬기 설치 또는 업그레이드 :
python -m pip install --user --upgrade twine$ home ( ~ ) 디렉토리에 .pypirc 파일을 작성하십시오. 해당 내용은 다음과 같습니다.
[pypi]
username = __token__
password = <PyPI token> (testpypi에 업로드하는 경우 [pypi] [testpypi] 를 사용하십시오)
<PyPI token> 실제 pypi 토큰으로 바꾸십시오 ( pypi- 로 시작).
( $ home/.pypirc를 수동으로 만들지 않으면, 당신은 꼬기를 실행할 때 사용자 이름 ( __token__ 이어야 함)과 비밀번호 (pypi 토큰이어야 함)가 표시됩니다).
Twine을 실행하여 Dist Folder의 모든 아카이브를 업로드하십시오.
python -m twine upload --repository pypi dist/ * (testpypi에 업로드하는 경우 pypi 대신 testpypi 사용하십시오)
최신 버전의 패키지 개발을 마치면 다음 작업을 수행하십시오.
src examespy__init __. py 에서 버전 번호 __version__ 수정하십시오.
Dist 에서 모든 이전 버전을 삭제하십시오.
Dist를 재생하려면 다음 명령을 다시 실행하십시오.
python setup.py sdist bdist_wheel다음 명령을 다시 실행하여 DIST를 업로드하십시오.
python -m twine upload --repository pypi dist/ * (필요한 경우 pypi 대신 testpypi 사용하십시오)
BTW, NPM 레지스트리에 TypeScript (JavaScript) 패키지를 게시하려면 2021 년 NPM에 게시 할 수 있도록 TypeScript 패키지 예제로 이동하십시오.