如何激活 PyCharm 终端里的虚拟连接?

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

但是,如果我使用“ Tools,Open Terminal”打开一个终端,提供的 shell 提示是使用虚拟 env 的 没有; 我仍然必须在该终端中使用 source ~/envs/someenv/bin/activate来激活它。

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

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

267071 次浏览

编辑:

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

Bash、 zsh、 fish 和 Windowscmd 都支持自动虚拟机 可以在设置(首选项) | 工具中自定义 shell 首选项 | 终端 | 检查激活 virtaulenv

您还需要确保在项目结构的内容根文件夹中包含虚拟环境路径的路径。如果您的环境不包含在项目目录中,可以转到设置(首选项) | 项目 | 项目结构 | 。


老方法:

在您的主文件夹中创建一个包含以下内容的文件 .pycharmrc

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

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

然后将 Shell 首选项-> 项目设置-> Shell 路径设置为

/bin/bash --rcfile ~/.pycharmrc

基于 Peter 的回答和实验,我想出了一个不错的“通用解决方案”,它解决了以下问题:

  • 还原登录 shell 的行为。PyCharm 通常运行一个登录 shell,但是—— rcfile 阻止了这种情况的发生。Script 仍然使用—— rcfile,但是尝试模拟登录 shell 的 INVOCATION 行为。
  • 不需要为每个环境创建 rcfile
  • 如果更改环境,则不需要更新项目设置。

将这个脚本放到某个 bin 目录中

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

更新:

设置(首选项) | 工具 | 终端中的首选项是全局的。
如果对每个项目使用 venv,请记住使用当前路径变量和默认的 venv 名称:

"cmd.exe" /k ""%CD%\venv\Scripts\activate""

对于 Windows 用户: 在虚拟环境中使用 PyCharm 时,可以使用 /K参数来自动设置虚拟环境。

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

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

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

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

更新:

注意: Pycharm 现在直接支持虚拟环境,它似乎对我很有用——所以我的工作区不再需要了。

谢谢克里斯,你的脚本为一些项目工作,但不是所有在我的机器。这是我写的一个脚本,我希望大家会觉得它很有用。

#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

我有一个解决方案,工作在我的 Windows 7机器。

我相信 PyCharm 的终端是它运行 cmd.exe的结果,cmd.exe将加载 Windows PATH变量,并使用它在 PATH中首先找到的 Python 版本。要编辑这个变量,右键单击 我的电脑—— > 物业—— > 高级系统设置—— > 高级 tab —— > 环境变量..。按钮。在 系统变量部分中,选择并编辑 PATH变量。

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

C: Python 27;
C: Python 27 Lib 站点-包 pip;
C: Python 27脚本;
C: Python 27 Lib 站点-包 django bin;

... 和 之后编辑 PATH(现在只有3行) :

C: [ project _ path ] viralenv-Py2.7 _ Dj1.7 Lib site-package pip;
C: [ project _ path ] viralenvs viralenv-Py2.7 _ Dj1.7脚本;
C: [ project _ path ] viralenv-Py2.7 _ Dj1.7 Lib 站点-包 django bin;

要测试这一点,打开一个 新的 Windows 终端(在 cmd中键入 开始—— > ,然后点击 Enter) ,看看它是否正在使用您的虚拟环境。如果成功,重启魅惑术然后在 PyCharm 的终端上进行测试。

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

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

另一种选择是使用 虚拟包装器来管理虚拟环境。似乎一旦执行了 viralenvwrapper 脚本已激活,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$

PyCharm4现在已经在 IDE 中集成了 Virtual alenvs。当选择您的项目解释器时,您可以创建、添加或选择 Virtual alenv。他们添加了一个“ Python 控制台”,该控制台运行在已配置的项目解释器中。

更多信息请点击这里。

这就是我正在做的: 在源代码文件夹中创建一个 active _ env.bat (在 linux 中可能是 windows,也可能是.sh)文件:

/env_yourenvlocate/scripts/activate.bat

以及另一个文件 deactive _ env. bat:

/env_yourenvlocate/scripts/deactivate.bat

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

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>

这个方法应该可以处理每个项目的任意虚拟环境,并且它不会对您的环境做出假设,因为它使用的是您创建的钩子。

你写道:

  • 调用钩子的全局脚本
  • 每个 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“ Tools-> Terminal-> Shell Path”来调用这个脚本,例如: /bin/bash --rcfile ~/.pycharmrc

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

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

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

根据彼得的回答, 下面是 Mac 版本的 .pycharmrc文件:

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

母鸡

如果你的魅力2016.1.4 v 或更高,你应该使用 "default path" /K "<path-to-your-activate.bat>" 别忘了引用

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

对我有效的是下面的 Shell 路径:

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

在 active-env.bat 文件中:

call activate myenvname

我希望每个项目都有一个单独的虚拟环境,并且不太关心是否需要额外的文件来实现这一点。一个解决方案,你只需要做一次,工程的所有项目,然后添加以下到您的 .bashrc.bash_profile:

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

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

PyCharm 4.5.4

在您的主文件夹中创建一个.pycharmrc 文件,其中包含以下内容 内容

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

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

然后将 Shell 首选项-> 项目设置-> Shell 路径设置为

/bin/bash --rcfile ~/.pycharmrc

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

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

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

“停用”是非常容易的虚拟类型在终端’停用’

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

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

image

