我已经设置了PyCharm,创建了我的virtualenv(通过虚拟env命令,或者直接在PyCharm中),并将该环境激活为我的Interpreter.一切都很好.
但是,如果我使用"工具,打开终端"打开终端,提供的shell提示符不使用虚拟环境; 我仍然必须source ~/envs/someenv/bin/activate
在该终端内使用它来激活它.
另一种方法是激活shell中的环境,并从该环境运行PyCharm.这是"可行的",但非常难看,如果我从PyCharm切换环境或项目,我就会遇到重大问题:我现在正在使用完全错误的环境.
是否有其他更简单的方法让"工具,开放式终端"自动激活虚拟环境?
编辑:
根据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-> Project Settings-> Shell path设置为
/bin/bash --rcfile ~/.pycharmrc
对于Windows用户:将PyCharm与虚拟环境一起使用时,可以使用该/K
参数cmd.exe
自动设置虚拟环境.
PyCharm 3或4: ,,Settings
和添加.Terminal
Default shell
/K <path-to-your-activate.bat>
PyCharm 5: ,Settings
,Tools
,Terminal
并添加/K <path-to-your-activate.bat>
到Shell path
.
PyCharm 2016.1或2016.2: ,Settings
,Tools
,Terminal
并添加""/K <path-to-your-activate.bat>""
到Shell path
,并添加(介意引号).还要在cmd.exe周围添加引号,结果是:
"cmd.exe" /k ""C:\mypath\my-venv\Scripts\activate.bat""
对于Windows用户在Windows下使用PyCharm和虚拟环境时,可以使用cmd.exe中的/ k参数自动设置虚拟环境.
转到设置,终端,默认shell并添加/K <path-to-your-activate.bat>
.
我没有声誉对先前的回复发表评论,因此发布了此更正版本.这确实节省了很多时间.
更新:
注意:Pycharm现在直接支持虚拟环境,它似乎对我有用 - 所以我的解决方法不再需要了.
PyCharm 4现在已经在IDE中集成了virtualenvs.选择项目解释器时,您可以创建,添加或选择virtualenv.他们添加了一个在配置的项目解释器中运行的"Python控制台".
更多信息在这里.
谢谢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
基于彼得的答案和实验,我提出了一个很好的"通用解决方案",它解决了以下问题:
恢复登录shell的行为.PyCharm通常运行一个登录shell,但是--rcfile阻止了这种情况发生.脚本仍使用--rcfile,但尝试模拟登录shell的INVOCATION行为.
无需为每个环境创建rcfile
如果更改环境,则无需更新项目设置.
将此脚本放入某个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的Shell路径设置为:
/bin/bash --rcfile ~/bin/pycharmactivate