TestPyPi via Commit to MasterPyPi per Tagging auf PYPIDies ist ein Arbeitsbeispiel, bei dem ein GitHub -Aktionen CI/CD -Workflow zum Testen, Erstellen und Hochladen eines Python -Pakets auf Testpypi und PYPI verwendet.
Ich habe dieses Beispielpaket erstellt, indem ich diese Leitfäden durcharbeite.
Der Rest der Readme beschreibt, ein neues Projekt auf die gleiche Weise einzurichten.
Beim Einrichten;
pip install example-package-grumbit installiert werden Auf hohem Niveau sieht der Prozess zur Einrichtung von Github CI/CD -Projektverpackungen einschließlich PyTesting so aus.
./.github/workflows/publish-to-test-pypi.yml jedoch vorerst aus../.github/workflows/publish-to-test-pypi.yml hinzu und holen Sie sich Github CI/CD Working cd < pacakges directory >
python3 -m venv .venv # Create the venv if it doesn't exist yet
source .venv/bin/activate
python3 -m pip install --upgrade pip setuptools wheel pip-tools pytest # Install the tools needed for the build tool
python3 -m pip install --upgrade build # Install the build tool itself
python3 -m build # build the packagepython3 -m pip install --upgrade twine # Install the twine upload tool
python3 -m twine upload --repository testpypi dist/ * # Upload to TestPyPi
# When prompted, the username is __token__ and the password is the TestPyPi global scope API tokenNachdem das Paket hochgeladen wurde, sollte ein paketspezifisches API -Token eingerichtet und in Testpypi gespeichert werden
Überprüfen Sie, ob das Paket in einem neuen venv heruntergeladen und verwendet werden kann.
cd < some new tmp directory >
python3 -m venv .venv
source .venv/bin/activate
package_name= " example-package-grumBit "
python3 -m pip install --index-url https://test.pypi.org/simple/ --pre ${package_name} # Check the package can be installed
python3 -c " from example_package_grumbit import example; print(example.add_one(1)) " # Check package functionspython3 -m twine upload dist/ * # Upload to PyPi
# When prompted, the username is __token__ and the password is the PyPi global scope API token[project] von ./Pyproject.toml aktualisiert werden, und es muss dann neu gebaut und hochgeladen werden. vs ./pyproject.toml
python3 -m build # build the package
python3 -m twine check dist/ * # check the package can be uploaded
python3 -m twine upload --repository testpypi dist/ * # test uploading using TestPyPi
python3 -m twine upload dist/ * # Upload to PyPi
cd " <the project's directory> "
repo_name= " <the new repo's name> "
gh repo create " ${repo_name} " --private
git init
git add --all
git commit -m " init "
git branch -M master
git remote add origin [email protected]:grumBit/ ${repo_name} .git
git push -u origin master Wenn der Standardzweig nicht master ist, ändern Sie ihn entweder in GitHub oder ändern Sie .github/workflows/publish-to-test-pypi.yml .
Fügen Sie die Testpypi- und PYPI -API -Token zum Repo hinzu
Öffnen Sie das Repo auf Github mit gh browse . Klicken Sie im Browser auf Settings -> Secrets -> Actions . Fügen Sie dann zwei neue Geheimnisse hinzu, die als PYPI_API_TOKEN und TEST_PYPI_API_TOKEN bezeichnet werden, wobei die API -Token nach dem Hochladen der obigen Pakete erstellt wurden
Erstellen und Konfigurieren von .github/Workflows/Publish-to-Test-Pypi.yml Workflow Definition
publish-to-test-pypi.yml enthält bereits die für automatischen Tests benötigten Teile (siehe unten)TestPyPi via Commit to Mastermaster -Zweig vorgenommen wird, wird der Github CI/CD ausgeführt.TestPyPi hochgeladenPyPi per Tagging auf PYPIWenn Sie ein Tag in ein Commit einfügen, und das Schieben veranlassen, Github CI/CD zu leiten und eine PYPI -Veröffentlichung zu erstellen.
Verwenden Sie Folgendes, um das neueste Commit (dh HEAD ) mit der derzeit konfigurierten Version in ./pyproject.toml zu markieren;
version_tag=v $( cat ./pyproject.toml | egrep " ^version " | cut -d ' " ' -f2 )
version_tag_info= " Some release info "
git tag -a " ${version_tag} " -m " ${version_tag_info} "
git push --tagversion_tag= " vX.X.X "
version_tag_info= " Some release info "
commit_sha= " 16fb0fd "
git tag -a " ${version_tag} " " ${commit_sha} " -m " ${version_tag_info} "
git push --tag - name : Install requirements
run : >-
python -m
pip install
--requirement requirements.txt
- name : Run tests
run : >-
python -m
pytest__init__.py zu den src/ und tests/ Verzeichnis wie diesem hinzugefügt wurde.test/ Ordnern in das src/ Baum. ./pyproject.toml kann so konfiguriert werden, dass eingebettete test/ Ordner ausgeschlossen sind, aber ich habe mich vorerst mit dem "Standard" entschieden. packaging_tutorial/
├── src/
│ ├── __init__.py
│ └── example_package_grumbit/
│ ├── __init__.py
│ └── example.py
└── tests/
├── __init__.py
└── example_package_grumbit/
├── __init__.py
└── test_example.py