¿Se puede actualizar correctamente el virtualenv existente?

93

Tengo un virtualenv creado para Python 2.5 y quiero "actualizarlo" a Python 2.6.

Así es como se configuró originalmente:

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

Ahora ejecuto virtualenv en el mismo directorio para actualizar:

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

El python predeterminado sigue siendo 2.5, aunque también puedo especificar 2.6. ¿Hay alguna forma de eliminar 2.5 por completo y hacer que 'bin / python' apunte a 2.6 en su lugar?

Matt Norris
fuente

Respuestas:

62

Puede usar Python 2.6 virtualenv para "revirtualizar" el directorio existente. Sin embargo, tendrá que reinstalar todos los módulos que instaló. A menudo tengo un directorio virtual para desarrollar un módulo y virtualenv el mismo directorio con muchas versiones de Python, y funciona bien. :)

Lennart Regebro
fuente
1
¡Gracias! Probé su método y veo que el script 'activar' está actualizado, pero la versión anterior permanece (consulte la pregunta revisada). ¿Puede dar un ejemplo?
Matt Norris
13
simplemente puede eliminar el ejecutable bin / python en virtualenv antes de volver a ejecutar virtualenv con python 2.6.
Carl Meyer
9
Bueno, usted puede hacer que funcione - pero ¿por qué? El gran atractivo de virtualenves que crea entornos de Python reproducibles de manera fácil y económica. ¿Por qué jugar con uno y no estar seguro de haber arreglado todo o de que puede reproducirlo de nuevo o de que está alterando su entorno de producción cuando puede hacer uno nuevo y limpio?
Ned Deily
9
@Ned: Virtualenv no crea entornos reproducibles, crea entornos aislados. Para reproducirlos también es necesario instalar todo de la misma manera, virtualenv no es suficiente para eso. zc.buildout es mejor allí.
Lennart Regebro
1
@Ned: Punto tomado; este es un entorno de desarrollo en el que estaba trabajando. Quería mantenerlo en 2.5 a menos que fuera absolutamente necesario hacer 2.6. Surgió esa necesidad, así que tenía curiosidad por saber si podía actualizar un entorno aislado para ver los efectos en su código, sin tener que reconstruir y copiar / pegar directorios en el nuevo entorno.
Matt Norris
19

En Python 3.3+ venv soporta --upgrade flag

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

Uso:

python -m venv --upgrade YOUR_VENV_DIRECTORY

Acabo de actualizar mi venv de Python 3.7.xa 3.8 en varios proyectos sin ningún problema.

Vlad Bezden
fuente
1
"suponiendo que Python se haya actualizado en el lugar" ... desafortunadamente, esto parece significar que si mi sistema python3apunta a 3.6, no puedo crear un python3punto de acceso a 3.7 en mi venv
joel
4

Debe crear un nuevo virtualenvuso python2.6y luego, después de activar el nuevo env, usar su python2.6y su easy_installpara instalar nuevas versiones de cualquier paquete de sitio que necesite. Tenga en cuenta que el nombre de la ruta de acceso virtualenvestá integrado en varios archivos dentro del entorno, por lo tanto, cuando esté listo para cambiar a él, cambie sus scripts de inicio y otros para hacer referencia a la nueva virualenvruta o tenga mucho cuidado al copiarlo en el directorio antiguo y modificando los nombres de ruta dentro de él.

Ned Deily
fuente
3

Instale un segundo Python en CentOS

  1. descargar python
  2. instalar para diff local

    configure --prefix=/opt/virtualenv/python 
    make && make install
  3. crear env virtual usando nueva python

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

    nota: si es necesario, se puede hacer con un usuario diferente

    chown pyuser -R /opt/virtualenv
    su - pyuser
    source /opt/virtualenv/bin/activate
    python -v
  4. Crear entorno virtual:

    virtualenv /opt/virtualenv
    su - infograficos
    source bin/activate
  5. Instale pip con python 2.7 (dentro de virtualenv)

    easy_install pip 
Xoroz
fuente
0

Si está utilizando OS X, intente esto si desea actualizar Python a una versión menor (por ejemplo, 2.7.6 a 2.7.8) mientras mantiene funcionando las bibliotecas de terceros.

Me funciona en 5 entornos virtuales diferentes con Django instalado.

Rockallita
fuente