ChatGPT解决这个技术问题 Extra ChatGPT

如何在 PyCharm 的终端中激活 virtualenv?

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

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

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

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

## 很简单,重新启动 PyCharm 以在 PyCharm 终端中查看 virtualenv。

D
Dr. Who

编辑:

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

bash、zsh、fish 和 Windows cmd 支持自动 virtualenv。您可以在 Settings (Preferences) | 中自定义您的 shell 首选项。工具 |终端 |检查激活virtaulenv

您还需要确保将虚拟环境路径的路径包含在项目结构的内容根文件夹中。你可以去设置(偏好)|项目 |项目结构 |如果您的环境不包含在项目目录中。

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

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

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

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

/bin/bash --rcfile ~/.pycharmrc

谢谢!我没想过要覆盖 shell 的 rc 文件。为了更好地支持 pycharm 与多个项目一起工作,每个项目可能有不同的 virtualenv,我将“.pycharmrc”文件称为不同的东西,也许将它放入 env 目录本身。 ~/pycharmenv/bin/terminalactivate 听起来是个不错的选择。
@PeterGibson,pferate 的回答与 OP 的问题无关。问题是终端而不是 Python 解释器。 venv 集成在 PyCharm 4 之前就已经存在。不过,您的答案有效。
@norbertpy 我没有测试过,所以感谢更新
这是最简单的解决方案,除了我将 .pycharmrc 放在项目主文件夹中,这样我就可以为每个项目拥有不同的文件。在正确配置的项目中,无需提供 .pycharmrc 文件的绝对路径。
@SiminJie,PyCharm 2016.3.2 有这样的选项。转到:设置 -> 工具 -> 终端。并确保启用了“激活 virtualenv”选项。
G
Gabriel

更新:

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

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

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


在这种情况下,%CD% 是当前工作目录,请参阅 Windows shell command to get the full path to the current directory?
您在 bat 地址周围使用双双引号是否有原因?
@Nick 我不记得了,这是 8 年前的 :-) 同时另一个答案更相关(自 2016.03 版本以来)。我所知道的是它可以使用双双引号,我不记得用单双引号测试过它。
佚名

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

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

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

更新:

注意:Pycharm 现在直接支持虚拟环境,它似乎对我来说效果很好——所以我的解决方法不再需要了。


这很棒,但只有当您的所有项目都只有一个 virtualenv 时。默认 shell 设置在项目之间共享
A
Aditya Rajgor

不知何故,一个小技巧对我有用。您所要做的就是将默认终端从 Power shell 更改为 CMD。

打开 pycharm --> 转到设置 --> 工具 --> 终端 从 PS 将 Shell 路径更改为 C:\Windows\system32\cmd.exe 检查激活 virtualenv 复选框 点击应用并打开新终端

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

更新:现在是 2022 年,我遇到了同样的问题 修复:按照上述步骤,此外,请确保您已选择 Your virtual env python.exe 作为您的项目 python 解释器,仅此而已


A
AmiNadimi

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

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

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

https://i.stack.imgur.com/ED7k1.png


很好的答案!谢谢!快速提问。我在 Anaconda 中创建了 3 个不同的虚拟环境。他们每个人都有单独的 activate.bat 吗?
@user1700890 是的!如果您没有覆盖环境,它们应该有单独的文件夹,因此,单独的 activate.bat 文件。如果您喜欢答案,请随时投票;)
谢谢,我刚刚检查了,Scripts 文件夹中没有文件夹。 Pycharm 还抱怨 activate.bat 不是有效的 python SDK
所以我认为你应该首先尝试找到使用 Anaconda 时创建的虚拟环境文件夹,然后在其中运行 activate 批处理文件。或者如果可能的话,就去创造一个新的环境。
C
Chris Cogdon

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

恢复登录 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

