PadziļinÄts setup.py un pyproject.toml salÄ«dzinÄjums Python pakotÅu pÄrvaldÄ«bai, aptverot labÄko praksi, migrÄcijas stratÄÄ£ijas un mÅ«sdienÄ«gus rÄ«kus.
Python pakotÅu struktÅ«ra: Setup.py vs. Pyproject.toml - VisaptveroÅ”s ceļvedis
Gadiem ilgi setup.py
fails bija Python pakotÅu pÄrvaldÄ«bas stÅ«rakmens. TomÄr ainava ir attÄ«stÄ«jusies, un pyproject.toml
ir parÄdÄ«jies kÄ moderna alternatÄ«va. Å is visaptveroÅ”ais ceļvedis izpÄta atŔķirÄ«bas starp Ŕīm divÄm pieejÄm, palÄ«dzot jums saprast, kura ir piemÄrota jÅ«su projektam un kÄ efektÄ«vi pÄrvaldÄ«t savas Python pakotnes.
Pamatu izpratne
Kas ir Python pakotne?
Python pakotne ir veids, kÄ organizÄt un izplatÄ«t savu Python kodu. Tas ļauj grupÄt saistÄ«tus moduļus direktoriju hierarhijÄ, padarot jÅ«su kodu modulÄrÄku, atkÄrtoti izmantojamÄku un vieglÄk uzturamu. Pakotnes ir bÅ«tiskas, lai koplietotu savu kodu ar citiem un pÄrvaldÄ«tu atkarÄ«bas savos projektos.
Pakotnes metadatu loma
Pakotnes metadati sniedz bÅ«tisku informÄciju par jÅ«su pakotni, piemÄram, tÄs nosaukumu, versiju, autoru, atkarÄ«bas un ievades punktus. Å os metadatus izmanto pakotÅu pÄrvaldnieki, piemÄram, pip
, lai instalÄtu, jauninÄtu un pÄrvaldÄ«tu jÅ«su pakotnes. VÄsturiski setup.py
bija galvenais veids, kÄ definÄt Å”os metadatus.
Setup.py: TradicionÄlÄ pieeja
Kas ir Setup.py?
setup.py
ir Python skripts, kas izmanto setuptools
bibliotÄku, lai definÄtu jÅ«su pakotnes struktÅ«ru un metadatus. Tas ir dinamiski izpildÄ«ts fails, kas nozÄ«mÄ, ka tas palaiž Python kodu, lai konfigurÄtu pakotni.
Setup.py galvenÄs sastÄvdaļas
Tipisks setup.py
fails ietver Å”Ädas sastÄvdaļas:
- Pakotnes nosaukums: JÅ«su pakotnes nosaukums (piemÄram,
my_package
). - Versija: JÅ«su pakotnes versijas numurs (piemÄram,
1.0.0
). - Autora un uzturÄtÄja informÄcija: SÄ«kÄka informÄcija par pakotnes autoru un uzturÄtÄju.
- AtkarÄ«bas: Citu pakotÅu saraksts, no kurÄm ir atkarÄ«ga jÅ«su pakotne (piemÄram,
requests >= 2.20.0
). - Ievades punkti: DefinÄ«cijas komandrindas skriptiem vai citiem ievades punktiem jÅ«su pakotnÄ.
- Pakotnes dati: Fails, kas nav kods (piemÄram, konfigurÄcijas faili, datu faili), kas jÄiekļauj pakotnÄ.
Setup.py piemÄrs
```python from setuptools import setup, find_packages setup( name='my_package', version='1.0.0', author='John Doe', author_email='john.doe@example.com', description='A simple Python package', packages=find_packages(), install_requires=[ 'requests >= 2.20.0', ], entry_points={ 'console_scripts': [ 'my_script = my_package.module:main', ], }, classifiers=[ 'Programming Language :: Python :: 3', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', ], ) ```Setup.py plusi
- PazÄ«stamÄ«ba: TÄ ir tradicionÄla un labi zinÄma pieeja, tÄpÄc daudzi izstrÄdÄtÄji jau ir ar to pazÄ«stami.
- ElastÄ«ba: TÄ kÄ tas ir Python skripts, tas piedÄvÄ augstu elastÄ«bas pakÄpi. JÅ«s varat veikt sarežģītu loÄ£iku un pielÄgot bÅ«vÄÅ”anas procesu pÄc vajadzÄ«bas.
- PaplaÅ”inÄmÄ«ba: Setuptools nodroÅ”ina bagÄtÄ«gu funkciju kopumu, un to var paplaÅ”inÄt ar pielÄgotÄm komandÄm un paplaÅ”inÄjumiem.
Setup.py mīnusi
- Dinamiska izpilde:
setup.py
dinamiskÄ bÅ«tÄ«ba var bÅ«t droŔības risks, jo bÅ«vÄÅ”anas procesÄ tas izpilda patvaļīgu kodu. - NetieÅ”as atkarÄ«bas:
setup.py
bieži paļaujas uz netieÅ”Äm atkarÄ«bÄm, piemÄram, uz paÅ”u setuptools, kas var izraisÄ«t neatbilstÄ«bas un kļūdas. - SarežģītÄ«ba: Sarežģītiem projektiem
setup.py
var kļūt liels un grÅ«ti uzturams. - Ierobežota deklaratÄ«vÄ konfigurÄcija: Liela daļa pakotnes metadatu tiek definÄta imperatÄ«vi, nevis deklaratÄ«vi, padarot to grÅ«tÄk saprotamu.
Pyproject.toml: Mūsdienīga alternatīva
Kas ir Pyproject.toml?
pyproject.toml
ir konfigurÄcijas fails, kas izmanto TOML (Tom's Obvious, Minimal Language) formÄtu, lai definÄtu jÅ«su pakotnes bÅ«vÄÅ”anas sistÄmu un metadatus. TÄ ir deklaratÄ«va pieeja, kas nozÄ«mÄ, ka jÅ«s norÄdÄt, ko vÄlaties sasniegt, nevis to, kÄ to sasniegt.
Pyproject.toml galvenÄs sadaļas
Tipiskspyproject.toml
fails ietver Å”Ädas sadaļas:
[build-system]
: DefinÄ bÅ«vÄÅ”anas sistÄmu, kas jÄizmanto (piemÄram,setuptools
,poetry
,flit
).[project]
: Satur metadatus par projektu, piemÄram, tÄ nosaukumu, versiju, aprakstu, autorus un atkarÄ«bas.[tool.poetry]
vai[tool.flit]
: Sadaļas rÄ«ku specifiskÄm konfigurÄcijÄm (piemÄram, Poetry, Flit).
Pyproject.toml piemÄrs (ar Setuptools)
```toml [build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "my_package" version = "1.0.0" description = "A simple Python package" authors = [ { name = "John Doe", email = "john.doe@example.com" } ] dependencies = [ "requests >= 2.20.0", ] [project.scripts] my_script = "my_package.module:main" [project.optional-dependencies] dev = [ "pytest", "flake8", ] [project.classifiers] classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ] [project.urls] homepage = "https://example.com" repository = "https://github.com/example/my_package" ```Pyproject.toml piemÄrs (ar Poetry)
```toml [tool.poetry] name = "my_package" version = "1.0.0" description = "A simple Python package" authors = ["John DoePyproject.toml plusi
- DeklaratÄ«vÄ konfigurÄcija:
pyproject.toml
nodroÅ”ina deklaratÄ«vu veidu, kÄ definÄt jÅ«su pakotnes metadatus, padarot to vieglÄk saprotamu un uzturamu. - StandartizÄta bÅ«vÄÅ”anas sistÄma: TÄ norÄda bÅ«vÄÅ”anas sistÄmu, kas jÄizmanto, nodroÅ”inot konsekventu bÅ«vÄÅ”anu dažÄdÄs vidÄs.
- Uzlabota atkarÄ«bu pÄrvaldÄ«ba: RÄ«ki, piemÄram, Poetry un Pipenv, nemanÄmi integrÄjas ar
pyproject.toml
, lai nodroÅ”inÄtu stabilas atkarÄ«bu pÄrvaldÄ«bas funkcijas. - SamazinÄti droŔības riski: TÄ kÄ tas ir statisks konfigurÄcijas fails, tas novÄrÅ” droŔības riskus, kas saistÄ«ti ar dinamiski izpildÄmu kodu bÅ«vÄÅ”anas procesÄ.
- IntegrÄcija ar moderniem rÄ«kiem:
pyproject.toml
ir standarts moderniem Python iepakoÅ”anas rÄ«kiem, piemÄram, Poetry, Pipenv un Flit.
Pyproject.toml mīnusi
- MÄcīŔanÄs lÄ«kne: IzstrÄdÄtÄjiem, iespÄjams, bÅ«s jÄapgÅ«st jauna sintakse (TOML) un jauns veids, kÄ domÄt par pakotÅu pÄrvaldÄ«bu.
- Ierobežota elastÄ«ba: Tas var nebÅ«t piemÄrots ļoti pielÄgotiem bÅ«vÄÅ”anas procesiem, kuriem nepiecieÅ”ama sarežģīta loÄ£ika.
- AtkarÄ«ba no rÄ«kiem: Jums bÅ«s jÄizvÄlas un jÄiemÄcÄs lietot konkrÄtu bÅ«vÄÅ”anas sistÄmu (piemÄram, Setuptools, Poetry, Flit).
Setup.py un Pyproject.toml salÄ«dzinÄjums
Å eit ir tabula, kurÄ apkopotas galvenÄs atŔķirÄ«bas starp setup.py
un pyproject.toml
:
Funkcija | Setup.py | Pyproject.toml |
---|---|---|
KonfigurÄcijas stils | ImperatÄ«vs (Python kods) | DeklaratÄ«vs (TOML) |
BÅ«vÄÅ”anas sistÄma | NetieÅ”a (Setuptools) | EksplicÄ«ta (norÄdÄ«ta [build-system] ) |
DroŔība | PotenciÄli mazÄk droÅ”a (dinamiska izpilde) | DroÅ”Äka (statiskÄ konfigurÄcija) |
AtkarÄ«bu pÄrvaldÄ«ba | Pamata (install_requires ) |
Papildu (integrÄcija ar Poetry, Pipenv) |
RÄ«ki | TradicionÄli (Setuptools) | MÅ«sdienÄ«gi (Poetry, Pipenv, Flit) |
ElastÄ«ba | Augsta | VidÄja |
SarežģītÄ«ba | Var bÅ«t augsta sarežģītiem projektiem | Parasti zemÄka |
MigrÄcijas stratÄÄ£ijas: No Setup.py uz Pyproject.toml
MigrÄcija no setup.py
uz pyproject.toml
var Ŕķist biedÄjoÅ”a, taÄu tas ir vÄrtÄ«gs ieguldÄ«jums ilgtermiÅa uzturÄÅ”anai un konsekvencei. Å eit ir dažas stratÄÄ£ijas, kuras varat izmantot:
1. SÄciet ar minimÄlu Pyproject.toml
Izveidojiet pamata pyproject.toml
failu, kas norÄda bÅ«vÄÅ”anas sistÄmu, un pÄc tam pakÄpeniski migrÄjiet metadatus no setup.py
uz pyproject.toml
.
2. Izmantojiet Setuptools ar Pyproject.toml
Turpiniet izmantot Setuptools kÄ bÅ«vÄÅ”anas sistÄmu, bet definÄjiet projekta metadatus pyproject.toml
. Tas ļauj izmantot pyproject.toml
priekŔrocības, vienlaikus izmantojot pazīstamu rīku.
3. MigrÄjiet uz modernu rÄ«ku, piemÄram, Poetry
Apsveriet iespÄju migrÄt uz modernu rÄ«ku, piemÄram, Poetry vai Pipenv. Å ie rÄ«ki nodroÅ”ina visaptveroÅ”as atkarÄ«bu pÄrvaldÄ«bas funkcijas un nemanÄmi integrÄjas ar pyproject.toml
.
PiemÄrs: migrÄcija uz Poetry
- InstalÄjiet Poetry:
pip install poetry
- InicializÄjiet Poetry savÄ projektÄ:
poetry init
(Tas palÄ«dzÄs jums izveidotpyproject.toml
failu) - Pievienojiet savas atkarības:
poetry add requests
(vai citas atkarības) - Izveidojiet savu pakotni:
poetry build
4. Izmantojiet rÄ«kus automatizÄtai migrÄcijai
Daži rÄ«ki var palÄ«dzÄt automatizÄt migrÄcijas procesu. PiemÄram, varat izmantot rÄ«kus, lai konvertÄtu savu setup.py
failu par pyproject.toml
failu.
LabÄkÄ prakse Python pakotÅu pÄrvaldÄ«bai
1. Izmantojiet virtuÄlo vidi
VienmÄr izmantojiet virtuÄlo vidi, lai izolÄtu sava projekta atkarÄ«bas no sistÄmas mÄroga Python instalÄcijas. Tas novÄrÅ” konfliktus un nodroÅ”ina, ka jÅ«su projektam ir pareizas atkarÄ«bas.
PiemÄrs, izmantojot venv
:
PiemÄrs, izmantojot conda
:
2. PrecÄ«zi norÄdiet atkarÄ«bas
Izmantojiet versiju ierobežojumus, lai norÄdÄ«tu savu atkarÄ«bu saderÄ«gÄs versijas. Tas novÄrÅ” neparedzÄtu uzvedÄ«bu, ko izraisa nesaderÄ«gi bibliotÄku atjauninÄjumi. Izmantojiet tÄdus rÄ«kus kÄ pip-tools
, lai pÄrvaldÄ«tu savas atkarÄ«bas.
AtkarÄ«bas specifikÄcijas piemÄrs:
``` requests >= 2.20.0, < 3.0.0 ```3. Izmantojiet konsekventu bÅ«vÄÅ”anas sistÄmu
IzvÄlieties bÅ«vÄÅ”anas sistÄmu (piemÄram, Setuptools, Poetry, Flit) un pieturieties pie tÄs. Tas nodroÅ”ina konsekventu bÅ«vÄÅ”anu dažÄdÄs vidÄs un vienkÄrÅ”o iepakoÅ”anas procesu.
4. DokumentÄjiet savu pakotni
Rakstiet skaidru un kodolÄ«gu dokumentÄciju savai pakotnei. Tas palÄ«dz lietotÄjiem saprast, kÄ izmantot jÅ«su pakotni, un atvieglo citiem ieguldÄ«jumu jÅ«su projektÄ. Izmantojiet tÄdus rÄ«kus kÄ Sphinx, lai Ä£enerÄtu dokumentÄciju no sava koda.
5. Izmantojiet nepÄrtrauktu integrÄciju (CI)
Iestatiet CI sistÄmu (piemÄram, GitHub Actions, Travis CI, GitLab CI), lai automÄtiski bÅ«vÄtu, testÄtu un izvietotu savu pakotni, kad vien tiek veiktas izmaiÅas jÅ«su kodÄ. Tas palÄ«dz nodroÅ”inÄt, ka jÅ«su pakotne vienmÄr ir darba kÄrtÄ«bÄ.
GitHub Actions konfigurÄcijas piemÄrs:
```yaml name: Python Package on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python 3.9 uses: actions/setup-python@v4 with: python-version: 3.9 - name: Install dependencies run: | python -m pip install --upgrade pip pip install poetry poetry install - name: Lint with flake8 run: | poetry run flake8 . - name: Test with pytest run: | poetry run pytest ```6. PublicÄjiet savu pakotni PyPI
KopÄ«gojiet savu pakotni ar pasauli, publicÄjot to Python pakotÅu indeksÄ (PyPI). Tas atvieglo citiem jÅ«su pakotnes instalÄÅ”anu un lietoÅ”anu.
DarbÄ«bas, lai publicÄtu PyPI:
- ReÄ£istrÄjiet kontu PyPI un TestPyPI.
- InstalÄjiet
twine
:pip install twine
. - Izveidojiet savu pakotni:
poetry build
vaipython setup.py sdist bdist_wheel
. - AugÅ”upielÄdÄjiet savu pakotni TestPyPI:
twine upload --repository testpypi dist/*
. - AugÅ”upielÄdÄjiet savu pakotni PyPI:
twine upload dist/*
.
ReÄlÄs pasaules piemÄri
ApskatÄ«sim, kÄ daži populÄri Python projekti izmanto pyproject.toml
:
- Poetry: Izmanto
pyproject.toml
savai pakotÅu pÄrvaldÄ«bai. - Black: Bezkompromisa koda formatÄtÄjs arÄ« izmanto
pyproject.toml
. - FastAPI: MÅ«sdienÄ«gs, Ätrs (augstas veiktspÄjas) tÄ«mekļa ietvars API izveidei ar Python arÄ« to izmanto.
SecinÄjums
pyproject.toml
ir mÅ«sdienÄ«gs Python pakotÅu pÄrvaldÄ«bas standarts, kas piedÄvÄ deklaratÄ«vu un droÅ”u veidu, kÄ definÄt jÅ«su pakotnes metadatus un pÄrvaldÄ«t atkarÄ«bas. Lai gan setup.py
mums ir labi kalpojis, migrÄcija uz pyproject.toml
ir vÄrtÄ«gs ieguldÄ«jums ilgtermiÅa uzturÄÅ”anai, konsekvencei un integrÄcijai ar moderniem rÄ«kiem. IevÄrojot labÄko praksi un izmantojot pareizos rÄ«kus, jÅ«s varat racionalizÄt savu Python iepakoÅ”anas darbplÅ«smu un izveidot augstas kvalitÄtes, atkÄrtoti izmantojamas pakotnes.