Aggiunta di pacchetti python comuni a più virtualenvs
-
02-10-2019 - |
Domanda
attuale Python flusso di lavoro
pip , distribuire , virtualenv , e virtualenvwrapper installato nelle mie Python 2.7 site-packages (una quadro Python installare su Mac OS X ). Nel mio ~/.bash_profile
ho la riga
export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache
Questo dà un flusso di lavoro nel seguente modo:
$ mkvirtualenv pip-test
$ pip install nose # downloaded and installed from PyPi
$ pip install mock # downloaded and installed from PyPi
$ mkvirtualenv pip-test2
$ pip install nose # installed from pip's download cache
$ pip install mock # installed from pip's download cache
Domande
Dal momento che non sto scaricando i pacchetti che sono stati precedentemente installati in un altro virtualenv, questo flusso di lavoro consente di risparmiare tempo e larghezza di banda. Tuttavia, non salva spazio su disco, dal momento che ogni pacchetto sarà installato in ciascun virtualenv. Pertanto, mi chiedo:
- Domanda # 1 C'è una modifica a questo flusso di lavoro che mi permettesse di risparmiare spazio su disco da avere più virtualenvs riferimento un unico pacchetto Python che è non installata nel mio Python 2.7 site-packages?
Ho provato con add2virtualenv che fa parte del virtualenvwrapper. Anche se questo "aggiunge directory specificate nel percorso di Python per la virtualenv attualmente attiva," non aggiunge nessuna delle eseguibili presenti nella directory virtualenv/bin
. Pertanto, il seguente fallirà:
$ mkvirtualenv pip-test3
$ add2virtualenv ~/.virtualenvs/pip-test/lib/python2.7/site-packages/nose/
$ nosetests # Fails since missing ~/.virtualenvs/pip-test3/bin/nosetests
- Domanda # 2 Mi sto perdendo qualcosa sulle opere modo
add2virtualenv
? - Domanda # 1 riformulato Esiste un metodo migliore di add2virtualenv che consente a più virtualenvs a riferimento un unico pacchetto Python che è non installata nei miei Python 2.7 site-packages?
- Domanda # 3 Se c'è un metodo per installare un pacchetto Python condiviso in più virtualenvs, c'è una riduzione delle prestazioni che non c'è rispetto per l'installazione di pacchetti Python separatamente in ciascun virtualenv?
- Domanda # 4 devo solo rinunciare a conservare spazio su disco e bastone con il mio flusso di lavoro attuale?
Soluzione
A meno che non si sta facendo di sviluppo su un sistema embedded, trovo che lo spazio su disco a caccia in questo modo è sempre controproducente. Mi c'è voluto molto tempo per raggiungere questa realizzazione, perché sono cresciuto quando un grande disco rigido è stato un paio di megabyte, e la RAM è stata misurata in K. Ma oggi, a meno che non si è sotto vincoli molto particolari e inusuali, il beneficio di avere i vostri progetti siano ortogonali (è possibile eliminare qualsiasi directory sul vostro ovunque sistema al di fuori del progetto, e avere i suoi pacchetti Python ancora lì) sembra superano sempre di gran lunga il beneficio spazio su disco che, se sta sviluppando occupato, ti mai - nella mia esperienza -. preavviso anche in ogni caso
Quindi penso che è la lezione che sto offrendo la mia esperienza: ti accorgerai mai lo spazio su disco che hai perso, ma di preavviso, se il tentativo di ripulire una directory in un unico luogo i vostri progetti freni a disco in fase di sviluppo da qualche altra parte.