谢谢你!经过数小时不成功的尝试找出从哪里开始 bashrc 和 bash 配置文件后,这对我有用。但是它抛出了它找不到我的虚拟环境的错误,所以我像这样修改它,你能告诉我它是否可以吗? 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 source ~/learnp/project1/venv/bin/activate
@zerohedge:您的脚本可以正常工作,但它已固定到您的“project1”virtualenv。上面的脚本应该进行自动检测,但有很多假设:初始工作目录是“.idea”目录的位置; workspace.xml 文件的格式没有显着变化。不幸的是,看起来 pycharm 版本 5 在这方面做出了重大改变。我现在实际上无法弄清楚数据在哪里。
好吧,我不介意根据项目更改我的添加,因为 Shell Path to 也是项目特定的。在找到您的脚本之前,我只能得到一个提示说“bash 3.2$:”,没有指示我当前的目录或与我的终端提示有任何相似之处。再次感谢你!
p
pferate

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

More info here.


这如何回答OP?仍然必须在终端中手动source /path/to/venv/bin/activate
b
bad_coder

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

https://i.stack.imgur.com/qYcCF.png


好吧,接受的答案引用了同样的事情。只是它没有图片。
佚名

谢谢克里斯,您的脚本适用于某些项目,但并非全部适用于我的机器。这是我写的一个脚本,我希望任何人都觉得它有用。

#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

谢谢,这对我有用!不得不做两件额外的事情。 1) 在 ~/.pycharmrc 文件的开头添加 source /etc/profile (在 Mac Yosemite 上) 2) 在 Pycharm 中编辑 Preferences >工具 >终端> “/bin/bash --rcfile ~/.pycharmrc”的外壳路径
这太棒了,谢谢!如果您使用的是 Python 3,请记住为 print 函数加上括号。我自己不得不在这个脚本之前加上“export ~/.bashrc”。
K
Khachatur

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

https://i.stack.imgur.com/QWGGY.png

https://i.stack.imgur.com/SJsFo.png


我还必须重新启动 PyCharm 才能再次启动“激活 virtualenv”设置。打开一个新的终端选项卡是不够的。
M
M3RS

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


u
user4304103

我刚刚在我的主目录中添加了一个名为 pycharmactivate 的脚本。设置 PyCharm (4.0.1) File > Settings > Tools > Terminal > Shell path to /bin/bash --rcfile ~/pycharmactivate 的值。如果您有不同的项目和 virtualenv 目录/名称,可能不是最好的解决方案,但它对我有用。此脚本包含以下 3 行,并假设您的 virtualenv 与您的项目目录具有相同的名称。

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

p
phiree

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

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

H
Hendrik Strobelt

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

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

母鸡


R
Robbe

WSL 解决方案(Windows 上的 Ubuntu)

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

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

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

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

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

项目特定的 virtualenv

.pycharmrc 中的 virtualenv 路径不必是绝对的。您可以通过设置项目目录的相对路径来设置项目特定的 virtualenv。我的 virtualenv 始终位于我的项目目录下的“venv”文件夹中,因此我的 .pycharmrc 文件如下所示:

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

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

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

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

这将检查 ssh 隧道是否已经打开,否则打开一个。在 Pycharm 中的 File -> Settings -> Project -> 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 隧道。您可以在任务管理器 -> 服务中停止这些服务,之后一切都会恢复正常。


这正是我想要的。作为一个喜欢 Debian 但懒得安装第二个操作系统的人,我非常感谢你。我想补充一点,Pycharm 提供给我的激活脚本最终需要通过 dos2unix 运行才能正确运行。
P
Pierre.Vriens

PyCharm 中的 venv 也有同样的问题。不过问题不大!做就是了:

进入你的终端 venv 目录(cd venv/Scripts/)你会看到 activate.bat 只需在你的终端中输入 activate.bat 之后你就会看到你的(venv)


h
honk

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

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

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

C:\Python27\; C:\Python27\Lib\site-packages\pip\; C:\Python27\脚本; C:\Python27\Lib\site-packages\django\bin;

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

