如何激活PyCharm终端内的virtualenv?

问题描述 投票:92回答:21

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

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

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

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

python django shell virtualenv pycharm
21个回答
87
投票

编辑:

根据qazxsw poi的说法,PyCharm 2016。3(2016年11月发布)对开箱即用的终端提供了支持

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


Old Method:

使用以下内容在主文件夹中创建文件https://www.jetbrains.com/pycharm/whatsnew/#v2016-3-venv-in-terminal

.pycharmrc

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

然后将shell Preferences-> Project Settings-> Shell path设置为

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

2
投票

跟进Peter的回答,这里是source ~/.bashrc projectdir=${PWD##*/} source ~/.virtualenvs/$projectdir/bin/activate 文件的Mac版本:

.pycharmrc

hen


2
投票

我已经查看了上面的所有答案,但没有一个对我来说足够优雅。在Pycharm 2017.1.3(在我的电脑中),最简单的方法是打开source /etc/profile source ~/.bash_profile source <venv_dir>/bin/activate 并检查Settings->Tools->TerminalShell integration选项。

Activate virtualenv


1
投票

我有一个适用于我的Windows 7机器的解决方案。

我相信PyCharm的终端是运行image的结果,它将加载Windows cmd.exe变量,并使用它在PATH中首先找到的Python版本。要编辑此变量,请右键单击我的电脑 - >属性 - >高级系统设置 - >高级选项卡 - >环境变量...按钮。在“系统变量”部分中,选择并编辑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终端(开始 - >在PATH中输入并按Enter键),看看它是否正在使用您的虚拟环境。如果可行,请重新启动PyCharm,然后在PyCharm的终端中测试它。


1
投票

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

cmd

和另一个文件deactivate_env.bat:

/env_yourenvlocate/scripts/activate.bat

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

/env_yourenvlocate/scripts/deactivate.bat

1
投票

如果你的Pycharm 2016.1.4v及更高版本你应该使用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> 不要忘记引号


0
投票

另一种方法是使用"default path" /K "<path-to-your-activate.bat>"来管理您的虚拟环境。看来,一旦virtualenvwrapper virtualenvwrapper,pycharm可以使用它,然后简单的script is activated命令将可以从pycharm控制台获得,并为您提供可用的虚拟环境:

workon

0
投票

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

你写:

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

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

~/.pycharmrc

如果您使用的是Bash以外的其他内容,请根据需要调用自己的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 等效项。

现在设置你的PyCharm“工具 - >终端 - > Shell路径”来调用这个脚本,例如:.bash_profile

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

.pycharm/term-activate

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


0
投票

对于Windows上的conda虚拟环境,请确保您的批处理文件未命名为export PYCHARM_VENV=<your-virtual-env-name> ,因为这将导致与conda activate.bat命令冲突,从而导致批处理文件的递归调用。

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

activate

在activate-env.bat文件中:

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

0
投票

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

.bash_profile

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


0
投票

PyCharm 4.5.4

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

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

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

然后将shell Preferences-> Project Settings-> Shell path设置为

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

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

/bin/bash --rcfile ~/.pycharmrc 它有效,但它为每个项目创建了相同的virtualenv,即使这不是必需的。

cmd.exe /K "<path-to-your-activate.bat>"正在工作!但字符串receipt必须包含引号,像这样/env_yourenvlocate/scripts/activate.bat

停用virtualenv非常容易 - 输入终端'deactivate'

"Full_path_to_your_env_locate\scripts\activate.bat"

38
投票

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

转到设置,终端,默认shell并添加/bin/bash --rcfile ~/.pycharmrc

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

更新:

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


0
投票

WSL解决方案(Windows上的Ubuntu)

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

使用像Peter Gibson的回答中描述的(virt_env) D:\Projects\src>deactivate D:\Projects\src> 文件;将.pycharmrc文件添加到您的主目录,其中包含以下内容:

.pycharmrc

在Pycharm文件>设置>工具>终端中添加以下“Shell路径”:

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

项目特定的virtualenv

你在"C:/Windows/system32/bash.exe" -c "bash --rcfile ~/.pycharmrc" 的virtualenv的路径不一定是绝对的。您可以通过设置项目目录中的相对路径来设置项目特定的virtualenv。我的virtualenv总是位于我的项目目录下的'venv'文件夹中,所以我的.pycharmrc文件如下所示:

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

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

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

.pycharmrc

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

+--------------------------+---------------------------------+-------+----+
| 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隧道。您可以在任务管理器 - >服务中停止这些服务,之后一切都将再次运行。


0
投票

进入终端>运行>调试>编辑配置if [ $(ps -aux | grep -c 'ssh') -lt 2 ]; then sudo service ssh start fi 时有一个选项

enter image description here

选择适当的conda environmnent ..当你创建一个新项目时 - 它要求配置这个位置。


37
投票

对于Windows用户:将PyCharm与虚拟环境一起使用时,可以使用/K <path-to-your-activate.bat>参数/K自动设置虚拟环境。

PyCharm 3或4:cmd.exeSettingsTerminal并添加Default shell

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

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

Shell path


7
投票

基于彼得的答案和实验,我提出了一个很好的“通用解决方案”,它解决了以下问题:

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

将此脚本放入某个bin目录中。例如。 〜/斌/ pycharmactivate

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

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

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

6
投票

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

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

6
投票

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

#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


3
投票

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

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

转到文件>设置然后搜索Enter,打开它,单击齿轮按钮并在任何地方创建环境,然后按照第一段。

project interpreter


3
投票

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


2
投票

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

The Gear!
© www.soinside.com 2019 - 2024. All rights reserved.