Estoy usando virtualenv y virtualenvwrapper. Puedo cambiar entre virtualenv bien usando el workoncomando.
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
virtualenvwrappery, sí, también es compatibledeactivatecomo 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 unacondafunció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
virtualenvwrappery quizás Doug Hellmann lo consideraría! Tenga en cuenta que, para aquellos que puedan leer estos comentarios más adelante, ¡ NOworkones un comando nativo (que es de lo que trata la pregunta original) sino un comando!virtualenvvirtualenvwrapperDefiní un alias , workoff , como lo contrario de workon :
Es fácil de recordar:
fuente
.bashrc?~/.bashrcUtilizar:
Si esto no funciona, intente
Cualquiera que sepa cómo funciona Bash
sourcepensará 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
deactivatees una función que se crea cuando se obtiene elactivatearchivo. Su sugerencia para hacersource deactivateno tiene ningún sentido, ya que no hay ningún archivo llamadodeactivatePara activar un entorno virtual de Python:
Para desactivar:
fuente
$source activate$cd /to/dir/i/want/my/virtualenv/installedentonces,$virtualenv name_i_want_for_itentonces$. name_i_want_for_it/bin/activatevirtualenv todavía me parece un poco desagradable. Necesita ser mejorado ...Descubrí que cuando estaba en un entorno Miniconda3 tenía que ejecutar:
Ni
deactivatetampocosource deactivatetrabajó para mí.fuente
deactivatefue paravirtualenvysource deactivatees para conda antiguo en Linux.conda deactivatees una buena forma multiplataforma para conda envs (no virtualenvs)Puede usar
virtualenvwrapperpara facilitar la forma en que trabajavirtualenv.Instalando
virtualenvwrapper:Si está utilizando un shell estándar, abra su
~/.bashrco~/.zshrcsi 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
workoncomando, funciona desde cualquier directorio.deactivateen 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
deactivatefunción creada por el abastecimiento~/bin/activateno 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
deactivatecontiene un solo comandodeactivatecausará un bucle sin fin si se ejecuta accidentalmente mientras no está en el venv. Un error común.Esto se puede evitar ejecutando solo
deactivatesi 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
dtreedirectorio, 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
deactivatefunción proporcionada por el script de venvactivaterequiere 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
venvs no dejan ningún cambio residual:Activar:
$ bash --init-file PythonVenv/bin/activatevenv. Subashcaparazón original permanece sin modificaciones.Para desactivar:
$ exitO[CTRL]+[D]venvencuentra 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