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).