Estoy usando virtualenv y virtualenvwrapper. Puedo cambiar entre virtualenv bien usando el workon
comando.
me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$
¿Cómo salgo de todas las máquinas virtuales y vuelvo a trabajar en mi máquina real? En este momento, la única forma de volver me@mymachine:~$
es salir del shell y comenzar uno nuevo. Eso es un poco molesto. ¿Hay un comando para trabajar en "nada", y si es así, qué es? Si tal comando no existe, ¿cómo haría para crearlo?
python
virtualenv
virtualenvwrapper
Apreche
fuente
fuente
Respuestas:
Por lo general, activar un virtualenv le proporciona una función de shell llamada:
lo que vuelve las cosas a la normalidad.
Acabo de mirar específicamente de nuevo el código
virtualenvwrapper
y, sí, también es compatibledeactivate
como la forma de escapar de todos los virtualenvs.Si está intentando abandonar un entorno de Anaconda , el comando depende de su versión de
conda
. Las versiones recientes (como 4.6) instalan unaconda
función directamente en su shell, en cuyo caso ejecuta:En su lugar, las versiones anteriores de conda implementan la desactivación mediante un script independiente:
fuente
virtualenvwrapper
y quizás Doug Hellmann lo consideraría! Tenga en cuenta que, para aquellos que puedan leer estos comentarios más adelante, ¡ NOworkon
es un comando nativo (que es de lo que trata la pregunta original) sino un comando!virtualenv
virtualenvwrapper
Definí un alias , workoff , como lo contrario de workon :
Es fácil de recordar:
fuente
.bashrc
?~/.bashrc
Utilizar:
Si esto no funciona, intente
Cualquiera que sepa cómo funciona Bash
source
pensará que es extraño, pero algunos envoltorios / flujos de trabajo en torno a virtualenv lo implementan como complemento / contraparte desource activate
. Su experiencia puede ser diferente.fuente
deactivate
es una función que se crea cuando se obtiene elactivate
archivo. Su sugerencia para hacersource deactivate
no tiene ningún sentido, ya que no hay ningún archivo llamadodeactivate
Para activar un entorno virtual de Python:
Para desactivar:
fuente
$source activate
$cd /to/dir/i/want/my/virtualenv/installed
entonces,$virtualenv name_i_want_for_it
entonces$. name_i_want_for_it/bin/activate
virtualenv todavía me parece un poco desagradable. Necesita ser mejorado ...Descubrí que cuando estaba en un entorno Miniconda3 tenía que ejecutar:
Ni
deactivate
tampocosource deactivate
trabajó para mí.fuente
deactivate
fue paravirtualenv
ysource deactivate
es para conda antiguo en Linux.conda deactivate
es una buena forma multiplataforma para conda envs (no virtualenvs)Puede usar
virtualenvwrapper
para facilitar la forma en que trabajavirtualenv
.Instalando
virtualenvwrapper
:Si está utilizando un shell estándar, abra su
~/.bashrc
o~/.zshrc
si usa Oh My Zsh . Agregue estas dos líneas:Para activar un virtualenv existente, use el comando
workon
:Para desactivar su virtualenv:
Aquí está mi tutorial , paso a paso sobre cómo instalar virtualenv y virtualenvwrapper.
fuente
workon
comando, funciona desde cualquier directorio.deactivate
en un script de shell sin primero obtener el script que define esta función (en ese caso, tendrá ese comando no encontrado ... . error)Dado que la
deactivate
función creada por el abastecimiento~/bin/activate
no puede ser descubierta por los medios habituales de buscar dicho comando~/bin
, es posible que desee crear uno que simplemente ejecute la funcióndeactivate
.El problema es que un script llamado
deactivate
contiene un solo comandodeactivate
causará un bucle sin fin si se ejecuta accidentalmente mientras no está en el venv. Un error común.Esto se puede evitar ejecutando solo
deactivate
si la función existe (es decir, se ha creado mediante el abastecimientoactivate
).fuente
Uso
deactivate
.Nota,
(my_env)
se ha ido.fuente
Yo uso zsh-autoenv que se basa en autoenv .
Aquí hay un ejemplo:
Entonces, cuando salgo del
dtree
directorio, el entorno virtual se cierra automáticamente."Development tree utiles"
es solo un nombre ... No hay un medio oculto que se vincule con los Illuminati aquí.fuente
El uso de la
deactivate
función proporcionada por el script de venvactivate
requiere que confíe en que la función de desactivación esté codificada correctamente para restablecer limpiamente todas las variables de entorno a su estado anterior, teniendo en cuenta no solo la activación original , sino también cualquier interruptor , configuración o otro trabajo puedas haber hecho mientras tanto.Probablemente esté bien, pero introduce un nuevo riesgo distinto de cero de dejar su entorno modificado después.
Sin embargo, técnicamente no es posible que un proceso altere directamente las variables de entorno de su padre, por lo que podemos usar un sub-shell separado para estar absolutamente seguros de que nuestros
venv
s no dejan ningún cambio residual:Activar:
$ bash --init-file PythonVenv/bin/activate
venv
. Subash
caparazón original permanece sin modificaciones.Para desactivar:
$ exit
O[CTRL]
+[D]
venv
encuentra y lo regresa al shell original antes de que el script de activación realizara cambios en el entorno.Ejemplo:
fuente
Tuve el mismo problema mientras trabajaba en un script de instalación. Eché un vistazo a lo que bin / active_this.py y lo revirtí.
Ejemplo:
No estoy 100% seguro de que funcione según lo previsto. Puede que me haya perdido algo por completo.
fuente