¿Hay alguna manera de actualizar la versión de python utilizada en un virtualenv (por ejemplo, si sale una versión de corrección de errores)?
Podría pip freeze --local > requirements.txt
, luego eliminar el directorio y pip install -r requirements.txt
, pero esto requiere mucha reinstalación de grandes bibliotecas, por ejemplo numpy
, que uso mucho.
Puedo ver que esto es una ventaja cuando actualizo desde, por ejemplo, 2.6 -> 2.7, pero ¿qué pasa con 2.7.x -> 2.7.y?
python
version
virtualenv
pip
Simon Walker
fuente
fuente
Respuestas:
¿Viste esto ? Si no he entendido mal esa respuesta, puede intentar crear un nuevo virtualenv sobre el anterior. Solo necesita saber qué python utilizará su virtualenv (deberá ver su versión virtualenv).
Si su virtualenv está instalado con la misma versión de python que la anterior y la actualización de su paquete virtualenv no es una opción, puede leer esto para instalar un virtualenv con la versión de python que desee.
EDITAR
He probado este enfoque (el que crea un nuevo virtualenv sobre el anterior) y funcionó bien para mí. Creo que puede tener algunos problemas si cambia de Python 2.6 a 2.7 o 2.7 a 3.x, pero si solo actualiza dentro de la misma versión (permaneciendo en 2.7 como desee) no debería tener ningún problema, ya que todos los paquetes se mantienen en las mismas carpetas para ambas versiones de python (los paquetes 2.7.xy 2.7.y están dentro de your_env / lib / python2.7 /).
Si cambia su versión de python virtualenv, deberá instalar todos sus paquetes nuevamente para esa versión (o simplemente vincular los paquetes que necesita a la carpeta de paquetes de la nueva versión, es decir: your_env / lib / python_newversion / site-packages)
fuente
virtualenv
en la parte superior de la antigua, y se hizo el trabajo. Tuve que especificar-p
para señalarlo a la versión correcta de python.Si está utilizando el módulo venv que viene con Python 3.3+, es compatible con una
--upgrade
opción. Por los documentos :fuente
venv
y se niegan a arreglarlo sobre la base de que "podría usar virtualenv". EDITAR: en realidad, ¡funciona! También muestra un mensaje de error sobre "surepip".python3.6 -m venv --upgrade <path_of_existing_env>
bin/python
ybin/python3
aún vinculado al viejopython3.4
binario, tuve que configurar los enlaces manualmente. Además, ¿hay alguna forma de eliminar la versión de Python ahora desactualizada?Error: Command '['/Users/me/Sites/site/venv3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
> ¿qué significa? No veo procesos activos de Python, no puedo actualizar.python3.6 -m venv --upgrade ENV_DIR
para que funcione. Creo que aún tendré que actualizar algunos enlaces simbólicosENV_DIR/bin
. Por lo tanto, el truco consistía en actualizar con la nueva versión de Python mientras la versión anterior todavía estaba instalada.Actualizado nuevamente: el siguiente método podría no funcionar en versiones más recientes de virtualenv. Antes de intentar hacer modificaciones al antiguo virtualenv, debe guardar las dependencias en un archivo de requisitos (
pip freeze > requirements.txt
) y hacer una copia de seguridad de él en otro lugar. Si algo sale mal, aún puede crear un nuevo virtualenv e instalar las antiguas dependencias en él (pip install -r requirements.txt
).Actualizado: cambié la respuesta 5 meses después de haber respondido originalmente. El siguiente método es más conveniente y robusto.
Efecto secundario: también corrige la
Symbol not found: _SSLv2_method
excepción cuando lo haceimport ssl
en un entorno virtual después de actualizar Python a v2.7.8.Aviso: En la actualidad, esto es sólo el 2.7.x Python .
Si está utilizando Homebrew Python en OS X, primero
deactivate
todo virtualenv, luego actualice Python:Ejecute los siguientes comandos (
<EXISTING_ENV_PATH>
es la ruta de su entorno virtual):Finalmente, vuelva a crear su entorno virtual:
Al hacerlo, se eliminan los archivos centrales antiguos de Python y las bibliotecas estándar (más
setuptools
ypip
), mientras que las bibliotecas personalizadas instaladassite-packages
se conservan y funcionan, tan pronto como estén en Python puro. Las bibliotecas binarias pueden o no necesitar ser reinstaladas para funcionar correctamente.Esto funcionó para mí en 5 entornos virtuales con Django instalado.
Por cierto, si
./manage.py compilemessages
no funciona después, intente esto:fuente
bin/python
archivo.setuptools
ypip
.<EXISTING_ENV_PATH>/.Python
ya que eso rompió la creación virtualenv.rmvirtualenv <env_name>
y eliminará todas sus dependencias alineadas :) Vea más en: virtualenvwrapper.readthedocs.io/en/latest/…No pude crear un nuevo virtualenv sobre el anterior. Pero hay herramientas en pip que hacen que sea mucho más rápido reinstalar los requisitos en una nueva versión. Pip puede compilar cada uno de los elementos en su require.txt en un paquete de rueda y almacenarlo en un caché local. Cuando crea un nuevo venv y ejecuta la instalación de pip en él, pip usará automáticamente las ruedas preconstruidas si las encuentra. Las ruedas se instalan mucho más rápido que ejecutar setup.py para cada módulo.
Mi ~ / .pip / pip.conf se ve así:
Instalo wheel (
pip install wheel
), luego corropip wheel -r requirements.txt
. Esto almacena las ruedas construidas en el directorio de rueda en mi pip.conf.A partir de entonces, cada vez que instalo cualquiera de estos requisitos, los instala desde las ruedas, lo cual es bastante rápido.
fuente
Cómo actualizar la versión de Python para un proyecto virtualenvwrapper existente y mantener el mismo nombre
Estoy agregando una respuesta para cualquiera que use el excelente virtualenvwrapper de Doug Hellmann específicamente porque las respuestas existentes no lo hicieron por mí.
Algún contexto:
python3 -m venv
, no es compatible con entornos Python 2mkproject
que crea el entorno virtual, crea un directorio de proyecto vacío y lo graba en CD.workon
comando virtualenvwrapper para activar cualquier proyecto independientemente de la versión de PythonDirecciones:
Digamos que su proyecto existente se llama
foo
y actualmente ejecuta Python 2 (mkproject -p python2 foo
), aunque los comandos son los mismos si se actualiza de 2.xa 3.x, 3.6.0 a 3.6.1, etc. También supongo que ' Actualmente está dentro del entorno virtual activado.1. Desactive y elimine el antiguo entorno virtual:
Tenga en cuenta que si ha agregado comandos personalizados a los ganchos (p. Ej.
bin/postactivate
), Deberá guardarlos antes de eliminar el entorno.2. Guarde el proyecto real en un directorio temporal:
3. Cree el nuevo entorno virtual (y el directorio del proyecto) y active:
4. Reemplace el directorio de proyecto generado vacío con proyecto real, cambie nuevamente al directorio de proyecto:
5. Vuelva a instalar las dependencias, confirme la nueva versión de Python, etc.
Si este es un caso de uso común, consideraré abrir un RP para agregar algo como
$ upgradevirtualenv
/$ upgradeproject
a virtualenvwrapper.fuente
Este enfoque siempre funciona para mí:
Tomado de:
fuente
Moví mi directorio de inicio de un mac a otro (Mountain Lion a Yosemite) y no me di cuenta sobre el virtualenv roto hasta que perdí el control de la vieja computadora portátil. Tuve el punto virtualenv de instalar Python 2.7
brew
y desde que Yosemite vino con Python 2.7, quería actualizar mi virtualenv al sistema python. Cuando corrívirtualenv
sobre el directorio existente, recibí unOSError: [Errno 17] File exists: '/Users/hdara/bin/python2.7/lib/python2.7/config'
error. Por prueba y error, solucioné este problema eliminando algunos enlaces y arreglando algunos más manualmente. Esto es lo que finalmente hice (similar a lo que hizo @Rockalite, pero más simple):Después de esto, pude ejecutar virtualenv sobre el directorio existente.
fuente
En OS X o macOS usando Homebrew para instalar y actualizar Python3 tuve que eliminar enlaces simbólicos antes de
python -m venv --upgrade ENV_DIR
que funcionara.Guardé lo siguiente en upgrade_python3.sh para recordar cómo dentro de unos meses, cuando necesite volver a hacerlo:
ACTUALIZACIÓN: si bien esto parecía funcionar bien al principio, cuando ejecuté py.test me dio un error. Al final, acabo de volver a crear el entorno a partir de un archivo de requisitos.
fuente
py.test
no funciona porque `~ / .virtualenvs / myenv / bin / python3.7 no es un enlace simbólico, por lo que no se actualiza.~/.virtualenvs/myenv/.Python
que hay un enlace simbólico.Si está utilizando
pipenv
, no sé si es posible actualizar un entorno en su lugar, pero al menos para actualizaciones de versiones menores, parece ser lo suficientemente inteligente como para no reconstruir paquetes desde cero cuando crea un nuevo entorno. Por ejemplo, de 3.6.4 a 3.6.5:fuente
Solo quiero aclarar, porque algunas de las respuestas se refieren
venv
y otras se refierenvirtualenv
.El uso de la bandera
-p
o--python
es compatiblevirtualenv
, pero no activadovenv
. Si tiene más de una versión de Python y desea especificar con cuál crearlavenv
, hágalo en la línea de comando, así:Por supuesto, puede actualizar
venv
como lo han señalado otros, pero eso supone que ya ha actualizado el Python que se utilizó para crear esovenv
en primer lugar. No puede actualizar a una versión de Python que aún no tiene en su sistema en algún lugar, así que asegúrese de obtener la versión que desea, primero, luego haga todos los venvs que desee.fuente
Paso 1: congele el requisito y realice una copia de seguridad del entorno existente
Paso 2: Instale Python 3.7 y active el entorno virutal
Paso 3: instale los requisitos
fuente
Para todos los que tienen el problema.
Tienes que instalar python3.6-venv
fuente