如何激活PyCharm终端内的virtualenv?

时间:2014-03-09 21:43:39

标签: python django shell virtualenv pycharm

我已经设置了PyCharm,创建了我的virtualenv(通过虚拟env命令,或直接在PyCharm中)并将该环境激活为我的Interpreter。一切都很好。

但是,如果我使用“工具,打开终端”打开终端,则提供的shell提示符使用虚拟环境;我仍然必须在该终端内使用source ~/envs/someenv/bin/activate来激活它。

另一种方法是在shell中激活环境,并从该环境运行PyCharm。这是“可行的”,但非常难看,如果我从PyCharm切换环境或项目,我就会遇到重大问题:我现在正在使用完全错误的环境。

还有其他一些更简单的方法让“工具,开放式终端”自动激活虚拟环境吗?

25 个答案:

答案 0 :(得分:87)

<强> 编辑:

根据https://www.jetbrains.com/pycharm/whatsnew/#v2016-3-venv-in-terminal,PyCharm 2016。3(2016年11月发布)对开箱即用的终端提供了virutalenv支持

  

bash,zsh,fish和Windows cmd支持Auto virtualenv。您   可以在“设置(首选项)”中自定义您的shell首选项工具   |终端

<小时/> 旧方法:

使用以下内容在主文件夹中创建文件.pycharmrc

source ~/.bashrc
source ~/pycharmvenv/bin/activate

使用您的virtualenv路径作为最后一个参数。

然后将shell Preferences-&gt; Project Settings-&gt; Shell路径设置为

/bin/bash --rcfile ~/.pycharmrc

答案 1 :(得分:38)

对于Windows用户在Windows下使用PyCharm和虚拟环境时,可以使用/ k参数cmd.exe自动设置虚拟环境。

转到设置,终端,默认shell并添加/K <path-to-your-activate.bat>

我没有声誉对先前的回复发表评论,因此发布了此更正版本。这确实节省了很多时间。

<强>更新

注意:Pycharm现在直接支持虚拟环境,它似乎对我有用 - 所以我的解决方法不再需要了。

答案 2 :(得分:37)

对于Windows用户:将PyCharm与虚拟环境一起使用时,可以使用/K参数cmd.exe自动设置虚拟环境。

PyCharm 3或4:SettingsTerminalDefault shell并添加/K <path-to-your-activate.bat>

PyCharm 5:SettingsToolsTerminal,并将/K <path-to-your-activate.bat>添加到Shell path

PyCharm 2016.1或2016.2:SettingsToolsTerminal,并将""/K <path-to-your-activate.bat>""添加到Shell path并添加(注意引号)。还要在cmd.exe周围添加引号,结果是:

"cmd.exe" /k ""C:\mypath\my-venv\Scripts\activate.bat""

答案 3 :(得分:7)

根据彼得的答案和实验,我提出了一个很好的通用解决方案&#34;,它解决了以下问题:

  • 恢复登录shell的行为。 PyCharm通常运行一个登录shell,但是--rcfile阻止了这种情况发生。脚本仍使用--rcfile,但尝试模拟登录shell的INVOCATION行为。
  • 删除了为每个环境创建rcfile的需要
  • 如果更改环境,则无需更新项目设置。

将此脚本放入某个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

然后将PyCharm的Shell路径设置为:

/bin/bash --rcfile ~/bin/pycharmactivate

答案 4 :(得分:6)

谢谢Chris,你的脚本适用于某些项目但不适用于我的机器上。这是我写的脚本,我希望有人发现它很有用。

#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

答案 5 :(得分:6)

PyCharm 4现在已经在IDE中集成了virtualenvs。选择项目解释器时,您可以创建,添加或选择virtualenv。他们已经添加了一个&#34; Python控制台&#34;在配置的项目解释器中运行。

More info here.

答案 6 :(得分:3)

在Mac上,它是 PyCharm =>首选项... =>工具=>终端=>激活virtualenv ,默认情况下应启用该功能。

答案 7 :(得分:3)

如果您使用的是Windows版本,则非常容易。 如果您已经拥有虚拟环境,只需导航到其文件夹,请在activate.bat文件夹中找到Scripts。复制它的完整路径并将其粘贴到pycharm的终端然后按Enter即可完成!

如果您需要创建新的虚拟环境:

转到文件&gt;设置然后搜索project interpreter,打开它,点击齿轮按钮并在任何地方创建环境,然后按照第一段。

The Gear!

答案 8 :(得分:2)

