Het ecosysteem van Python heeft traditioneel vertrouwd op tools zoals pip
en virtualenv
voor het beheren van afhankelijkheden en projectomgevingen. Hoewel deze tools ons goed hebben gediend, leiden ze vaak tot afhankelijkheidsconflicten, handmatig beheer van omgevingen en inconsistente projectconfiguraties tussen teams.
Python Poetry lost deze uitdagingen op door een modern, geünificeerd afhankelijkheids- en omgevingsbeheertool te bieden. Het behandelt alles van virtuele omgevingen tot pakketpublicatie, terwijl het reproduceerbare builds garandeert via intelligente afhankelijkheidsresolutie.
Deze gids laat zien hoe je Poetry kunt gebruiken om je Python-ontwikkelingsworkflow te stroomlijnen en veelvoorkomende afhankelijkheidsproblemen te vermijden.
Python Poetry vs. PIP
Poetry en pip hebben verschillende doeleinden in het Python-ecosysteem. Terwijl pip
primair een pakketinstaller is, is Poetry een volledige tool voor afhankelijkheids- en projectbeheer. Hier zijn de belangrijkste verschillen:
1. Afhankelijkheidsresolutie
- Pip: Eenvoudige, lineaire afhankelijkheidsresolutie die tot conflicten kan leiden
- Poëzie: Geavanceerde afhankelijkheidsresolver die conflicten voorkomt vóór installatie
2. Beheer van virtuele omgevingen
- Pip: Vereist aparte tools (virtualenv, venv) en handmatige activering
- Poëzie: Maakt automatisch virtuele omgevingen per project aan en beheert deze
3. Projectconfiguratie
- Pip: Gebruikt requirements.txt voor afhankelijkheden, setup.py voor projectmetadata
- Poëzie: Enkel pyproject.toml-bestand voor alle configuratiebehoeften
4. Lock-bestanden
- Pip: Geen ingebouwde ondersteuning voor lock-bestanden
- Poëzie: Genereert poetry.lock voor reproduceerbare builds over verschillende omgevingen
5. Pakketpublicatie
- Pip: Vereist aanvullende tools (twine, setuptools) voor publicatie
- Poëzie: Ingebouwde commando’s voor het bouwen en publiceren van pakketten
Wanneer Poetry boven pip gebruiken
Kies Poetry wanneer:
- Werken aan teamprojecten die reproduceerbare omgevingen vereisen
- Het bouwen van pakketten die worden gepubliceerd op PyPI
- Het beheren van complexe afhankelijkheidsstructuren met mogelijke conflicten
- Geautomatiseerd beheer van virtuele omgevingen nodig hebben
- Een enkele tool voor de hele ontwikkelingsworkflow willen
Blijf bij pip wanneer:
- Werken aan eenvoudige scripts met minimale afhankelijkheden
- Het leren van Python voor de eerste keer
- Moet snel een enkel pakket installeren
- Werken in omgevingen waar Poetry installatie niet mogelijk is
- Het onderhouden van legacy projecten die al zijn opgezet met pip
De algemene vuistregel is: gebruik Poetry voor elk project dat gedeeld, geïmplementeerd of op lange termijn onderhouden zal worden. Gebruik pip voor snelle experimenten of leeractiviteiten.
Met dat gezegd te hebben, laten we meteen aan de slag gaan met Poetry.
Python Poetry instellen
Je zult voornamelijk met Poetry interacteren als een command-line (CLI) tool, dus het is logisch om het systeembreed op je machine te installeren. Deze sectie behandelt deze cruciale eerste stap en hoe je enkele standaardconfiguraties voor Poetry kunt instellen op basis van je behoeften.
Poetry installeren
Je kunt Poetry installeren met behulp van een officieel installatiescript, dat kan worden gedownload en uitgevoerd met één enkel commando.
Voor macOS, Linux en WSL2:
$ curl -sSL https://install.python-poetry.org | sudo python3 -
Voor Windows Powershell (uitvoeren met beheerdersrechten):
$ (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
Als je Windows gebruikt en Python hebt geïnstalleerd via de Microsoft Store (om een of andere rare reden), vervang dan py
door python
in het bovenstaande commando.
Na voltooiing van het installatiescript, wordt er een bericht afgedrukt waarin wordt gevraagd om Poetry toe te voegen aan je PATH zodat het poetry
commando overal beschikbaar is.
Voor macOS, Linux en WSL2, voeg de volgende regel toe aan je shellscript zoals .bashrc
of .zshrc
:
$ export PATH="/Users/bexgboost/.local/bin:$PATH"
Voor Windows kun je de uitvoerinstructies volgen.
Verifieer vervolgens je installatie door poetry --version
uit te voeren.
Configuratie van Poetry
De meeste configuratie van Poetry gaat over hoe virtuele omgevingen worden gemaakt en hoe pakketten worden geïnstalleerd. Je kunt een (bijna) volledige lijst van Poetry-configuraties afdrukken met:
$ poetry config --list
De output zal er ongeveer zo uitzien:
cache-dir = "/Users/bexgboost/Library/Caches/pypoetry" experimental.system-git-client = false installer.max-workers = null installer.modern-installation = true installer.no-binary = null installer.parallel = true keyring.enabled = true solver.lazy-wheel = true virtualenvs.create = true virtualenvs.in-project = null virtualenvs.options.always-copy = false virtualenvs.options.no-pip = false virtualenvs.options.no-setuptools = false virtualenvs.options.system-site-packages = false virtualenvs.path = "{cache-dir}/virtualenvs" # /Gebruikers/bexgboost/Bibliotheek/Caches/pypoetry/virtualenvs virtualenvs.prefer-active-python = false virtualenvs.prompt = "{project_name}-py{python_version}" warnings.export = true
In de eerste regel zien we een pad naar de Poetry-cache. Het wordt voornamelijk gebruikt om gedownloade pakketdistributies en virtuele omgevingen op te slaan. Alle virtuele omgevingen die je maakt, worden hier standaard opgeslagen. Als je dat wilt veranderen, kun je het volgende commando uitvoeren:
$ poetry config virtualenvs.path path/to/new/virtualenv/dir
Een andere belangrijke configuratie is het aantal cores dat wordt gebruikt tijdens installaties. Standaard is dit ingesteld op vier, maar we kunnen het sneller maken door alle CPU-cores te gebruiken. Zoek eerst het aantal cores van jouw machine op door os.cpu_count()
uit te voeren in de Python Interpreter. Stel vervolgens de output in:
$ poetry config installer.max-workers = 10
Een optionele configuratie is of u virtuele omgevingen wilt maken in uw werkmap of de cache. Dit wordt aangestuurd via virtualenvs.in-project
optie
. Als u deze instelt op True, wordt de .venv
map altijd aangemaakt in uw werkmap:
$ poetry config virtualenvs.in-project true
Een nieuw project maken met Poetry
Laten we ingaan op de belangrijkste stappen om een nieuw Poetry-project te maken en het kernconfiguratiebestand te begrijpen.
Initialiseren van een nieuw Poetry-project
Het gebruik van Poetry begint meestal met het maken van een nieuw project met het poetry new
commando:
$ poetry new explore-poetry $ cd explore-poetry
Het commando maakt een explore-poetry
map vooraf ingevuld met de volgende bestanden en mappen:
explore-poetry ├── pyproject.toml ├── README.md ├── explore-poetry │ └── __init__.py └── tests └── __init__.py
Deze mappenstructuur volgt de beste praktijken voor Python:
pyproject.toml
: Het hoofdconfiguratiebestand dat projectmetadata en afhankelijkheden definieertREADME.md
: Documentatiebestand dat het project uitlegtexplore-poetry/
: Map met broncode die de hoofdpackagecode bevat, met__init__.py
om er een package van te makentests/
: Map voor testbestanden, met__init__.py
om er een pakket van te maken (importeerbaar)
Begrip van pyproject.toml
Hier is de pyproject.toml
bestand vereist speciale aandacht omdat het het enige niet-lege bestand is dat door Poetry wordt gegenereerd:
[tool.poetry] name = "explore-poetry" version = "0.1.0" description = "" authors = ["BexTuychiev <[email protected]>"] readme = "README.md" [tool.poetry.dependencies] python = "^3.8" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"
Deze file orchestreert je project en de bijbehorende afhankelijkheden. Het maakt gebruik van Tom’s Obvious, Minimal Language, dat is overeengekomen als de standaard configuratietaal voor Python packages in PEP 518.
Alle pyproject.toml
-bestanden zijn onderverdeeld in secties die tabellen worden genoemd en worden aangeduid met haken zoals tool.poetry
of build-system
. Poetry gebruikt deze tabellen om afhankelijkheden te beheren, project build-vereisten te definiëren of andere taken uit te voeren.
Terwijl je de Poetry-opdrachten uitvoert die worden beschreven in de komende secties, wordt het pyproject.toml
bestand automatisch bijgewerkt.
Werken met virtuele omgevingen in Poetry
In deze sectie kom je alles te weten over het beheren van virtuele omgevingen in Poetry zodra je deze hebt ingesteld. Je leert waarom virtuele omgevingen belangrijk zijn, hoe Poetry ze automatisch afhandelt en basisopdrachten om ze te manipuleren, zoals het maken, activeren en overschakelen. Je leert ook hoe je Python-versies beheert met Poetry.
Het maken en activeren van een virtuele omgeving
Wanneer je Poetry voor het eerst installeert, worden er geen ingebouwde omgevingen meegeleverd, zoals blijkt uit een lege uitvoer wanneer je poetry env list
uitvoert:
$ poetry env list # geen uitvoer
Maar zodra je afhankelijkheden begint toe te voegen (meer hierover later) met poëzie add pakket-naam
, wordt automatisch een omgeving aangemaakt in de cache-directory voor het project. Laten we bijvoorbeeld verzoeken
als afhankelijkheid toevoegen:
$ poetry add requests
Je zou een uitvoer moeten ontvangen die vergelijkbaar is met het volgende:
Creating virtualenv explore-poetry--I9GJYUn-py3.8 in /Users/bexgboost/Library/Caches/pypoetry/virtualenvs Using version ^2.32.3 for requests Updating dependencies Resolving dependencies... (2.5s) Package operations: 5 installs, 0 updates, 0 removals - Installing certifi (2024.8.30) - Installing charset-normalizer (3.4.0) - Installing idna (3.10) - Installing urllib3 (2.2.3) - Installing requests (2.32.3) Writing lock file
De eerste regel geeft aan dat Poetry de omgeving heeft gecreëerd in de cache. De volgende regels informeren dat de afhankelijkheden voor requests
succesvol zijn opgelost, en er wordt een vergrendelingsbestand gegenereerd (later meer daarover).
Let op de omgevingsnaam: explore-poetry--I9GJYUn-py3.8
. De naam bevat de projectmapnaam, gevolgd door een unieke ID en vervolgens de Python-versie die door de omgeving wordt gebruikt.
De volgende keer dat je een afhankelijkheid toevoegt, gebruikt Poetry automatisch deze omgeving om pakketten te installeren:
$ poetry add beautifulsoup4 Using version ^4.12.3 for beautifulsoup4 Updating dependencies Resolving dependencies... (1.1s) Package operations: 2 installs, 0 updates, 0 removals - Installing soupsieve (2.6) - Installing beautifulsoup4 (4.12.3) Writing lock file
Wanneer je Poetry gebruikt, wordt in je terminal niet weergegeven welke Poetry virtuele omgeving actief is. Om deze informatie te zien, moet je het volgende uitvoeren: poetry env list
:
$ poetry env list explore-poetry--I9GJYUn-py3.8 (Activated)
Om met de actieve Poetry-omgeving te werken, kun je het volgende uitvoeren: poetry shell
:
$ poetry shell
De opdracht opent een nieuwe shell-sessie binnen de huidige en je kunt commando’s uitvoeren zoals python
of pytest
.
Bijvoorbeeld, om Python-scripts uit te voeren:
$ poetry shell $ python script.py
Voor het uitvoeren van ontwikkelingsframeworks zoals Streamlit:
# Binnen de shell $ streamlit run app.py
Daarna kunt u de shell verlaten door te bellen naar exit
.
Als alternatief kunt u opdrachten uitvoeren in de Poetry-shell zonder deze in te voeren met poetry run
:
$ poetry run python script.py $ poetry run streamlit run app.py
Configuratie van de Python-versie
Wanneer je poetry add
of poetry install
uitvoert, gebruikt Poetry automatisch de Python-versie die is gespecificeerd in je pyproject.toml
-bestand. Om een andere Python-versie te specificeren, kun je het env use
-commando uitvoeren:
$ poetry env use python3.11
Merk op dat Python 3.11 systeembreed geïnstalleerd moet zijn op uw machine voor de opdracht om te werken.
Controleer of Poetry de omgeving met de nieuwe Python-versie gebruikt:
$ poetry env list explore-poetry--I9GJYUn-py3.11 (Activated) explore-poetry--I9GJYUn-py3.8
Merk op hoe de nieuwe omgeving automatisch aan ons project is gekoppeld (de ID’s zijn hetzelfde). Zodra u uw Python-versie configureert, kunt u omgevingen met andere versies verwijderen om schijfruimte vrij te maken:
$ poetry env remove python3.8
Als u een omgeving verwijdert, hoeft u alleen de Python-versie op te geven. U kunt ook alle omgevingen verwijderen en opnieuw beginnen:
$ poetry env remove --all
Let op dat de --all
-tag verwijdert alle omgevingen die zijn gekoppeld aan het huidige project, niet de omgevingen van andere projecten.
Als je aan teamprojecten werkt, is het vaak beter om de virtuele omgeving in de projectmap te houden:
$ poetry config virtualenvs.in-project true
Deze opdracht heeft geen effect als je al een omgeving voor het project in de cache hebt. Verwijder eerst alle bestaande omgevingen uit de cache om een lokale omgeving te maken.
Dit maakt een .venv
map aan in uw werkmap, die u aan uw .gitignore bestand moet toevoegen.
Beheer van afhankelijkheden met Poetry
Afhankelijkheidsbeheer is waar Poetry uitblinkt. Het biedt uitgebreide functies om afhankelijkheden te specificeren, installeren en beheren, zodat u nooit in helse afhankelijkheidsconflicten terechtkomt.
In dit gedeelte leer je over het toevoegen en installeren van afhankelijkheden, het maken van afhankelijkheidsgroepen, de syntaxis voor het specificeren van afhankelijkheden in pyproject.toml
en lock-bestanden.
Het toevoegen van afhankelijkheden in Poetry
Bij het gebruik van Poetry, zal je de poetry add pakket-naam
opdracht gebruiken om pakketten van PyPI te installeren in plaats van pip install
. Dit heeft een paar voordelen:
- Voegt automatisch het pakket toe aan
pyproject.toml
met de juiste versiebeperking - Werkt het vergrendelingsbestand bij om reproduceerbare builds te garanderen
- Lost afhankelijkheden op om conflicten te voorkomen
- Installeert het pakket en al zijn afhankelijkheden in de virtuele omgeving
Latere, laten we bijvoorbeeld eerst Numpy als een afhankelijkheid toevoegen:
$ poetry add numpy
Onmiddellijk zou je een conflict in het oplossen van afhankelijkheden moeten krijgen dat zegt dat de Numpy-versie die wordt geïnstalleerd niet compatibel is met je Python-versie. De reden hiervoor is dat toen we overschakelden naar de Python 3.11-omgeving, we het pyproject.toml
bestand niet hebben bijgewerkt. Op dit moment ziet het er zo uit:
[tool.poetry.dependencies] python = "^3.8" requests = "^2.32.3" beautifulsoup4 = "^4.12.3"
Het dakje-symbool ^ wordt gebruikt om aan te geven dat ons explore-poetry
project compatibel is met elke Python-versie tot Python 4, maar de versiebereik van Numpy ondersteunt alleen Python-versies tussen 3.8 en 3.12, wat een nauwere bereik is. De conflictfout komt voort uit dat feit.
Dus, om de fout op te lossen, moet je het Python-versiebereik bijwerken naar het volgende:
python = ">=3.8, <3.12"
Zodra je deze wijziging hebt doorgevoerd, poetry add numpy
commando zou zoals verwacht moeten werken.
Je hebt zojuist een van de beste functies van Poetry waargenomen — het opsporen van versieconflicten voordat er pakketten worden geïnstalleerd in plaats van je achteraf te informeren over versie-incompatibiliteiten, zoals bij pip.
De syntaxis voor het specificeren van afhankelijkheidsversies
Poëzie gebruikt een krachtige syntaxis om een breed scala aan versies te specificeren voor de beste synchronisatie tussen afhankelijkheden. Hier zijn de symbolen die het meest worden gebruikt:
- Caret (^): Staat patch- en minor-updates toe maar geen major updates. Voorbeeld:
^1.2.3
staat updates toe van 1.2.3 tot 1.9.9 maar niet van 2.0.0. - Tilde (~): Staat alleen patch-updates toe. Voorbeeld:
~1.2.3
staat updates toe van 1.2.3 tot 1.2.9 maar niet van 1.3.0. - Exacte versie: Specificeert het exacte versienummer. Voorbeeld:
1.2.3
staat alleen versie 1.2.3 toe - Groter dan (>): Staat elke versie boven de gespecificeerde toe. Voorbeeld:
>1.2.3
staat 1.2.4, 1.3.0, 2.0.0, enz. toe - Minder dan (<): Staat elke versie onder de gespecificeerde toe. Voorbeeld:
<2.0.0
staat alles onder 2.0.0 toe. - Groter dan of gelijk aan (>=): Staat de gespecificeerde versie en hoger toe. Voorbeeld:
>=1.2.3
staat 1.2.3 en elke hogere versie toe. - Kleiner dan of gelijk aan (<=): staat de gespecificeerde versie en lager toe. Voorbeeld:
<=2.0.0
staat 2.0.0 en elke lagere versie toe. - Versiebereik: combineert beperkingen met komma’s. Voorbeeld:
>=1.2.3,<2.0.0
staat versies toe van 1.2.3 tot 1.9.9 - Wildcard (*): Matches any version. Example:
1.2.*
komt overeen met elke versie die begint met 1.2
Natuurlijk kun je deze naar wens combineren.
Dependancy-groepen maken in Poetry
In complexe projecten met veel bewegende onderdelen, heb je vaak te maken met verschillende categorieën van afhankelijkheden.
Bijvoorbeeld, in een machine learning project maak je vaak verschillende pijplijnen en onderdelen voor gegevensinvoer, gegevensreiniging, feature engineering, modeltraining, implementatie en monitoring. Daarnaast moet je ook documentatie voltooien en tests uitvoeren. al deze stappen hebben hun ecosysteem van tools, en het mengen van hun afhankelijkheden vergroot je uiteindelijke distributiepakket.
Met Poetry kun je afhankelijkheidsgroepen met willekeurige namen maken, zodat je ze alleen kunt installeren wanneer dat nodig is. Of het beste gedeelte – gebruikers van jouw pakket kunnen er ook voor kiezen om alleen de benodigde onderdelen te installeren.
$ poetry add --group ui streamlit plotly dash $ poetry add --group dev black flake8 isort mypy pylint
De bovenstaande opdrachten maken twee afhankelijkheidsgroepen aan, ui
en dev
(indien ze nog niet bestaan), en twee subtabellen in pyproject.toml
:
[tool.poetry.dependencies] python = "^3.11" requests = "^2.32.3" beautifulsoup4 = "^4.12.3" numpy = "^2.1.3" [tool.poetry.group.ui.dependencies] streamlit = "^1.39.0" plotly = "^5.24.1" dash = "^2.18.2" [tool.poetry.group.dev.dependencies] black = "^24.10.0" flake8 = "^7.1.1" isort = "^5.13.2" mypy = "^1.13.0" pylint = "^3.3.1"
Zelfs als afhankelijkheidsgroepen gescheiden zijn, worden ze nog steeds tegen elkaar opgelost. Met andere woorden, als er een dev
-afhankelijkheid in conflict is met een pakket in ui
, zal Poetry de installatie niet uitvoeren.
In sommige gevallen kunt u optionele afhankelijkheidsgroepen maken of bestaande groepen optioneel maken, zodat ze niet standaard worden geïnstalleerd wanneer een gebruiker uw projectomgeving opnieuw maakt. Om dit te doen, moet u een nieuwe sub-tabel maken in het pyproject.toml
bestand. Bijvoorbeeld, we maken de ui
groep hieronder optioneel:
[tool.poetry.group.ui] optional = true [tool.poetry.group.ui.dependencies] streamlit = "^1.39.0" plotly = "^5.24.1" dash = "^2.18.2"
Het wordt gedaan door de optionele
parameter in te stellen op true
voordat de afhankelijkheden van de groep worden gedeclareerd.
Het reproduceren van een Poetry-project met het poetry.lock-bestand
Als iemand je GitHub-repository met een Poetry-project cloneert, kunnen ze een perfecte kopie van de virtuele omgeving voor je project maken door één commando uit te voeren: poetry install
.
De install opdracht maakt gebruik van het meer uitgebreide poetry.lock
bestand. In tegenstelling tot pyproject.toml
, bevat het lock-bestand:
- De exacte versies van de belangrijkste afhankelijkheden vermeld in pyproject.toml
- De exacte versies van de afhankelijkheden van de belangrijkste afhankelijkheden (transitieve afhankelijkheden)
Bijvoorbeeld, requests
is afhankelijk van urllib3, certifi, charset-normalizer
en idna
. Zonder een vergrendelingsbestand kunnen deze subafhankelijkheden op verschillende versies op verschillende machines worden opgelost.
Het vergrendelingsbestand zorgt ervoor dat iedereen in je team dezelfde afhankelijkheidsversies krijgt, waardoor het probleem van “het werkt op mijn machine” wordt voorkomen.
Het verschil tussen poetry add en poetry install
We zullen het verschil uitleggen tussen add
en install
commando’s van Poetry met een gebruiksscenario.
Stel dat je werkt aan een project voor fraude detectie. Je voegt je initiële afhankelijkheden toe:
$ poetry add pandas scikit-learn
Dit voegt de pakketten toe aan het slot en pyproject.toml
bestanden. Vervolgens kloont uw collega de repo:
$ git clone fraud-detection-repo-link $ cd fraud-detection $ poetry install
Zij voeren het installeren
commando uit om alles te installeren wat vermeld staat in het slotbestand.
Vervolgens moet u later een nieuw pakket toevoegen:
$ poetry add xgboost
Je collega haalt de wijzigingen binnen:
$ git pull $ poetry install
Zij voeren het install
commando uit om het nieuwe pakket te installeren. Dus,
- Gebruik
poetry
add wanneer je nieuwe afhankelijkheden toevoegt - Gebruik
poetry install
wanneer je een bestaand project moet instellen - Commit altijd
pyproject.toml
enpoetry.lock
naar versiebeheer
Dependencygroepen installeren met het poetry install-commando
Eerder hebben we geleerd hoe we afhankelijkheden kunnen groeperen in Poetry. Wanneer je poetry install
uitvoert, installeert het standaard alle niet-optionele groepen, wat niet altijd is wat je wilt.
Bijvoorbeeld, je wilt misschien een repository alleen klonen om aan de documentatie te werken. Of je wilt werken aan de hoofdcode van de repository, behalve aan de documentatie en testonderdelen. Het install
commando is flexibel genoeg om al deze gevallen te dekken:
Uitsluiting van bepaalde groepen:
$ poetry install --without ui,dev
Optionele groepen installeren:
# Het installeren van de optionele documentatiegroep $ poetry install --with docs
Alleen specifieke groepen installeren:
$ poetry install --only ui
Alleen de runtime-afhankelijkheden van het project installeren (de afhankelijkheden die buiten groepen worden vermeld, toegevoegd met gewone poetry add package
commando’s):
$ poetry install --only main
Verwijderen van afhankelijkheden in Poetry
Het verwijderen van een afhankelijkheid is eenvoudig met behulp van het verwijderen
commando:
$ poetry remove requests
Dit verwijdert verzoeken
uit de belangrijkste projectafhankelijkheden. Om een pakket uit een groepsafhankelijkheid te verwijderen, kunt u opnieuw de --groep
tag gebruiken:
$ poetry remove streamlit --group ui
De remove
opdracht verwijdert het pakket schoon, samen met de transitieve afhankelijkheden.
Het publiceren van een Project met Poetry naar PyPI
Als je project klaar is voor distributie, kun je het publiceren naar PyPI (Python Package Index) zodat andere ontwikkelaars je code gemakkelijk kunnen installeren en gebruiken via pip
. Poetry maakt dit proces een fluitje van een cent met slechts twee commando’s:
$ poetry build # Bouw distributies $ poetry publish # Publiceer naar PyPI
Voordat je deze commando’s uitvoert, moet je je PyPI referenties correct instellen. Maak eerst je accounts aan op:
Configureer Poetry met je referenties:
$ poetry config pypi-token.pypi your-pypi-token $ poetry config pypi-token.testpypi your-test-pypi-token
Test nu eerst je pakket:
# Configureer TestPyPI repository $ poetry config repositories.testpypi https://test.pypi.org/legacy/ # Publiceer naar TestPyPI $ poetry build $ poetry publish -r testpypi
Na publicatie op TestPyPI, kunt u proberen uw pakket te installeren om te controleren of alles goed werkt:
$ pip install --index-url https://test.pypi.org/simple/ your-package-name
Als alles goed is, kunt u publiceren naar PyPI zelf:
$ poetry publish
Beste praktijken bij het werken met Poetry
Er zijn veel valkuilen en beste praktijken bij het gebruik van Poetry, en natuurlijk kunnen we ze niet allemaal noemen in één artikel. Maar hier zijn enkele veelvoorkomende die u meteen kunt toepassen:
- Gebruik altijd virtuele omgevingen – Poetry maakt ze automatisch aan voor elk project
- Houd je
pyproject.toml
-bestand onder versiebeheer, maar sluitpoetry.lock
uit voor bibliotheken - Neem
poetry.lock
op in versiebeheer voor applicaties om reproduceerbare builds te garanderen - Gebruik semantische versienummering voor je pakketversies (hoofd.minor.patch). Je kunt
poetry version patch/minor/major
-opdrachten gebruiken om de pakketversies met één te verhogen. Bijvoorbeeld,poetry version major
verandert 0.2.0 naar 1.0.0 in jepyproject.toml
-bestand. - Specificeer afhankelijkheidsversiebeperkingen zorgvuldig om conflicten te voorkomen
- Update regelmatig afhankelijkheden met
poetry update
maar test grondig na updates - Gebruik
poetry add --group dev
voor ontwikkelingsafhankelijkheden om ze gescheiden te houden - Documenteer alle doeleinden van afhankelijkheden in pyproject.toml met behulp van opmerkingen
- Voer
poetry check
uit vóór commits om de pyproject.toml-syntax te valideren. Je kunt ook pre-commit hooks overwegen. - Gebruik
poetry export
omrequirements.txt
te genereren wanneer dit nodig is voor andere tools. - Houd productieafhankelijkheden minimaal – verplaats optionele functies naar extra’s
- Test de installatie van uw pakket in een schone omgeving voordat u publiceert
- Gebruik TestPyPI voordat je publiceert naar de hoofd PyPI repository
- Onderhoud een duidelijke
CHANGELOG.md
om versie wijzigingen bij te houden - Gebruik
poetry run
voor het uitvoeren van scripts om correct gebruik van de omgeving te waarborgen
Conclusie en Volgende Stappen
Poëzie heeft Python-afhankelijkheidsbeheer gerevolutioneerd door een robuuste, intuïtieve oplossing te bieden voor veelvoorkomende uitdagingen bij pakketbeheer. De krachtige functies voor afhankelijkheidsresolutie, virtueel omgeheerbeheer en projectpublicatie maken het een onschatbaar instrument voor moderne Python-ontwikkeling.
Om je Python-ontwikkelingsreis voort te zetten, overweeg het verkennen van deze uitgebreide leerpaden:
- Python Programmeertraject – Beheers Python-fundamenten en geavanceerde concepten
- Tussenliggend Python — Verbeter je Python-vaardigheden
- Python Data Fundamentals — Leer essentiële gegevensmanipulatievaardigheden
- Associate Data Scientist in Python—Duik in data science met Python
Onthoud, effectief afhankelijkheidsbeheer is slechts één aspect van professionele Python-ontwikkeling. Naarmate je groeit als ontwikkelaar, zullen tools zoals Poetry je helpen bij het bouwen van meer onderhoudbare en betrouwbare Python-projecten.