如何激活PyCharmterminal内的virtualenv?

我已经build立了PyCharm,创build了我的virtualenv(通过虚拟env命令,或直接在PyCharm中),并激活该环境作为我的解释器。 一切正常。

但是,如果我使用“工具,打开terminal”打开terminal,则提供的shell提示符不会使用虚拟env; 我仍然需要在该terminal中使用source ~/envs/someenv/bin/activate来激活它。

另一种方法是在shell中激活环境,并从该环境运行PyCharm。 这是“可行的”,但相当丑陋,而且意味着如果从PyCharm切换环境或项目,我会遇到大问题:我现在正在使用完全错误的环境。

有没有其他的,更简单的方法有“工具,打开terminal”自动激活虚拟环境?

编辑:

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

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


旧方法:

用以下内容在您的主文件夹中创build一个.pycharmrc文件

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

使用你的virtualenvpath作为最后一个参数。

然后将shell的Preferences-> Project Settings-> Shellpath设置为

 /bin/bash --rcfile ~/.pycharmrc 

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

进入设置,terminal,默认shell并添加/K <path-to-your-activate.bat>

我没有评论早期的回应,所以发布这个更正的版本的声誉。 这确实节省了很多时间。

对于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""

根据彼得和实验的回答,我提出了一个很好的“通用解决scheme”,它解决了以下问题:

  • 恢复loginshell的行为。 PyCharm通常运行一个loginshell,但是–rcfile停止了这种情况的发生。 脚本仍然使用–rcfile,但尝试模拟loginshell的INVOCATION行为。
  • 不需要为每个环境创build一个rc文件
  • 如果更改环境,则不需要更新项目设置。

把这个脚本放到某个bin目录下。 例如〜/ 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的Shellpath设置为:

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

感谢克里斯,你的脚本为一些项目工作,但不是在我的机器上。 这是我写的一个脚本,我希望任何人都觉得它有用。

 #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 

PyCharm 4现在在IDE中集成了virtualenvs。 select项目解释器时,可以创build,添加或select一个virtualenv。 他们添加了一个在configuration的项目解释器中运行的“Python控制台”。

更多信息在这里。

我刚刚添加了一个名为pycharmactivate的脚本到我的主目录。 设置PyCharm的值(4.0.1)文件>设置>工具>terminal> shellpath到/ bin / bash –rcfile〜/ pycharmactivate。 也许不是最好的解决scheme,因为你有不同的项目和virtualenv目录/名称,但它适用于我。 该脚本包含以下3行,并假定您的virtualenv与您的项目目录具有相同的名称。

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

我有一个在我的Windows 7机器上工作的解决scheme。

我相信PyCharm的terminal是运行cmd.exe的结果,它将加载Windows PATHvariables,并使用它在PATHfind的第一个Python版本。 要编辑此variables,请右键单击我的电脑 – > 属性 – > 高级系统设置 – > 高级选项卡 – > 环境variables…button。 在System variables部分中,select并编辑PATHvariables。

这是编辑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;

要testing这个,打开一个新的 Windowsterminal( 开始 – >在cmd input并按Enter键 ),看看它是否使用你的虚拟环境。 如果可行重新启动PyCharm ,然后在PyCharm的terminal进行testing。

继续Peter的回答,这里的.pycharmrc文件的Mac版本:

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

母鸡

如果你正在使用Windows版本,这是很容易的。 如果您已经拥有虚拟环境,请导航到其文件夹,在Scripts文件夹中findactivate.bat 。 复制它的完整path,并将其粘贴到pycharm的terminal,然后按Enter ,你就完成了!

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

进入文件>设置,然后searchproject interpreter ,打开它,点击齿轮button,创build任何你想要的环境,然后按照第一段。

齿轮!

另一种select是使用virtualenvwrapper来pipe理你的虚拟环境。 看来,一旦激活了virtualenvwrapper 脚本 ,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$ 

这就是我正在做的:在源代码folde中创build一个activate_env.bat(windows,也许.sh在linux中)文件:

 /env_yourenvlocate/scripts/activate.bat 

和另一个文件deactivate_env.bat:

 /env_yourenvlocate/scripts/deactivate.bat 

每次打开terminal窗口,只需执行bat文件来激活/closuresvirtualenv,您将停留在源代码path中,不需要更改path。

 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> 

这个方法应该适用于每个项目的任意虚拟环境,并且不会对你的环境做出假设,因为它使用你创build的钩子。

你写:

  • 调用钩子的全局脚本
  • 每个PyCharm项目的钩子脚本(不是必须的)

鉴于当前最新的PyCharm(社区2016.1)不允许每个项目的terminal设置从调用项目特定钩子的脚本开始。 这是我的~/.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“工具 – >terminal – > Shellpath”来调用这个脚本,例如: /bin/bash --rcfile ~/.pycharmrc

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

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

你当然可以用你在特定的PyCharm项目的terminal环境中发现的任何东西来扩展你的钩子。

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

对于Windows上的conda虚拟环境,请确保您的batch file未命名为activate.bat因为这会导致与conda activate命令发生冲突,从而导致batch file的recursion调用。

什么适用于我的是以下Shellpath:

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

在activate-env.bat文件中:

 call activate myenvname 

我想为每个项目分别创build一个虚拟环境,并且不需要额外的文件来实现这个function。 一个解决scheme,你只需要做一次,为所有项目工作,然后将以下内容添加到您的.bashrc.bash_profile

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

这将检查是否存在打开terminal的虚拟环境,如果是,则激活它(当然也可以使用其他相关path)。 PyCharm的terminal设置可以保留为默认值。

PyCharm 4.5.4

用以下内容在您的主文件夹中创build一个.pycharmrc文件

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

使用你的virtualenvpath作为最后一个参数。

然后将shell的Preferences-> Project Settings-> Shellpath设置为

 /bin/bash --rcfile ~/.pycharmrc 

我不是为什么,但这对我不起作用。 PyCharm打印一个错误。

cmd.exe /K "<path-to-your-activate.bat>"它工作,但它为每个项目创build相同的virtualenv,即使这不是必要的。

这张收据正在工作! 但string/env_yourenvlocate/scripts/activate.bat必须包含引号,就像这个"Full_path_to_your_env_locate\scripts\activate.bat"

取消激活virtualenv非常简单 – 在terminalinput'deactivate'

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

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

图片