如何在 PyCharm 终端中激活 virtualenv?
Posted
技术标签:
【中文标题】如何在 PyCharm 终端中激活 virtualenv?【英文标题】:How do I activate a virtualenv inside PyCharm's terminal? 【发布时间】:2014-04-12 20:55:10 【问题描述】:我已经设置了 PyCharm,创建了我的 virtualenv(通过 virtual env 命令,或直接在 PyCharm 中)并将该环境激活为我的解释器。一切正常。
但是,如果我使用“工具,打开终端”打开终端,则提供的 shell 提示符是 not 使用虚拟环境;我仍然需要在该终端中使用source ~/envs/someenv/bin/activate
来激活它。
另一种方法是在 shell 中激活环境,然后从该环境运行 PyCharm。这是“可行的”但非常丑陋,这意味着如果我从 PyCharm 切换环境或项目,我会遇到重大问题:我现在使用的是完全错误的环境。
还有其他更简单的方法可以让“工具,打开终端”自动激活虚拟环境吗?
【问题讨论】:
【参考方案1】:编辑:
根据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路径设置为
/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”选项。【参考方案2】:
更新:
设置中的首选项(Preferences)|工具 |终端是全球性的。 如果您为每个项目使用 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?【参考方案3】:
Windows 用户在使用 PyCharm 和 Windows 下的虚拟环境时,可以使用 cmd.exe 的 /k 参数自动设置虚拟环境。
转到设置、终端、默认外壳并添加/K <path-to-your-activate.bat>
。
我没有对之前的回复发表评论的声誉,因此发布了这个更正的版本。这确实节省了很多时间。
更新:
注意:Pycharm 现在直接支持虚拟环境,它似乎对我来说效果很好——所以我不再需要我的解决方法了。
【讨论】:
这很棒,但前提是您的所有项目都只有一个 virtualenv。默认 shell 设置在项目间共享【参考方案4】:如果您使用的是 windows 版本,这很容易。
如果您已经拥有虚拟环境,只需导航到其文件夹,在 Scripts
文件夹中找到 activate.bat
。复制它的完整路径并将其粘贴到pycharm的终端然后按Enter
就完成了!
如果您需要创建新的虚拟环境:
转到文件>设置然后搜索project interpreter
,打开它,点击齿轮按钮并在任何你想要的地方创建环境,然后按照第一段。
【讨论】:
很好的答案!谢谢!快速提问。我在 Anaconda 中创建了 3 个不同的虚拟环境。他们每个人都有单独的activate.bat
吗?
@user1700890 是的!如果您没有覆盖环境,它们应该有单独的文件夹,因此,单独的 activate.bat
文件。如果您喜欢这个答案,请随时投票;)
谢谢,我刚查了一下,Scripts
文件夹里没有文件夹。 Pycharm 还抱怨 activate.bat
不是有效的 python SDK
所以我认为您应该首先尝试找到使用 Anaconda 时创建的虚拟环境文件夹,然后在其中运行 activate
批处理文件。或者如果可能的话,就去创造一个新的环境吧。【参考方案5】:
根据彼得的回答和实验,我想出了一个很好的“通用解决方案”,它解决了以下问题:
恢复登录 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 路径也是项目特定的。在找到您的脚本之前,我只能得到一个提示说“bash 3.2$:”,没有指示我当前的目录或与我的终端提示有任何相似之处。再次感谢您!【参考方案6】:
PyCharm 4 现在在 IDE 中集成了 virtualenvs。选择项目解释器时,您可以创建、添加或选择 virtualenv。他们添加了一个在配置的项目解释器中运行的“Python 控制台”。
More info here.
【讨论】:
这如何回答 OP?还是要在终端手动source /path/to/venv/bin/activate
。【参考方案7】:
我已经查看了上面的所有答案,但没有一个对我来说足够优雅。在 PyCharm 2017.1.3(在我的电脑上)中,最简单的方法是打开 Settings->Tools->Terminal
并检查 Shell integration
和 Activate virtualenv
选项。
【讨论】:
好吧,接受的答案引用了同样的内容。只是它没有图片。【参考方案8】:感谢 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
【讨论】:
谢谢,这对我有用!不得不做两件额外的事情。 1) 在 ~/.pycharmrc 文件的开头添加source /etc/profile
(在 Mac Yosemite 上) 2) 在 Pycharm 中编辑 Preferences > Tools > Terminal > Shell path to "/bin/bash --rcfile ~/.pycharmrc"
这太棒了,谢谢!如果您使用的是 Python 3,请记住为 print 函数加上括号。我自己不得不在这个脚本之前加上“export ~/.bashrc”。【参考方案9】:
如果您已将项目移动到另一个目录,您可以通过设置对话框设置新路径。然后你需要在 Edit Configuration 对话框中设置这个 Project Interpreter。
【讨论】:
我还必须重新启动 PyCharm 才能再次启动“激活 virtualenv”设置。打开一个新的终端标签是不够的。【参考方案10】:在 Mac 上是 PyCharm => Preferences... => Tools => Terminal => Activate virtualenv,默认情况下应该启用。
【讨论】:
【参考方案11】:不知何故,一个小技巧对我有用。您所要做的就是将默认终端从 Power shell 更改为 CMD。
-
打开 pycharm --> 进入设置 --> 工具 --> 终端
将
Shell Path
从 PS
更改为 C:\Windows\system32\cmd.exe
选中Activate virtualenv
复选框
点击apply
并打开新终端
现在是2021年你不需要指定文件路径或添加环境变量。
更新:现在是 2022 年,我遇到了同样的问题 修复:按照上述步骤,此外,请确保您已选择 您的虚拟环境 python.exe 作为您的项目 python 解释器,就是这样
【讨论】:
【参考方案12】:我刚刚在我的主目录中添加了一个名为 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
【讨论】:
【参考方案13】:这就是我正在做的事情: 在源代码文件夹中创建一个 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>
【讨论】:
【参考方案14】:跟进彼得的回答,
这里是.pycharmrc
文件的 Mac 版本:
source /etc/profile
source ~/.bash_profile
source <venv_dir>/bin/activate
母鸡
【讨论】:
【参考方案15】:WSL 解决方案(Windows 上的 Ubuntu)
如果您使用的是 WSL(Windows 上的 Ubuntu),您还可以在 pycharm 中将 bash 作为终端打开并激活 linux virtualenv。
使用 .pycharmrc
文件,如 Peter Gibson 的回答中所述;将.pycharmrc
文件添加到您的主目录,内容如下:
source ~/.bashrc
source ~/path_to_virtualenv/bin/activate
在 Pycharm 中文件 > 设置 > 工具 > 终端 添加以下“Shell 路径”:
"C:/Windows/system32/bash.exe" -c "bash --rcfile ~/.pycharmrc"
项目特定的虚拟环境
.pycharmrc
中的 virtualenv 路径不必是绝对的。您可以通过设置项目目录的相对路径来设置项目特定的 virtualenv。
我的 virtualenv 始终位于我的项目目录下的“venv”文件夹中,所以我的 .pycharmrc
文件如下所示:
奖励:自动打开 ssh 隧道以连接 virtualenv 作为项目解释器
将以下内容添加到您的 .pycharmrc
文件中:
if [ $(ps -aux | grep -c 'ssh') -lt 2 ]; then
sudo service ssh start
fi
这会检查一个 ssh 隧道是否已经打开,否则打开一个。 在 Pycharm 的 File -> Settings -> Project -> Project Interpreter 中,添加一个新的远程解释器,配置如下:
+--------------+----------------- --------------+--------+----+ |姓名: | | | | |选择 | 'SSH 凭证' | | | |主持人:| 127.0.0.1 |港口: | 22 | |用户: | | | | |授权类型:| '密码' | | | |密码: | | | | | Python 解释器路径:| | | | | Python 助手路径:| | | | +--------------------------+---------- -----------+-------+----+
现在,当您打开项目时,您的 bash 会自动在您的 virtualenv 中启动,打开一个 ssh 隧道,然后 pycharm 将 virtualenv 作为远程解释器连接。
警告:Windows 中的最后一次更新会在启动时自动启动 SshBroker 和 SshProxy 服务。这些阻止了从 linux 到 windows 的 ssh 隧道。您可以在任务管理器 -> 服务中停止这些服务,之后一切都会恢复正常。
【讨论】:
这正是我想要的。作为一个喜欢 Debian 但懒得安装第二个操作系统的人,我非常感谢你。我想补充一点,Pycharm 提供给我的激活脚本最终需要通过 dos2unix 运行才能正确运行。【参考方案16】:我在 PyCharm 中使用 venv 时遇到了同样的问题。不过问题不大! 做吧:
-
进入你的终端venv目录(cd venv/Scripts/)
您将看到 activate.bat
只需在终端中输入 activate.bat 之后,您就会看到您的 (venv)
【讨论】:
【参考方案17】:我有一个适用于我的 Windows 7 机器的解决方案。
我相信 PyCharm 的终端是它运行 cmd.exe
的结果,它将加载 Windows PATH
变量,并使用它首先在该 PATH
中找到的 Python 版本。要编辑此变量,请右键单击我的电脑 --> 属性 --> 高级系统设置 --> 高级 选项卡 --> 环境变量... 按钮。在系统变量部分中,选择并编辑PATH
变量。
这是我的PATH
编辑前的相关部分:
C:\Python27\; C:\Python27\Lib\site-packages\pip\; C:\Python27\Scripts; 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:[project_path]\virtualenvs\virtualenv-Py2.7_Dj1.7\Lib\site-packages\django\bin;
要对此进行测试,请打开 new windows 终端(Start --> 输入 cmd
并点击 Enter)并查看是否它正在使用您的虚拟环境。如果可行,重新启动 PyCharm,然后在 PyCharm 的终端中进行测试。
【讨论】:
【参考方案18】:如果您的 Pycharm 2016.1.4v 及更高版本,您应该使用
"default path" /K "<path-to-your-activate.bat>"
不要忘记引号
【讨论】:
【参考方案19】:在 Windows 上,如果您已经拥有虚拟环境,例如。 'myvenv' 位于项目根目录中,您可以从终端激活它,如下所示:
.\myvenv\Scripts\activate
从你想激活的virtualenv中调用activate,激活virtualenv。
当你看到变化时你就知道它被激活了:
C:\Projects\Trunk\MyProject>
到
(myvenv)C:\Projects\Trunk\MyProject>
【讨论】:
【参考方案20】:我遇到了在 pycharm 终端(Pycharm 版本 2021.2.2)中没有激活 venv 的类似问题。只需按照以下步骤操作即可。
转到“设置 -> 工具 -> 终端”,然后在该窗口底部检查“激活 virtualenv”是否有勾选,如果没有,请确保该框被勾选。
然后在该窗口的中间部分检查 shell 路径是否设置为“cmd.exe”,如果没有,则将其设置为“cmd.exe”(它将与它的路径关联,所以不需要要执行任何操作,只需单击下拉列表中的“cmd.exe”)然后单击下面的“应用”按钮并单击“确定”。
现在已经完成了,只需关闭您打开的终端并重新打开它。您将在项目路径前面看到“venv”。
P.S:不要介意我的答案中的双引号,它们只是为了突出显示文本,仅此而已。
【讨论】:
【参考方案21】:另一种选择是使用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当前正在使用哪个虚拟环境来运行程序,这两者我明确地试图避免。【参考方案22】:此方法应该适用于每个项目的任意虚拟环境,并且它不会对您的环境做出假设,因为它使用的是您创建的钩子。
你写:
调用钩子的全局脚本 每个 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 项目的终端环境中发现有用的任何东西来扩展您的钩子。
【讨论】:
【参考方案23】:对于 Windows 上的 conda 虚拟环境,请确保您的批处理文件未命名为 activate.bat
,因为这会导致与 conda activate
命令冲突,从而导致批处理文件的递归调用。
对我有用的是以下 Shell 路径:
"cmd.exe" /k ""C:\FullPathToYourProject\activate-env.bat""
并且在activate-env.bat文件中:
call activate myenvname
【讨论】:
【参考方案24】:我希望每个项目都有一个单独的虚拟环境,并且不太关心有额外的文件来促进这一点。您只需执行一次并适用于所有项目的解决方案是将以下内容添加到您的 .bashrc
或 .bash_profile
:
if [ -d "./venv" ]; then
source ./venv/bin/activate
fi
这会检查是否存在正在打开终端的虚拟环境,如果有则激活它(当然也可以使用其他相对路径)。 PyCharm 的终端设置可以保留为默认设置。
【讨论】:
【参考方案25】:PyCharm 4.5.4
使用以下内容在您的主文件夹中创建一个文件 .pycharmrc 内容
source ~/.bashrc source ~/pycharmvenv/bin/activate
使用您的 virtualenv 路径作为最后一个参数。
然后将shell Preferences->Project Settings->Shell路径设置为
/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 不适用? ;)【参考方案26】:进入终端时的一个选项 > 运行 > 调试 > 编辑配置
选择合适的 conda 环境.. 此外,当您创建一个新项目时 - 它会要求配置此位置。
【讨论】:
【参考方案27】:Windows 简单易用的解决方案:
-
在 Pycharm 中左侧的 Projects 菜单中会有文件夹。
找到 Scripts 文件夹
在里面你会找到activate.bat
右键activate.bat
复制/路径参考
选择绝对路径
找到位于 Pycharm 底部中间的终端选项卡。
将其粘贴到终端控制台并按回车
如果您操作正确,终端路径将在您激活的文件夹名称周围加上方括号 (venv)。
之前:“PS C:\”
之后:“(venv) C:\”
注意文件夹名称可能与您的不同,重要的部分是(括号):D
【讨论】:
【参考方案28】:设置已有的虚拟环境,官方文档:https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html?keymap=secondary_macos#existing-environment
【讨论】:
以上是关于如何在 PyCharm 终端中激活 virtualenv?的主要内容,如果未能解决你的问题,请参考以下文章