我刚刚在我的主目录中添加了一个名为pycharmactivate的脚本。设置PyCharm(4.0.1)文件的值&gt;设置&gt;工具&gt;终端&gt; Shell路径到/ bin / bash --rcfile~ / pycharmactivate。 也许不是最好的解决方案,因为你有不同的项目和virtualenv目录/名称,但它适用于我。此脚本包含以下3行,并假设您的virtualenv与项目目录具有相同的名称。

source ~/.bashrc
projectdir=${PWD##*/}
source ~/.virtualenvs/$projectdir/bin/activate

答案 9 :(得分:2)

我已经查看了上面的所有答案,但对我来说,这些答案都不够优雅。在Pycharm 2017.1.3(在我的电脑中),最简单的方法是打开Settings->Tools->Terminal并检查Shell integrationActivate virtualenv选项。

image

答案 10 :(得分:2)

跟进彼得的回答, 这里是.pycharmrc文件的Mac版本:

source /etc/profile
source ~/.bash_profile
source  <venv_dir>/bin/activate

答案 11 :(得分:1)

在 Windows 上,如果您已经拥有虚拟环境,例如。 'myvenv' 位于项目根目录中,您可以从终端激活它,如下所示:

.\myvenv\Scripts\activate

从想要激活的 virtualenv 调用 activate 来激活 virtualenv。

当您看到更改时,您就知道它已激活:

C:\Projects\Trunk\MyProject>

(myvenv)C:\Projects\Trunk\MyProject>

答案 12 :(得分:1)

如果你应该使用Pycharm 2016.1.4v及更高版本 "default path" /K "<path-to-your-activate.bat>" 不要忘记引号

答案 13 :(得分:1)

这就是我在做的事情: 在源代码片段中创建一个activate_env.bat(windows,也许是linux中的.sh)文件:

/env_yourenvlocate/scripts/activate.bat

和另一个文件deactivate_env.bat:

/env_yourenvlocate/scripts/deactivate.bat

每次打开终端窗口,只需执行bat文件激活/停用virtualenv,你将保留在源代码路径中,无需改变路径和返回。

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>

答案 14 :(得分:1)

我的解决方案适用于我的Windows 7计算机。

我相信PyCharm的终端是运行cmd.exe的结果,它将加载Windows PATH变量,并使用它在PATH内首先找到的Python版本。要编辑此变量,请右键单击我的电脑 - &gt; 属性 - &gt; 高级系统设置 - &gt; 高级标签 - &gt; 环境变量... 按钮。在系统变量部分中,选择并编辑PATH变量。

以下是我的PATH 之前编辑的相关部分:

  

C:\ Python27 \;
  C:\ Python27 \ LIB \站点包\ PIP \;
  C:\ Python27 \脚本;
  C:\ Python27 \ LIB \站点包\ django的\ BIN;

编辑PATH

... (现在只有3行):

  

C:[project_path] \的virtualenv-Py2.7_Dj1.7 \ LIB \站点包\ PIP;
  C:[project_path] \ virtualenvs \的virtualenv-Py2.7_Dj1.7 \脚本;
  C:[project_path] \ virtualenvs \的virtualenv-Py2.7_Dj1.7 \ LIB \站点包\ django的\ BIN;

要对此进行测试,请打开 Windows终端(开始 - &gt;在cmd中输入并点击 Enter )并查看它是否正在使用您的虚拟环境。如果可行,重新启动PyCharm ,然后在PyCharm的终端中测试它。

答案 15 :(得分:0)

对于Windows上的conda虚拟环境,请确保批处理文件未命名为activate.bat,因为这会导致与conda activate命令冲突,从而导致批处理文件的递归调用。 / p>

对我来说有用的是以下Shell路径:

"cmd.exe" /k ""C:\FullPathToYourProject\activate-env.bat""

在activate-env.bat文件中:

call activate myenvname

答案 16 :(得分:0)

我想为每个项目创建一个单独的虚拟环境,并且没有太多关心是否有其他文件来促进这一点。您只需执行一次并适用于所有项目的解决方案,然后将以下内容添加到.bashrc.bash_profile

if [ -d "./venv" ]; then
    source ./venv/bin/activate
fi

检查是否存在正在打开终端的虚拟环境,如果有,则激活它(当然可以使用其他相对路径)。 PyCharm的终端设置可以保留为默认设置。

答案 17 :(得分:0)

PyCharm 4.5.4

  

使用以下内容在主文件夹中创建文件.pycharmrc   内容

source ~/.bashrc
source ~/pycharmvenv/bin/activate
     

使用您的virtualenv路径作为最后一个参数。

     

然后将shell Preferences-&gt; Project Settings-&gt; Shell路径设置为

/bin/bash --rcfile ~/.pycharmrc

我不知道为什么,但它对我不起作用。 PyCharm打印错误。

cmd.exe /K "<path-to-your-activate.bat>" 它有效,但它为每个项目创建了相同的virtualenv,即使这不是必需的。

receipt正在运作!但字符串/env_yourenvlocate/scripts/activate.bat必须包含引号,例如"Full_path_to_your_env_locate\scripts\activate.bat"

停用virtualenv非常简单 - 在终端输入&#39;停用&#39;

(virt_env) D:\Projects\src>deactivate
D:\Projects\src>

答案 18 :(得分:0)

此方法应适用于每个项目的任意虚拟环境,并且不会对您的环境进行假设,因为它使用您创建的挂钩。

你写道:

  • 调用挂钩的全局脚本
  • 每个PyCharm项目的钩子脚本(非强制性)

鉴于当前最新的PyCharm(Community 2016.1)不允许终端设置每个项目从调用项目特定钩子的脚本开始。这是我的~/.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

如果您使用的是Bash以外的其他内容,请根据需要调用自己的.bash_profile等效内容。

现在设置你的PyCharm“工具 - &gt;终端 - &gt; Shell路径”来调用这个脚本,例如:/bin/bash --rcfile ~/.pycharmrc

最后,对于每个PyCharm项目,您需要激活特定的虚拟环境,在PyCharm项目根目录.pycharm/term-activate中创建一个文件。这是你的钩子,它只是为你的PyCharm项目定义所需的虚拟环境的名称:

export PYCHARM_VENV=<your-virtual-env-name>

当然,您可以使用在特定PyCharm项目的终端环境中有用的任何内容扩展您的钩子。

答案 19 :(得分:0)

WSL解决方案(Windows上的Ubuntu)

如果您正在使用WSL(Windows上的Ubuntu),您还可以在pycharm中打开bash作为终端并激活linux virtualenv。

使用Peter Gibson的答案中描述的.pycharmrc文件;将.pycharmrc文件添加到您的主目录,其中包含以下内容:

source ~/.bashrc
source ~/path_to_virtualenv/bin/activate

在Pycharm 文件&gt;设置&gt;工具&gt;终端添加以下&#39; Shell路径&#39;:

"C:/Windows/system32/bash.exe" -c "bash --rcfile ~/.pycharmrc"


项目特定的virtualenv

.pycharmrc中virtualenv的路径不一定是绝对的。您可以通过设置项目目录中的相对路径来设置项目特定的virtualenv。 我的virtualenv总是位于一个&#39; venv&#39;我的项目目录下的文件夹,所以我的.pycharmrc文件如下所示:

source ~/.bashrc
source ~/pycharmvenv/bin/activate #absolute path
source ./venv/bin/activate #relative path


BONUS:自动打开ssh隧道连接virtualenv作为项目解释器

将以下内容添加到.pycharmrc文件中:

if [ $(ps -aux | grep -c 'ssh') -lt 2 ]; then
    sudo service ssh start 
fi

检查ssh隧道是否已打开,否则打开一个。 在文件 - &gt;设置 - &gt;项目 - &gt; Pycharm中的Project Interpreter ,添加一个具有以下配置的新远程解释器:

+--------------------------+---------------------------------+-------+----+
| 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>             |       |    |
+--------------------------+---------------------------------+-------+----+

现在当你打开你的项目时,你的bash会自动在你的virtualenv中启动,打开一个ssh隧道,而pycharm将virtualenv连接为远程解释器。

警告:Windows中的最后一次更新会在启动时自动启动SshBroker和SshProxy服务。这些阻止了从linux到windows的ssh隧道。您可以在任务管理器中停止这些服务 - &gt;服务,之后一切都会再次运作。

答案 20 :(得分:0)

进入终端时的一个选项&gt; 运行&gt;调试&gt;编辑配置 enter image description here

enter image description here

选择合适的conda environmnent .. 此外,当您创建新项目时 - 它会要求配置此位置。

答案 21 :(得分:0)

另一种方法是使用virtualenvwrapper来管理您的虚拟环境。看来,一旦virtualenvwrapper script is activated,pycharm就可以使用它,然后可以从pycharm控制台获得简单的workon命令,并向您展示可用的虚拟环境:

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$ 

答案 22 :(得分:0)

如果已将项目移动到另一个目录,则可以通过“设置”对话框设置新路径。然后,您需要在“编辑配置”对话框中设置此项目解释器。

enter image description here

enter image description here

答案 23 :(得分:0)

我在PyCharm中使用 venv 遇到了同样的问题。但这不是大问题! 只要做:

  1. 输入您的终端venv目录( cd venv / Scripts /
  2. 您将看到 activate.bat
  3. 只需在终端中输入activate.bat,您就会看到您的(venv)

答案 24 :(得分:-2)