我已经设置了 PyCharm,创建了我的 virtualenv(通过 virtual env 命令,或者直接在 PyCharm 中)并将该环境激活为我的解释器。一切正常。
但是,如果我使用“工具,打开终端”打开终端,则提供的 shell 提示符是 not 使用虚拟环境;我仍然必须在该终端中使用 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 支持自动 virtualenv。您可以在 Settings (Preferences) | 中自定义您的 shell 首选项。工具 |终端 |检查激活virtaulenv
您还需要确保将虚拟环境路径的路径包含在项目结构的内容根文件夹中。你可以去设置(偏好)|项目 |项目结构 |如果您的环境不包含在项目目录中。
在您的主文件夹中创建一个文件 .pycharmrc
,其中包含以下内容
source ~/.bashrc
source ~/pycharmvenv/bin/activate
使用您的 virtualenv 路径作为最后一个参数。
然后将 shell Preferences->Project Settings->Shell path 设置为
/bin/bash --rcfile ~/.pycharmrc
更新:
设置中的首选项(首选项)|工具 |终端是全球性的。如果您为每个项目使用 venv,请记住使用当前路径变量和默认 venv 名称:
"cmd.exe" /k ""%CD%\venv\Scripts\activate""
对于 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""
%CD%
是当前工作目录,请参阅 Windows shell command to get the full path to the current directory?
Windows 用户在使用 PyCharm 和 Windows 下的虚拟环境时,可以使用 cmd.exe 的 /k 参数来自动设置虚拟环境。
转到设置、终端、默认外壳并添加 /K <path-to-your-activate.bat>
。
我没有评论早期回复的声誉,因此发布了这个更正的版本。这确实节省了很多时间。
更新:
注意:Pycharm 现在直接支持虚拟环境,它似乎对我来说效果很好——所以我的解决方法不再需要了。
不知何故,一个小技巧对我有用。您所要做的就是将默认终端从 Power shell 更改为 CMD。
打开 pycharm --> 转到设置 --> 工具 --> 终端 从 PS 将 Shell 路径更改为 C:\Windows\system32\cmd.exe 检查激活 virtualenv 复选框 点击应用并打开新终端
现在是 2021 年,您无需指定文件路径或添加环境变量。
更新:现在是 2022 年,我遇到了同样的问题 修复:按照上述步骤,此外,请确保您已选择 Your virtual env python.exe 作为您的项目 python 解释器,仅此而已
如果您使用的是 windows 版本,这很容易。如果您已经拥有虚拟环境,只需导航到其文件夹,在 Scripts
文件夹中找到 activate.bat
。复制它的 完整 路径并将其粘贴到 pycharm 的终端中,然后按 Enter
就完成了!
如果您需要创建新的虚拟环境:
转到文件 >设置然后搜索project interpreter
,打开它,点击齿轮按钮并在任何你想要的地方创建环境,然后按照第一段。
https://i.stack.imgur.com/ED7k1.png
activate.bat
吗?
activate.bat
文件。如果您喜欢答案,请随时投票;)
Scripts
文件夹中没有文件夹。 Pycharm 还抱怨 activate.bat
不是有效的 python SDK
activate
批处理文件。或者如果可能的话,就去创造一个新的环境。
根据彼得的回答和实验,我想出了一个很好的“通用解决方案”,它解决了以下问题:
恢复登录 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
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
PyCharm 4 现在在 IDE 中集成了 virtualenvs。选择项目解释器时,您可以创建、添加或选择 virtualenv。他们添加了一个在配置的项目解释器中运行的“Python 控制台”。
source /path/to/venv/bin/activate
。
我已经查看了上面的所有答案,但没有一个对我来说足够优雅。在 PyCharm 2017.1.3(在我的电脑中)中,最简单的方法是打开 Settings->Tools->Terminal
并检查 Shell integration
和 Activate 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
source /etc/profile
(在 Mac Yosemite 上) 2) 在 Pycharm 中编辑 Preferences >工具 >终端> “/bin/bash --rcfile ~/.pycharmrc”的外壳路径
如果您已将项目移动到另一个目录,则可以通过设置对话框设置新路径。然后你需要在编辑配置对话框中设置这个项目解释器。
https://i.stack.imgur.com/QWGGY.png
https://i.stack.imgur.com/SJsFo.png
在 Mac 上是 PyCharm => Preferences... => Tools => Terminal => Activate virtualenv,默认情况下应该启用。
我刚刚在我的主目录中添加了一个名为 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
这就是我正在做的:在源代码文件夹中创建一个 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>
跟进彼得的回答,这里是 .pycharmrc
文件的 Mac 版本:
source /etc/profile
source ~/.bash_profile
source <venv_dir>/bin/activate
母鸡
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 ~/.bashrcsource ~/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 隧道。您可以在任务管理器 -> 服务中停止这些服务,之后一切都会恢复正常。
PyCharm 中的 venv 也有同样的问题。不过问题不大!做就是了:
进入你的终端 venv 目录(cd venv/Scripts/)你会看到 activate.bat 只需在你的终端中输入 activate.bat 之后你就会看到你的(venv)
我有一个适用于我的 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 的终端中进行测试。
如果您的 Pycharm 2016.1.4v 及更高版本,您应该使用 "default path" /K "<path-to-your-activate.bat>"
不要忘记引号
在 Windows 上,如果您已经拥有虚拟环境,例如。 'myvenv' 位于项目根目录中,您可以从终端激活它,如下所示:
.\myvenv\Scripts\activate
从您想要激活的 virtualenv 中调用 activate 来激活 virtualenv。
当您看到更改时,您知道它已激活:
C:\Projects\Trunk\MyProject>
至
(myvenv)C:\Projects\Trunk\MyProject>
我遇到了没有在 pycharm 终端(Pycharm 版本 2021.2.2)中激活 venv 的类似问题。只需按照以下步骤操作即可。
转到“设置 -> 工具 -> 终端”,然后在该窗口底部检查“激活 virtualenv”是否有勾选,如果没有,请确保勾选该框。
然后在该窗口的中间部分检查外壳路径是否设置为“cmd.exe”,如果没有,则将其设置为“cmd.exe”(它将与它的路径相关联,因此无需执行任何操作只需从下拉列表中单击“cmd.exe”)然后单击下面的“应用”按钮并单击“确定”。
现在它已经完成了,只需关闭您打开的终端并重新打开它。您将在项目路径前面看到“venv”。
PS:不要介意我的答案中的双引号,它们只是为了突出显示文本,仅此而已。
另一种选择是使用 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$
此方法应该适用于每个项目的任意虚拟环境,并且它不会对您的环境做出假设,因为它使用的是您创建的钩子。
你写:
调用钩子的全局脚本
每个 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 项目的终端环境中发现有用的任何东西来扩展您的钩子。
对于 Windows 上的 conda 虚拟环境,请确保您的批处理文件未命名为 activate.bat
,因为这将导致与 conda activate
命令冲突,从而导致批处理文件的递归调用。
对我有用的是以下 Shell 路径:
"cmd.exe" /k ""C:\FullPathToYourProject\activate-env.bat""
在 activate-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 使用您的 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>
https://i.stack.imgur.com/hCOBT.png
https://i.stack.imgur.com/7HwVa.png
选择适当的 conda 环境。此外,当您创建一个新项目时 - 它会要求配置此位置。
Windows 简单易用的解决方案:
在 Pycharm 中左侧的 Projects 菜单中会有文件夹。找到 Scripts 文件夹 在里面你会找到 activate.bat 右键单击 activate.bat 复制/路径参考 选择绝对路径 找到位于 Pycharm 底部中间的终端选项卡。将其粘贴到终端控制台并按 Enter 如果您正确操作,终端路径将在您激活的文件夹名称周围有括号(venv)。之前:"PS C:\" 之后:"(venv) C:\" 注意文件夹名称可能与您的不同,重要的部分是(括号):D
有同样的问题,这就是我解决它的方法:
您所要做的就是将默认终端从 Power shell 更改为 CMD。打开 pycharm --> 转到设置 --> 工具 --> 终端。从 PS 将 Shell 路径更改为 C:\Windows\system32\cmd.exe。选中激活 virtualenv 复选框。点击应用并打开新终端。
~/pycharmenv/bin/terminalactivate
听起来是个不错的选择。.pycharmrc
放在项目主文件夹中,这样我就可以为每个项目拥有不同的文件。在正确配置的项目中,无需提供.pycharmrc
文件的绝对路径。