python - error - ¿Cómo activo un virtualenv dentro de la terminal de PyCharm?
python 2.7 interpreter pycharm (20)
Acabo de agregar un script llamado pycharmactivate a mi directorio personal. Establecer el valor de PyCharm (4.0.1) Archivo> Configuraciones> Herramientas> Terminal> Ruta del shell a / bin / bash --rcfile ~ / pycharmactivate. Tal vez no sea la mejor solución en caso de que tenga diferentes directorios y nombres de proyectos y virtualenv, pero a mí me funciona. Este script contiene las siguientes 3 líneas y asume que su virtualenv tiene el mismo nombre que su directorio de proyecto.
source ~/.bashrc
projectdir=${PWD##*/}
source ~/.virtualenvs/$projectdir/bin/activate
Configuré PyCharm, creé mi virtualenv (a través del comando virtual env o directamente en PyCharm) y activé ese entorno como mi intérprete. Todo está funcionando bien.
Sin embargo, si abro un terminal usando "Herramientas, Abrir Terminal", el prompt de shell proporcionado no usa el env virtual; Todavía tengo que usar source ~/envs/someenv/bin/activate
dentro de ese Terminal para activarlo.
Otro método es activar el entorno en un shell y ejecutar PyCharm desde ese entorno. Esto es "factible" pero bastante feo, y significa que tengo grandes problemas si cambio entornos o proyectos de PyCharm: ahora estoy usando un entorno totalmente erróneo.
¿Hay alguna otra forma, mucho más sencilla, de tener "Herramientas, Abrir Terminal" para activar automáticamente el entorno virtual?
Basado en las respuestas de Peter y la experimentación, he encontrado una buena "solución general", que resuelve lo siguiente:
- Restaura el comportamiento de un shell de inicio de sesión. PyCharm normalmente ejecuta un shell de inicio de sesión, pero --rcfile detuvo esto. El script todavía usa --rcfile, pero intenta emular el comportamiento INVOCATION de un shell de inicio de sesión.
- Elimina la necesidad de crear un archivo de registro para cada entorno
- Elimina la necesidad de actualizar la configuración del proyecto si cambia el entorno.
Coloque esta secuencia de comandos en un directorio bin en alguna parte. Por ejemplo ~ / bin / pycharmactivate
if [ -r "/etc/profile" ] ; then . /etc/profile ; fi
if [ -r "~/.bash_profile" ] ; then
. ~/.bash_profile
elif [ -r "~/.bash_login" ] ; then
. ~/.bash_login
elif [ -r "~/.profile" ] ; then
. ~/.profile
fi
ACTIVATERC=`cat .idea/workspace.xml | perl -n -e ''print "/$1/bin/activate" if m:option name="SDK_HOME" value="///$USER_HOME///$(.*)/bin/python":''`
if [ -n "$ACTIVATERC" ] ; then . "$HOME/$ACTIVATERC" ; else echo "Could not find virtualenv from PyCharm" ; fi
Luego configure la ruta de Shell de PyCharm a:
/bin/bash --rcfile ~/bin/pycharmactivate
Este método debería funcionar con entornos virtuales arbitrarios por proyecto y no hace suposiciones en su entorno, ya que utiliza los enlaces que crea.
Usted escribe:
- Un script global que invoca el gancho
- Un script hook por proyecto PyCharm (no obligatorio)
Dado que el último PyCharm actual (Comunidad 2016.1) no permite la configuración del Terminal por proyecto, comience con el script que invoca el enlace específico del proyecto. Este es mi ~/.pycharmrc
:
if [ -r ".pycharm/term-activate" ]; then
echo "Terminal activation hook detected."
echo "Loading Bash profile..."
source ~/.bash_profile
echo "Activating terminal hook..."
source ".pycharm/term-activate"
source activate $PYCHARM_VENV
fi
Si está utilizando algo distinto de Bash, invoque su propio equivalente .bash_profile
si lo desea.
Ahora configure su PyCharm "Herramientas -> Terminal -> Ruta del Shell" para invocar este script, por ejemplo: /bin/bash --rcfile ~/.pycharmrc
Finalmente, para cada proyecto de PyCharm necesita que se active un entorno virtual específico, cree un archivo dentro del proyecto raíz PyCharm .pycharm/term-activate
. Este es su gancho y simplemente definirá el nombre del entorno virtual deseado para su proyecto PyCharm:
export PYCHARM_VENV=<your-virtual-env-name>
Por supuesto, puede ampliar sus ganchos con cualquier cosa que encuentre útil en el entorno de la terminal de su proyecto particular de PyCharm.
Gracias Chris, tu script funcionó para algunos proyectos, pero no todos en mi máquina. Aquí hay un script que escribí y espero que alguien lo encuentre útil.
#Stored in ~/.pycharmrc
ACTIVATERC=$(python -c ''import re
import os
from glob import glob
try:
#sets Current Working Directory to _the_projects .idea folder
os.chdir(os.getcwd()+"/.idea")
#gets every file in the cwd and sets _the_projects iml file
for file in glob("*"):
if re.match("(.*).iml", file):
project_iml_file = file
#gets _the_virtual_env for _the_project
for line in open(project_iml_file):
env_name = re.findall("~/(.*)/" jdkType", line.strip())
# created or changed a virtual_env after project creation? this will be true
if env_name:
print env_name[0] + "/bin/activate"
break
inherited = re.findall("type=/"inheritedJdk/"", line.strip())
# set a virtual_env during project creation? this will be true
if inherited:
break
# find _the_virtual_env in misc.xml
if inherited:
for line in open("misc.xml").readlines():
env_at_project_creation = re.findall("/~/(.*)/" project-jdk", line.strip())
if env_at_project_creation:
print env_at_project_creation[0] + "/bin/activate"
break
finally:
pass
'')
if [ "$ACTIVATERC" ] ; then . "$HOME/$ACTIVATERC" ; fi
Otra alternativa es usar virtualenvwrapper para administrar sus entornos virtuales. Parece que una vez que el script virtualenvwrapper está activado , pycharm puede usarlo y luego el comando simple workon
estará disponible desde la consola de pycharm y le presentará los entornos virtuales disponibles:
kevin@debian:~/Development/django-tutorial$ workon
django-tutorial
FlaskHF
SQLAlchemy
themarkdownapp
kevin@debian:~/Development/django-tutorial$ workon django-tutorial
(django-tutorial)kevin@debian:~/Development/django-tutorial$
Para los entornos virtuales conda en Windows, asegúrese de que su archivo por lotes NO se llame activate.bat
ya que esto provocará un conflicto con el comando conda activate
, lo que provocará una llamada recursiva del archivo por lotes.
Lo que funciona para mí es la siguiente ruta de Shell:
"cmd.exe" /k ""C:/FullPathToYourProject/activate-env.bat""
Y en el archivo activate-env.bat:
call activate myenvname
Para los usuarios de Windows cuando usan PyCharm y un entorno virtual en Windows, puede usar el parámetro / k en cmd.exe para configurar el entorno virtual automáticamente.
Vaya a Configuración, Terminal, Shell predeterminado y agregue /K <path-to-your-activate.bat>
.
No tengo la reputación de comentar sobre la respuesta anterior, por lo que publicamos esta versión corregida. Esto realmente ahorra MUCHO tiempo.
Para usuarios de Windows: al usar PyCharm con un entorno virtual, puede usar el parámetro /K
a cmd.exe
para configurar el entorno virtual automáticamente.
PyCharm 3 o 4: Settings
, Terminal
, Default shell
y add /K <path-to-your-activate.bat>
.
PyCharm 5: Settings
, Tools
, Terminal
y agrega /K <path-to-your-activate.bat>
a la Shell path
.
PyCharm 2016.1 o 2016.2: Settings
, Tools
, Terminal
, y agregue ""/K <path-to-your-activate.bat>""
a la Shell path
y añada ( ""/K <path-to-your-activate.bat>""
cuenta las comillas). También agregue comillas alrededor de cmd.exe, lo que da como resultado:
"cmd.exe" /k ""C:/mypath/my-venv/Scripts/activate.bat""
PyCharm 4 ahora tiene virtualenvs integrados en el IDE. Al seleccionar su intérprete de proyecto, puede crear, agregar o seleccionar un virtualenv. Han agregado una "Consola de Python" que se ejecuta en el intérprete de proyectos configurado.
PyCharm 4.5.4
Cree un archivo .pycharmrc en su carpeta de inicio con los siguientes contenidos
source ~/.bashrc source ~/pycharmvenv/bin/activate
Usando tu ruta virtualenv como el último parámetro.
A continuación, configure las Preferencias del shell-> Configuración del proyecto-> Ruta del shell para
/bin/bash --rcfile ~/.pycharmrc
No sé por qué, pero no funciona para mí. PyCharm imprime un error.
cmd.exe /K "<path-to-your-activate.bat>"
Funciona, pero crea el mismo virtualenv para cada proyecto, e incluso si esto no es necesario.
¡Este receipt está funcionando! ¡Pero la cadena /env_yourenvlocate/scripts/activate.bat
debe contener comillas, como esta "Full_path_to_your_env_locate/scripts/activate.bat"
!
Desactivar el virtualenv es muy fácil - escriba en el terminal ''desactivar''
(virt_env) D:/Projects/src>deactivate
D:/Projects/src>
Quería un entorno virtual separado para cada proyecto, y no me importó mucho tener archivos adicionales para facilitar esto. Una solución que solo necesita hacer una vez y que funciona para todos los proyectos es agregar lo siguiente a su .bashrc
o .bash_profile
:
if [ -d "./venv" ]; then
source ./venv/bin/activate
fi
Esto verifica si hay un entorno virtual donde se está abriendo el terminal y, si es así, lo activa (y, por supuesto, se podrían usar otras rutas relativas). La configuración de la terminal de PyCharm puede dejarse como predeterminada.
Si está utilizando la versión de Windows, es bastante fácil. Si ya tiene el entorno virtual solo navegue a su carpeta, busque activate.bat
dentro de la carpeta Scripts
. copia su ruta completa y pégala en el terminal de pycharm, luego presiona Enter
y ¡listo!
Si necesita crear un nuevo entorno virtual:
Vaya a archivos> configuraciones y luego busque el project interpreter
, ábralo, haga clic en el botón de engranaje y cree el entorno donde desee y luego siga el primer párrafo.
Si su Pycharm 2016.1.4v y superior debe usar "default path" /K "<path-to-your-activate.bat>"
no se olvide de las comillas
Siguiendo la respuesta de Peter, aquí la versión Mac del archivo .pycharmrc
:
source /etc/profile
source ~/.bash_profile
source <venv_dir>/bin/activate
Gallina
Tengo una solución que funcionaba en mi máquina con Windows 7.
Creo que el terminal de PyCharm es el resultado de ejecutar cmd.exe
, que cargará la variable de PATH
Windows y utilizará la versión de Python que encuentre primero dentro de esa PATH
. Para editar esta variable, haga clic con el botón derecho en Mi PC -> Propiedades -> Configuración avanzada del sistema -> pestaña Avanzado -> Variables del entorno ... botón. Dentro de la sección de variables del sistema , seleccione y edite la variable PATH
.
Aquí está la parte relevante de mi PATH
antes de editar:
C: / Python27 /;
C: / Python27 / Lib / site-packages / pip /;
C: / Python27 / Scripts;
C: / Python27 / Lib / site-packages / django / bin;
... y después de editar PATH
(solo 3 líneas ahora):
C: [project_path] / virtualenv-Py2.7_Dj1.7 / Lib / site-packages / pip;
C: [project_path] / virtualenvs / virtualenv-Py2.7_Dj1.7 / Scripts;
C: [ruta del proyecto] / virtualenvs / virtualenv-Py2.7_Dj1.7 / Lib / site-packages / django / bin;
Para probar esto, abra una nueva terminal de Windows ( Inicio -> escriba cmd
y presione Enter ) y vea si está usando su entorno virtual. Si eso funciona, reinicie PyCharm y luego pruébelo en la terminal de PyCharm.
esto es lo que estoy haciendo: crea un archivo activate_env.bat (windows, maybe .sh in linux) en el archivo de código fuente:
/env_yourenvlocate/scripts/activate.bat
y otro archivo deactivate_env.bat:
/env_yourenvlocate/scripts/deactivate.bat
cada vez que abra la ventana del terminal, simplemente ejecute el archivo bat para activar / desactivar el virtualenv, se mantendrá en la ruta del código fuente, sin necesidad de cambiar la ruta hacia y desde atrás.
E:/Projects/django_study/src>active_env.bat
E:/Projects/django_study/src>../env_django_study/scripts/activate.bat
(env_django_study) E:/Projects/django_study/src>
(env_django_study) E:/Projects/django_study/src>deactive_env.bat
(env_django_study)E:/Projects/django_study/src>../env_django_study/scripts/deactivate.bat
E:/Projects/django_study/src>
Editar:
Según https://www.jetbrains.com/pycharm/whatsnew/#v2016-3-venv-in-terminal , PyCharm 2016.3 (lanzado en noviembre de 2016) tiene soporte virutalenv para terminales listos para usar
Método antiguo:Auto virtualenv es compatible con bash, zsh, fish y Windows cmd. Puede personalizar su preferencia de shell en Configuración (Preferencias) | Herramientas | Terminal.
Cree un archivo .pycharmrc
en su carpeta de inicio con los siguientes contenidos
source ~/.bashrc
source ~/pycharmvenv/bin/activate
Usando tu ruta virtualenv como el último parámetro.
A continuación, configure las Preferencias del shell-> Configuración del proyecto-> Ruta del shell para
/bin/bash --rcfile ~/.pycharmrc
Solución para WSL (Ubuntu en Windows)
Si está utilizando WSL (Ubuntu en Windows), también puede abrir bash como terminal en pycharm y activar un linux virtualenv.
Use un archivo .pycharmrc
como se describe en la respuesta de Peter Gibson; Agregue el archivo .pycharmrc
a su directorio principal con el siguiente contenido:
source ~/.bashrc
source ~/path_to_virtualenv/bin/activate
En Pycharm File> Settings> Tools> Terminal agrega la siguiente ''Shell path'':
"C:/Windows/system32/bash.exe" -c "bash --rcfile ~/.pycharmrc"
Proyecto específico virtualenv
El camino a tu virtualenv en .pycharmrc
no tiene que ser absoluto. Puede establecer un virtualenv específico del proyecto estableciendo una ruta relativa desde su directorio de proyecto. Mi virtualenv siempre se encuentra en una carpeta ''venv'' en el directorio de mi proyecto, por lo que mi archivo .pycharmrc
ve así:
source ~/.bashrc
source ~/pycharmvenv/bin/activate #absolute path
source ./venv/bin/activate #relative path
BONUS: abre automáticamente el túnel ssh para conectar virtualenv como intérprete del proyecto
Agregue lo siguiente a su archivo .pycharmrc
:
if [ $(ps -aux | grep -c ''ssh'') -lt 2 ]; then
sudo service ssh start
fi
Esto comprueba si un túnel ssh ya está abierto, y abre uno de lo contrario. En Archivo -> Configuración -> Proyecto -> Proyecto de intérprete en Pycharm, agregue un nuevo intérprete remoto con la siguiente configuración:
+--------------------------+---------------------------------+-------+----+ | Name: | <Interpreter name> | | | | Select | ''SSH Credentials'' | | | | Host: | 127.0.0.1 | Port: | 22 | | User: | <Linux username> | | | | Auth type: | ''Password'' | | | | Password: | <Linux password> | | | | Python interpreter path: | <Linux path to your virtualenv> | | | | Python helpers path: | <Set automatically> | | | +--------------------------+---------------------------------+-------+----+
Ahora cuando abres tu proyecto, tu bash comienza automáticamente en tu virtualenv, abre un túnel ssh y pycharm conecta el virtualenv como intérprete remoto.
advertencia: la última actualización en Windows inicia automáticamente un servicio SshBroker y SshProxy al inicio. Estos bloquean el túnel ssh de Linux a Windows. Puede detener estos servicios en el Administrador de tareas -> Servicios, después de lo cual todo volverá a funcionar.