Cara Membuat Dan Mempublikasikan Paket Python Pertama Anda
Rangkuman
Bila Anda tidak pernah membuat package Python berminat untuk membuat, posting ini bisa menjadi lokasi yang pas untuk mengawali!
pyenv: Management versi Python | |
conda: Management lingkungan Python | |
puisi: Management package keterikatan | |
package Python (py-pkgs.org): Langkah membuat package Python | |
cookiecutter: Alat untuk membikin project Python dari templat | |
PyPI (Index package Python): Pusat package Python tempat Anda bisa mengeluarkan package Anda dan Anda bisa memakai package dari. | |
Tes Python Package Indeks: Pusat package Python untuk pengetesan | |
python-semantic-release: Alat untuk membuat otomatis launching package Python berdasar komit semantik | |
flake8, hitam, isor: Formater、Linter |
Siapkan lingkungan dengan Conda
Instalasi berada di sini:
- Ambil penginstal miniconda3 untuk basis Anda. misalkan Miniconda3 macOS Apple M1 ARM 64-bit bash.
- Lakukan penginstal
bash Miniconda3-latest-MacOSX-x86_64.sh
Sekarang, Anda dapat membuat lingkungan conda dengan perintah berikut:
conda create --name <environment name> python=3.9 -y
Kemudian, Anda perlu mengaktifkannya dengan perintah berikut:
conda activate <environment name>
Mengelola package Anda dengan Puisi
Pertama, Anda perlu menginstal puisi:
curl -sSL https://install.python-poetry.org | python3 -
Jika Anda menemukan peringatan berikut, cukup ikuti instruksi dan pindahkan direktori.
Configuration file exists at xxx/Library/Application Support/pypoetry, reusing this directory.
Consider moving configuration to xxx/Library/Preferences/pypoetry, as support for the legacy directory will be removed in an upcoming release.
mkdir -p ~/Library/Preferences/pypoetry
mv ~"/Library/Application Support/pypoetry/config.toml" ~/Library/Preferences/pypoetry/config.to
Buat package dengan cookiecutter
Cookiecutter adalah alat untuk membuat proyek python dari templat.
Anda dapat menginstal cookiecutter dengan perintah berikut:
pip install cookiecutter
atau Anda dapat menggunakan drink jika Anda menggunakan MacOS
brew install cookiecutter
Kemudian, buat proyek Python dari template cookiecutter ini: https://github.com/py-pkgs/py-pkgs-cookiecutter
cookiecutter https://github.com/py-pkgs/py-pkgs-cookiecutter.git
Terapkan package Anda
Anda dapat menerapkan package Anda sendiri dalam proyek Python yang dihasilkan di atas. Strukturnya akan seperti berikut (dari Cara mengemas Python):
pycounts
├── CHANGELOG.md ┐
├── CONDUCT.md │
├── CONTRIBUTING.md │
├── docs │ Package documentation
│ └── ... │
├── LICENSE │
├── README.md ┘
├── pyproject.toml ┐
├── src │
│ └── pycounts │ Package source code, metadata,
│ ├── __init__.py │ and build instructions
│ ├── moduleA.py │
│ └── moduleB.py ┘
└── tests ┐
└── ... ┘ Package tests
pycounts
adalah nama package contoh.
Bangun package Anda
Anda dapat membangun package Python Anda dengan perintah berikut:
poetry build
Semuanya sudah siap karena Anda membuat proyek Anda dari template.
Perintah ini akan menghasilkan wheel dan src under dist
direktori, yang dapat dikonfigurasi oleh dist_path
atau pyproject.toml
.
Perbarui versi package
Saat Anda menambahkan beberapa fitur atau membuat versi pertama dari package Anda. Anda perlu memutakhirkan versi package Anda.
Anda dapat melakukannya dengan poetry version
memerintah:
poetry version <rule>
rule dapat menjadi salah satu dari berikut ini: |
|
---|---|
1 |
major : peningkatan versi utama mis. 1.2.0 -> 2.0.0 |
minor : peningkatan versi minor mis. 1.2.0 -> 1.3.0 |
|
patch : pemutakhiran versi tambalan mis. 1.2.0 -> 1.2.1 |
|
premajor : pemutakhiran versi utama mis. 1.2.0 -> 2.0.0a0 |
|
preminor : peningkatan versi premium mis. 1.2.0 -> 1.3.0a0 |
|
prepatch : pemutakhiran versi pratambalan mis. 1.2.0 -> 1.2.1a0 |
|
dll. |
Untuk detail lebih lanjut, Anda dapat membaca https://python-poetry.org/docs/cli/#version.
Publikasikan package Anda ke PyPi
Anda dapat menerbitkan package Python Anda sehingga orang lain dapat menggunakannya sebagai pustaka Python lain yang biasanya Anda instal pip install <package-name>
.
Pengaturan PyPi
Anda perlu mendaftar https://test.pypi.org/account/register/ dan https://pypi.org/account/register masing-masing untuk pengujian dan prod. Anda dapat melewati langkah ini jika Anda sudah memiliki akun.
Untuk pengujian, Anda dapat menambahkan sumber test-pypi
untuk konfigurasi puisi:
poetry source add test-pypi https://test.pypi.org/simple/
Dan hasilkan kunci API dari https://test.pypi.org/manage/account/ untuk akun pengujian dan setel ke pypi-token.test-pypi
poetry config pypi-token.test-pypi pypi-xxxxxx
Sekarang Anda siap untuk mempublikasikan package Anda ke test-pypi.
Anda harus melakukan hal yang sama untuk pypi https://pypi.org/ dengan mengatur kunci API Anda:
poetry config pypi-token.pypi pypi-xxxxx
(Hati-hati, perintah ini ditetapkan pypi-token.pypi
!)
Publikasikan package Anda untuk menguji pypi
Bangun package Anda dengan perintah berikut:
poetry build
Publikasikan oleh poetry publish
perintah dengan menentukan test-pypi
:
poetry publish -r test-pypi
You’ll be able to check your package with the url: https://test.pypi.org/project/<yourpackage>/
Periksa package Anda diterbitkan untuk menguji pypi
Anda dapat menginstal package Anda dari test pypi
poetry add --source test-pypi <your package>
Dan Anda dapat memeriksa perilaku sebagai pengguna.
Setelah mengonfirmasi semuanya baik-baik saja, sekarang saatnya memublikasikan ke Pypi.
Publikasikan package Anda ke Pypi
Anda dapat menerbitkan package Anda dengan cara yang hampir sama seperti yang Anda lakukan untuk test pypi:
poetry build
poetry publish
Rilis oleh Python Semantic Release (PSR)
Python Semantic Release (PSR) adalah alat untuk mengotomatisasi rilis berdasarkan pesan komit semantik.
Untuk mengkonfigurasi PSR, Anda perlu menginstalnya dengan perintah:
poetry add --dev python-semantic-release
Dan perbarui pyproject.toml:
[tool.semantic_release]
version_variable = "pyproject.toml:version"
version_source = "tag"
Periksa versi berikutnya: semantic-release print-version |
|
Periksa versi saat ini: semantic-release print-version --current |
|
Buat versi baru, komit, dan buat tag (hanya di lokal): semantic-release version |
|
Publikasikan package Anda (termasuk memperbarui changelog, push to git, build dan upload dist ke rilis github): semantic-release publish |
Lint kode Python Anda
Anda dapat gunakan isort
,black
dan flake8
poetry run isort --check --diff .
poetry run black --check --diff .
poetry run flake8 .
Jika Anda memerlukan konfigurasi ekstra untuk flake8
seperti mengecualikan beberapa direktori atau file, Anda dapat mengonfigurasinya di file .flake8
.
[flake8]
exclude =
# No need to traverse our git directory
.git,
# There's no value in checking cache directories
__pycache__,
# The conf file is mostly autogenerated, ignore it
docs/source/conf.py,
# The old directory contains Flake8 2.0
old,
# This contains our built documentation
build,
# This contains builds of flake8 that we don't want to check
dist
.venv
Tindakan GitHub untuk CI Anda
Saya memisahkan ci-cd dari template cookiecutter karena menerbitkan rilis baru setiap kali PR baru digabungkan ke cabang utama.
Tindakan GitHub — CI
Alur kerja ini dieksekusi saat membuat/memperbarui PR dan mendorong komit baru ke cabang utama. Alur kerja ini meliputi test, lint, codecov, docs, dll.
name: dev
on:
pull_request:
push:
branches:
- main
jobs:
ci:
# Set up operating system
runs-on: ubuntu-latest
# Define job steps
steps:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.9"
- name: Check-out repository
uses: actions/checkout@v3
- name: Load cached Poetry installation
id: cached-poetry
uses: actions/cache@v3
with:
path: ~/.local # the path depends on the OS
key: poetry # increment to reset cache
- name: Install poetry
if: steps.cached-poetry.outputs.cache-hit != 'true'
uses: snok/install-poetry@v1
- name: Restore cached dependencies
uses: actions/cache@v3
with:
path: ~/.cache/pypoetry
key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }}
restore-keys: |
${{ runner.os }}-poetry-
- name: Install package
run: poetry install
- name: Lint
run: |
poetry run isort --check --diff .
poetry run black --check --diff .
poetry run flake8 .
- name: Test with pytest
run: poetry run pytest tests/ --cov=<package_name> --cov-report=xml
- name: Use Codecov to track coverage
uses: codecov/codecov-action@v3
with:
files: ./coverage.xml # coverage report
- name: Build documentation
run: poetry run make html --directory docs/
Silakan ganti nama package dengan nama Anda sendiri.
Tindakan GitHub — semantik-tarik-permintaan
Karena rilis semantik memutuskan tag versi berdasarkan komit di setiap rilis, lebih baik untuk memeriksa apakah judul permintaan tarikan cocok dengan pesan komit semantik (jika Anda menggunakan judul permintaan tarikan untuk setiap komit ke cabang utama.)
name: semantic-pull-request
on:
pull_request:
types:
- opened
- edited
- synchronize
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Tindakan GitHub — rilis
Terakhir, saya terlalu malas untuk membuat rilis baru secara manual di GitHub, jadi saya membuat alur kerja GitHub Actions dengan dispatch_workflow
jenis, yang mengeksekusi semantic-release publish
.
name: release
on:
workflow_dispatch:
jobs:
releaase:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.9"
- name: Check-out repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Load cached Poetry installation
id: cached-poetry
uses: actions/cache@v3
with:
path: ~/.local # the path depends on the OS
key: poetry # increment to reset cache
- name: Install poetry
if: steps.cached-poetry.outputs.cache-hit != 'true'
uses: snok/install-poetry@v1
- name: "Restore cached dependencies"
uses: actions/cache@v3
with:
path: ~/.cache/pypoetry
key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }}
restore-keys: |
${{ runner.os }}-poetry-
- name: Install package
run: poetry install
- name: Use Python Semantic Release to prepare release
env:
# This token is created automatically by GH Actions
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config user.name github-actions
git config user.email [email protected]
poetry run semantic-release publish
- name: Publish to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.TEST_PYPI_API_TOKEN }}
repository_url: https://test.pypi.org/legacy/
- name: Test install from TestPyPI
run: |
pip install \
--index-url https://test.pypi.org/simple/ \
--extra-index-url https://pypi.org/simple \
<package_name>
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
Ringkasan
Posting ini mencakup langkah-langkah dasar untuk membuat package Anda sendiri, publikasikan ke PyPi dengan saluran pipa CI/CD menggunakan Tindakan GitHub.
Untuk pekerjaan di masa mendatang, saya akan mencoba mencari aliran rilis yang lebih baik dan menulis tentang dokumentasi.
Artikel Terkait Lainnya :
- Belajar Kode Efisien Dan Mudah Dibaca Di Python
- 10 Pustaka Python untuk Pembelajaran Mesin yang Anda Butuhkan di Perangkat Andater
- Node.js Vs Python : Mana Yang Terbaik Untuk Pengembangan Backend Di Tahun 2023?
- Memecahkan Actorle dengan Python
- 10 Tips Memaksimalkan Produktivitas Anda Sebagai Developer Python