Il virtualenv esistente può essere aggiornato correttamente?


93

Ho un virtualenv creato per Python 2.5 e voglio "aggiornarlo" a Python 2.6.

Ecco come è stato originariamente impostato:

virtualenv --no-site-packages -p python2.5 myenv

Ora eseguo virtualenv nella stessa directory per aggiornare:

virtualenv --no-site-packages -p python2.6 myenv
...
Not overwriting existing python script myenv/bin/python (you must use myenv/bin/python2.6)
...
Overwriting myenv/bin/activate with new content

Il python predefinito è ancora 2.5, anche se posso anche specificare 2.6. C'è un modo per rimuovere completamente 2.5 e avere invece 'bin / python' che punta a 2.6?

Risposte:


62

Puoi usare il virtualenv di Python 2.6 per "rivirtualizzare" la directory esistente. Tuttavia, dovrai reinstallare tutti i moduli installati. Spesso ho una directory virtuale per lo sviluppo di un modulo e virtualenv la stessa directory con molte versioni di Python e funziona perfettamente. :)


1
Grazie! Ho provato il tuo metodo e ho visto che lo script "enable" è aggiornato, ma la vecchia versione rimane (vedi la domanda rivista). Sei in grado di fornire un esempio?
Matt Norris

13
puoi semplicemente rimuovere l'eseguibile bin / python in virtualenv prima di eseguire nuovamente virtualenv con python 2.6.
Carl Meyer

9
Bene, puoi farlo funzionare, ma perché? La grande attrazione di virtualenvè che rende facilmente ed economicamente riproducibili ambienti Python. Perché masticare con uno e non essere certo di aver sistemato tutto o di poterlo riprodurre di nuovo o di disturbare il tuo ambiente di produzione quando puoi semplicemente farne uno nuovo pulito?
Ned Deily

9
@ Ned: Virtualenv non crea ambienti riproducibili, crea ambienti isolati. Per riprodurli è necessario anche installare tutto allo stesso modo, virtualenv non basta. zc.buildout è migliore lì.
Lennart Regebro

1
@ Ned: punto rilevato; questo è un ambiente di sviluppo in cui stavo lavorando. Volevo mantenerlo in 2.5 a meno che non avessi assolutamente bisogno di fare 2.6. Questa esigenza è nata, quindi ero curioso di poter aggiornare un ambiente isolato per vedere gli effetti sul tuo codice, senza dover ricostruire e copiare / incollare le directory nel nuovo env.
Matt Norris

19

In Python 3.3+ venv supporta il flag --upgrade

  --upgrade             Upgrade the environment directory to use this version
                        of Python, assuming Python has been upgraded in-place.

Utilizzo:

python -m venv --upgrade YOUR_VENV_DIRECTORY

Ho appena aggiornato il mio venv da Python 3.7.xa 3.8 su diversi progetti senza alcun problema.


1
"supponendo che Python sia stato aggiornato sul posto" ... questo purtroppo sembra significare che se il mio sistema python3punta a 3.6, non posso creare arrivare python3al punto 3.7 nel mio venv
joel

4

È necessario creare un nuovo virtualenvusing python2.6e quindi, dopo aver attivato il nuovo env, utilizzare il suo python2.6e il suo easy_installper installare le nuove versioni di tutti i pacchetti del sito necessari. Fai attenzione che il nome del percorso di virtualenvè cablato in vari file all'interno dell'ambiente, quindi, quando sei pronto per passare ad esso, modifica gli script di avvio e altri per fare riferimento al nuovo virualenvpercorso o fai molta attenzione a copiarlo su la vecchia directory e modificando i nomi dei percorsi al suo interno.


3

Installa un secondo Python su CentOS

  1. scarica python
  2. installare in diff locale

    configure --prefix=/opt/virtualenv/python 
    make && make install
  3. crea un ambiente virtuale usando il nuovo python

    virtualenv /opt/virtualenv --python=/opt/python276/bin/python

    nota: se necessario, può essere fatto con un utente diverso

    chown pyuser -R /opt/virtualenv
    su - pyuser
    source /opt/virtualenv/bin/activate
    python -v
  4. Crea ambiente virtuale:

    virtualenv /opt/virtualenv
    su - infograficos
    source bin/activate
  5. Installa pip con python 2.7 (all'interno di virtualenv)

    easy_install pip 

0

Se stai usando OS X, prova questo se vuoi aggiornare Python a una versione leggermente aumentata (ad esempio da 2.7.6 a 2.7.8) mantenendo il funzionamento delle librerie di terze parti.

Per me funziona su 5 diversi ambienti virtuali con Django installato.

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.