Sono venuto a conoscenza di virtualenv
e pyenv
qualche tempo fa, e li ho usati separatamente per un po '. Recentemente, mentre studiavo le best practice e gli strumenti per lo sviluppo di Python, ho trovato pyenv-virtualenv
. Lo trovo utile (si occupa di usare il metodo giusto per creare l'ambiente virtuale a seconda della versione di Python) e di pulire (poiché la directory venv
non è impigliata con il tuo codebase).
Il problema che trovo è che in precedenza (quando si utilizzava pyenv
e virtualenv
separatamente) spingere il mio file requirements.txt
e il mio file .python-version
nel repository. Dopo aver clonato il progetto alcuni mesi dopo, ho potuto ricreare il mio ambiente virtuale usando requirements.txt
e ho potuto controllare .python-version
per vedere su quale versione di Python stavo sviluppando.
Con pyenv-virtualenv
, tuttavia, il file .python-version
è meno utile. Poiché in pyenv-virtualenv
un ambiente virtuale viene trattato come una nuova versione di Python all'interno di pyenv
, e il modo di collegare il tuo progetto all'ambiente virtuale è "impostando la versione Python" in quell'ambiente virtuale, il file non contiene più la versione esatta di Python che stai utilizzando.
Supponiamo che sto lavorando al progetto Euler e decido di creare un ambiente virtuale usando pyenv-virtualenv
, e lo chiamo project_euler. Per far funzionare il mio codice base su quell'ambiente virtuale ho bisogno di andare nella directory del progetto e digitare: pyenv local project_euler
.
Ora tutto funziona perfettamente a livello locale, ma quando spingo nel mio repository e lo riprendo tra qualche mese, .python-version
non sarà troppo utile, poiché dirà solo "project_euler". Inoltre, se la persona che scarica il repository ha anche un virtualenv chiamato project_euler
che è configurato in modo diverso da quello che stavo usando quando ho spinto, potrebbero usare un ambiente configurato in modo errato senza rendersene conto . Questo non era un problema quando si utilizzava pyenv
e virtualenv
separatamente, poiché .python-version
includeva solo informazioni sulla versione Python, non il nome dell'ambiente virtuale in uso.
Quali sono le migliori pratiche per affrontare questi problemi? Posso pensare a diverse opzioni:
- Includi la versione di Python nel nome dei tuoi ambienti virtuali:
project_euler_3.5.3
(nota che questo non risolve il problema con l'uso errato dell'ambiente virtuale sbagliato). - Non spingere
.python-version
, documenta invece la versione minima supportata di Python inREADME
. - Non spingere
.python-version
, e non documentare la versione di Python (non sembra giusto, dato che ci sono problemi di retrocompatibilità anche tra revisioni minori --eg 3.5 vs 3.4-- quindi non dovrebbe essere il utente da indovinare).