Come vengono utilizzati Pipfile e Pipfile.lock?


132

Sembra che Pipfile / Pipfile.lock siano intesi come sostituti di requisit.txt, nel contesto del packaging di Python. Non c'è molta documentazione là fuori su come questi effettivamente funzionano, tuttavia. Ho trovato una descrizione in evoluzione del pipfile nella sezione PyPi del sito Web Python qui, ma è piuttosto disordinato e non spiega la semantica delle diverse sezioni del file.

Qualche suggerimento su come capire questi file?


2
Questo è un analogo diretto di Gemfilee Gemfile.lockdal mondo Ruby: il .lockfile ha versioni specifiche per ogni dipendenza; quello senza quell'estensione ha solo le versioni da uomo a controllo-umano. Detto questo, chiedere una spiegazione di qualcosa che è ancora in evoluzione e molto lontano dall'essere ben definito, molto meno standardizzato, è forse un po 'prematuro.
Charles Duffy,

(E allo stesso modo, la differenza tra Pipfileed requirements.txtè in gran parte che la prima cerca di adottare funzionalità dal mondo Ruby, cioè essere in grado di specificare insiemi di dipendenze per più ambienti e con condizioni / opzioni / ecc. All'interno di un singolo file).
Charles Duffy,

1
Sembra che sia già stato distribuito nel repository Heroku "Guida introduttiva a Python" ( github.com/heroku/python-getting-started.git ) quindi, piaccia o no, sembra che sia prodotto.
Stephen,

Gotcha. Detto questo, i documenti mi sembrano abbastanza solidi. Non so cosa avrei potuto scrivere in una risposta che non li avrebbe semplicemente ribaditi.
Charles Duffy,

1
Se ti riferisci al link che ho creato nel PO, allora ci sono un certo numero di cose omesse, per esempio cosa significa in realtà qualcosa in una sezione chiamata source.
Stephen,

Risposte:


166

Il concetto alla base di questi file è semplice e analogo ad altri strumenti già esistenti, se si ha familiarità con Ruby Bundler o Node's Npm. Pipenvè sia un pacchetto che uno strumento di gestione dell'ambiente virtuale che utilizza i file Pipfile e Pipfile.lock per raggiungere questi obiettivi.

Pipenv gestisce l'ambiente virtuale per te in un modo standard predefinito (non è più necessario attivare e disattivare la funzione). Di seguito, alcune nozioni di base per iniziare, vedere di più sul sito Web pipenv .

Iniziare

Iniziare a usare pipenv è facile, nel tipo di cartella del progetto ...

$ pipenv install

... e se ha già un requirements.txtfile, genererà un Pipfilefile con i requisiti e una cartella di ambiente virtuale, altrimenti genererà un Pipfilefile vuoto . Se non ti è piaciuto o hai cambiato idea su qualcosa che hai installato, basta digitare ...

$ pipenv uninstall <package>

... e sei a posto. Per attivare l'ambiente virtuale che pipenv ha già generato, vai con ...

$ pipenv shell

... e il tuo ambiente virtuale verrà attivato. Per lasciare l'ambiente ...

$ exit

... e tornerai alla sessione terminale originale.

Pipfile

Il file Pipfile ha lo scopo di specificare i requisiti dei pacchetti per l'applicazione o la libreria Python, sia per lo sviluppo che per l'esecuzione. Puoi installare un pacchetto semplicemente usando ...

$ pipenv install flask

... e verrà aggiunto come dipendenza per la distribuzione e l'esecuzione o usando ...

$ pipenv install --dev pytest

... e verrà utilizzato come dipendenza per i tempi di sviluppo. La sintassi del file è piuttosto semplice, come segue.

[[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 packaes you will use when developing the application)
pylint = "*"
wheel = "*"

[requires] # Here goes your required Python version.
python_version = "3.6"

Pipfile.lock

Il Pipfile.lock è destinato a indicare, in base alla presente pacchetti in Pipfile , che deve essere usato versione specifica di questi, evitando i rischi di aggiornare automaticamente i pacchetti che dipendono tra loro e rompere il progetto di dipendenza albero.

Puoi bloccare i pacchetti attualmente installati usando ...

$ pipenv lock

... e lo strumento cercherà la cartella dell'ambiente virtuale per generare automaticamente il file di blocco, in base alle versioni attualmente installate. La sintassi del file non è così ovvia come per Pipfile , quindi per motivi di concisione, non verrà visualizzata qui.


Questa è una risposta interessante, ma penso che quando stavo chiedendo non riuscivo a capire cosa significhi realmente [[source]], come è che l'origine dei pacchetti scaricati da Pipenv o qualcos'altro? Immagino che il resto dei due file sia abbastanza ovvio.
Stephen,

1
Lo ammetto, l'ho trovato confuso perché sto lavorando a un tutorial in cui devo decidere se la differenza [pacchetto] / [dev-pacchetto] è importante o se dovrei semplicemente inserire tutto in [pacchetto]. (Googling per questo è ciò che mi ha portato a questa pagina.) Ma avere entrambi mentre mettevo roba dev in [pacchetto] mi ha gettato. Potrei capire perché le richieste dovrebbero essere in [pacchetto] però.
Al Sweigart,

1
Modificato, come richiesto, per evitare confusione sui pacchetti di sviluppo, grazie per il tuo commento, spero che ora sia meno confuso :)
danieldeveloper001

1
Penso che sia una buona idea, se si desidera tenere traccia di quelle versioni del pacchetto lungo l'evoluzione del codice sorgente, poiché la maggior parte dei pacchetti sarà contrassegnata da una versione Pipfile. Se qualcosa si interrompe su un aggiornamento del pacchetto, si dovrebbe essere in grado di risolverlo rivedendo la cronologia delle versioni del pacchetto e, in effetti, uno dei creatori della libreria di richieste consiglia di farlo qui .
danieldeveloper001,

1
@Stephen, in realtà è l'opposto, come indicato nella documentazione di installazione di pipenv, è possibile specificare il --skip-lockflag per forzarlo a ignorare il Pipfile.lockfile anziché forzarlo a usarlo;)
danieldeveloper001
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.