Hoe worden Pipfile en Pipfile.lock gebruikt?

Het lijkt erop dat Pipfile/Pipfile.lock bedoeld zijn als vervanging voor requirements.txt, in de context van Python-packaging. Er is echter niet veel documentatie over hoe deze echt werken. Ik vond een zich ontwikkelende beschrijving van pipfile in de PyPi-sectie van de Python-website hiermaar het is behoorlijk rommelig en verklaart niet de semantiek van de verschillende secties van het bestand.

Heeft u tips voor het begrijpen van deze bestanden?


Antwoord 1, autoriteit 100%

Het concept achter deze bestanden is eenvoudig en analoog aan andere reeds bestaande tools, als je enige bekendheid hebt met Ruby’s Bundler of Node’s Npm. Pipenvis zowel een pakket- als een virtuele-omgevingsbeheertool die de Pipfile- en Pipfile.lock-bestanden gebruikt om deze doelen te bereiken.

Pipenv handelt de virtuele omgeving voor u af op één standaard manier (niet meer activeren en deactiveren vereist). Hieronder vindt u enkele basisprincipes om u op weg te helpen, zie meer op pipenv-website.

Aan de slag

Begin pipenv te gebruiken is eenvoudig, in uw projectmaptype…

$ pipenv install

… en als het al een bestand requirements.txtheeft, genereert het een bestand Pipfilemet de vereisten en een map voor een virtuele omgeving, anders zal het genereer een leeg Pipfile-bestand. Als je iets niet leuk vond of van gedachten bent veranderd over iets dat je hebt geïnstalleerd, typ je gewoon…

$ pipenv uninstall <package>

… en je bent klaar om te gaan. Om de virtuele omgeving te activeren die pipenv al heeft gegenereerd, ga met…

$ pipenv shell

… en uw virtuele omgeving wordt geactiveerd. Om de omgeving te verlaten…

$ exit

… en je keert terug naar je oorspronkelijke terminalsessie.

Pipfile

Het Pipfile-bestand is bedoeld om pakketvereisten voor uw Python-toepassing of -bibliotheek te specificeren, zowel voor ontwikkeling als uitvoering. U kunt een pakket installeren door eenvoudigweg…

$ pipenv install flask

… en het zal worden toegevoegd als een afhankelijkheid voor implementatie en uitvoering of door gebruik te maken van …

$ pipenv install --dev pytest

… en het zal worden gebruikt als een afhankelijkheid voor de ontwikkeltijd. In beide gevallen, als u specifieker wilt zijn over de pakketversie, zoals vermeld in de documentatiepipenv maakt gebruik van dezelfde versiespecificatiesgebruikt door pip. De bestandssyntaxis is vrij eenvoudig, als volgt.

[[source]] # Here goes your package sources (where you are downloading your packages from).
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[packages] # Here goes your package requirements for running the application and its versions (which packages you will use when running the application).
requests = "*"
flask = "*"
pandas = "*"
[dev-packages] # Here goes your package requirements for developing the application and its versions (which packages you will use when developing the application)
pylint = "*"
wheel = "*"
[requires] # Here goes your required Python version.
python_version = "3.6"

Pipfile.lock

De Pipfile.lockis bedoeld om, op basis van de pakketten die aanwezig zijn in Pipfile, aan te geven welke specifieke versie daarvan moet worden gebruikt, waardoor de risico’s van het automatisch upgraden van pakketten worden vermeden die van elkaar afhankelijk zijn en uw projectafhankelijkheidsboom doorbreken.

U kunt uw momenteel geïnstalleerde pakketten vergrendelen met…

$ pipenv lock

… en de tool zoekt de map van uw virtuele omgeving op om het vergrendelingsbestand automatisch voor u te genereren, gebaseerd op de momenteel geïnstalleerde versies. De bestandssyntaxis is niet zo duidelijk als voor Pipfile, dus omwille van de beknoptheid wordt deze hier niet weergegeven.


Antwoord 2

Zoals hierboven uitgelegd door @Charles Duffy, is het een directe analogie van Gemfileen Gemfile.lockuit de Ruby-wereld. Zie onderstaande referentie voor meer details.

Referentie: https ://medium.com/never-hop-on-the-bandwagon/gemfile-and-gemfile-lock-in-ruby-65adc918b856

Other episodes