Indicazione della versione di Python nel repository quando si utilizza pyenv-virtualenv

5

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 in README .
  • 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).
posta user2891462 30.06.2017 - 10:43
fonte

2 risposte

1

Suggerirei di utilizzare pipenv per lo sviluppo di python che risolve un sacco di problemi.

Ora è lo strumento ufficiale consigliato da python.org

Se hai esperienza con say npm o qualcosa del genere, pipenv si comporta in modo simile. Fa la contabilità in due file ( Pipfile e Pipfile.lock ). Ti aiuta a creare build deterministiche . Per ottenere un ambiente di lavoro, ti impegni entrambi come faresti con requirements.txt insieme al tuo codice, controlla il codice, esegui pipenv install e voilà. Con pipenv shell inserisci il tuo ambiente virtuale.

Nel tuo Pipfile è una sezione allo scopo di definire la versione python richiesta, ad es.

[requires]
python_version = "3.6"
    
risposta data 08.04.2018 - 09:41
fonte
0

La risposta breve è che con pip / virtualenv non è possibile. Entrambi presuppongono che sia installato un runtime Python compatibile (dopotutto sono pacchetti Python). Specificare la versione nel README è la strada da seguire.

Potresti cercare di scrivere uno script di installazione personalizzato, ma questo è ciò che è setuptools . Puoi specificare la versione di Python richiesta con python_requires in setup.py. Questo darà un messaggio di errore ragionevole se il Python richiesto non è presente e ha molti modi per gestire altre esigenze di installazione personalizzate.

Questo può sembrare un altro modo per gestire le versioni, ma è lo standard Python e ci sono molti vantaggi, inclusi anni di conoscenza della comunità.

    
risposta data 07.04.2018 - 21:35
fonte

Leggi altre domande sui tag