如果您使用的是 Windows 版本,这是相当容易的。 如果您已经有了虚拟环境,只需导航到它的文件夹,在 Scripts文件夹中找到 activate.bat。复制它的 满了路径,并粘贴到 Pycharm 的终端,然后按 Enter,你就完成了!

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

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

The Gear!

WSL 解决方案(Windows 上的 Ubuntu)

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

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

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

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

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


特定于项目的 viralenv

.pycharmrc中到你的 Virtual alenv 的路径不一定是绝对的。可以通过设置项目目录中的相对路径来设置特定于项目的 viralenv。 我的 viralenv 总是位于我的项目目录下的“ venv”文件夹中,所以我的 .pycharmrc文件看起来像这样:

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


额外的好处: 自动打开 ssh 隧道以连接 Virtual alenv 作为项目解释器

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

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

这将检查 ssh 通道是否已经打开,并以其他方式打开一个 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 将自动在 viralenv 中启动,打开一个 ssh 通道,pycharm 将 viralenv 作为远程解释器连接起来。

警告: Windows 中的最后一次更新在启动时自动启动 SshBroker 和 SshProxy 服务。这些阻塞了从 linux 到 windows 的 ssh 通道。您可以在任务管理器-> 服务中停止这些服务,之后一切都将恢复正常。

当您进入终端 > 时有一个选项 运行 > 调试 > 编辑配置 enter image description here

enter image description here

选择适当的 Conda 环境。 此外,当您创建一个新的项目-它要求配置这个位置。

在 Mac 上是 PyCharm = > Preferences... = > Tools = > Terminal = > Activate viralenv,默认情况下应该启用它。

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

enter image description here

enter image description here

我在 PyCharm 中的 来吧也有同样的问题,但这不是什么大问题! 只要做:

  1. 在终端 venv 目录(Cd venv/Scripts/)中输入
  2. 你会看到 激活,蝙蝠
  3. 只要在你的终端中输入 activate.bat,你就会看到你的(venv)

在 Windows 上,如果你已经在项目根目录中设置了虚拟环境,比如“ myvenv”,你可以从终端激活它,如下所示:

.\myvenv\Scripts\activate

从您希望激活的 viralenv 调用激活,激活 viralenv。

你知道当你看到变化时它是被激活的:

C:\Projects\Trunk\MyProject>

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

我也遇到过类似的问题,在魅惑终端(咒语版本2021.2.2)中没有激活 venv。

进入“设置-> 工具-> 终端”,然后在该窗口的底部检查“激活 viralenv”是否有一个勾选,如果没有,然后确保该框勾选。

然后在这个窗口的中间部分检查 shell 路径是否设置为“ cmd.exe”,如果没有,那么设置为“ cmd.exe”(它将有它的路径相关联,所以不需要做任何事情只需要从下拉列表中点击“ cmd.exe”) ,然后点击下面的“应用”按钮并点击“确定”。

现在完成了,只需关闭打开的终端并重新打开它。您将在项目路径的前面看到“ venv”。

附注: 不要介意我的回答中的双引号,它们只是用来突出文本的,仅此而已。

不知怎么的,一个小把戏对我起作用了。你要做的就是把默认终端从 Power Shell 改成 CMD。

  1. 打开 pycharm —— > 进入设置—— > 工具—— > 终端
  2. Shell PathPS改为 C:\Windows\system32\cmd.exe
  3. 选中 Activate virtualenv复选框
  4. apply键,打开新的终端

现在是2021年,你不需要指定文件路径或添加环境变量。

更新: 现在是2022年,我遇到了同样的问题 修复: 按照上面的步骤,另外,确保已经选择了 < strong > Your Virtual env python.exe 作为项目 python 解释器,就是这样

简单易用的解决方案:

  1. 在 Pycharm,在左边的“项目”菜单中会有一些文件夹。
  2. 找到 Scripts 文件夹
  3. 里面有 activate.bat
  4. 右键单击 activate.bat
  5. 复制/路径引用
  6. 选择绝对路径
  7. 找到位于 Pycharm 底部中间的终端选项卡。
  8. 粘贴到终端控制台,然后按回车键
  9. 如果方法正确,终端路径将在您激活的文件夹的名称周围加上方括号(venv)。
  10. 之前: “ PS C:”
  11. 之后: “(venv) C:”
  12. 注意 文件夹名称可能与您的不同重要的部分是(括号) : D

遇到了同样的问题,我是这样解决的:

你要做的就是把默认终端从 Power Shell 改成 CMD。 打开 pycharm —— > 进入设置—— > 工具—— > 终端。 将 Shell 路径从 PS 更改为 C: Windows system32 cmd.exe。 选中 Activateviralenv 复选框。 点击应用程序并打开新的终端。

enter image description here 如您所见,python 解释器位于 venv/bin/python 中。如果进入这个文件夹,您将看到其中列出的所有库 enter image description here 所以... 正如您所想的那样,您可以将 python 命令与它的路径一起使用-例如,这意味着在项目路径中

./venv/bin/pytest

如果你在 wsl2中使用 windows,唯一对我有效的方法(2022年11月)是:

  1. 进入魅力终端定义
  2. 粘贴:

wsl.exe -- bash --rcfile <(echo '. ~/.bashrc; source <path-to-your-virtial-env>/bin/activate')

在「壳程式路径」方块内。

然后,每次您打开终端的虚拟环境将被激活。

enter image description here