C:[项目路径]\virtualenv-Py2.7_Dj1.7\Lib\site-packages\pip; C:[项目路径]\virtualenvs\virtualenv-Py2.7_Dj1.7\Scripts; C:[项目路径]\virtualenvs\virtualenv-Py2.7_Dj1.7\Lib\site-packages\django\bin;

要对此进行测试,请打开一个 new windows 终端(Start --> 输入 cmd 并按 Enter)并查看它是否正在使用你的虚拟环境。如果可行,请重新启动 PyCharm,然后在 PyCharm 的终端中进行测试。


K
Koblikov Mihail

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


D
Daenerys

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

.\myvenv\Scripts\activate

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

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

C:\Projects\Trunk\MyProject>

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

D
Dharman

我遇到了没有在 pycharm 终端(Pycharm 版本 2021.2.2)中激活 venv 的类似问题。只需按照以下步骤操作即可。

转到“设置 -> 工具 -> 终端”,然后在该窗口底部检查“激活 virtualenv”是否有勾选,如果没有,请确保勾选该框。

然后在该窗口的中间部分检查外壳路径是否设置为“cmd.exe”,如果没有,则将其设置为“cmd.exe”(它将与它的路径相关联,因此无需执行任何操作只需从下拉列表中单击“cmd.exe”)然后单击下面的“应用”按钮并单击“确定”。

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

PS:不要介意我的答案中的双引号,它们只是为了突出显示文本,仅此而已。


k
ksaylor11

另一种选择是使用 virtualenvwrapper 来管理您的虚拟环境。看来,一旦 virtualenvwrapper script is activated,pycharm 可以使用它,然后简单的 workon 命令将从 pycharm 控制台可用,并为您提供可用的虚拟环境:

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$ 

但是,这要求我每次打开终端时都必须激活 workon 脚本,并且知道 pycharm 当前正在使用哪个虚拟环境来运行程序,这两种情况我都明确地试图避免。
t
tilusnet

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

你写:

调用钩子的全局脚本

每个 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“工具 -> 终端 -> 外壳路径”以调用此脚本,例如:/bin/bash --rcfile ~/.pycharmrc

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

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

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


E
Erwin Mayer

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

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

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

在 activate-env.bat 文件中:

call activate myenvname

g
golmschenk

我希望每个项目都有一个单独的虚拟环境,并且不太关心有额外的文件来促进这一点。您只需执行一次并适用于所有项目的解决方案是将以下内容添加到您的 .bashrc.bash_profile

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

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


C
Community

PyCharm 4.5.4

在您的主文件夹中创建一个 .pycharmrc 文件,其中包含以下内容 source ~/.bashrc source ~/pycharmvenv/bin/activate 使用您的 virtualenv 路径作为最后一个参数。然后设置shell Preferences->Project Settings->Shell path to /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 非常简单 - 在终端中输入“停用”

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

“我不知道为什么,但它对我不起作用”——也许是因为这个解决方案对 linux/mac 有好处——对 windows 不适用? ;)
j
johndpope

https://i.stack.imgur.com/hCOBT.png

https://i.stack.imgur.com/7HwVa.png

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


B
Beef Coin

Windows 简单易用的解决方案:

在 Pycharm 中左侧的 Projects 菜单中会有文件夹。找到 Scripts 文件夹 在里面你会找到 activate.bat 右键单击 activate.bat 复制/路径参考 选择绝对路径 找到位于 Pycharm 底部中间的终端选项卡。将其粘贴到终端控制台并按 Enter 如果您正确操作,终端路径将在您激活的文件夹名称周围有括号(venv)。之前:"PS C:\" 之后:"(venv) C:\" 注意文件夹名称可能与您的不同,重要的部分是(括号):D


S
Sherar MDP

有同样的问题,这就是我解决它的方法:

您所要做的就是将默认终端从 Power shell 更改为 CMD。打开 pycharm --> 转到设置 --> 工具 --> 终端。从 PS 将 Shell 路径更改为 C:\Windows\system32\cmd.exe。选中激活 virtualenv 复选框。点击应用并打开新终端。