切换到虚拟环境时,Git repo 在 PyCharm 的集成 bash 终端中消失
Posted
技术标签:
【中文标题】切换到虚拟环境时,Git repo 在 PyCharm 的集成 bash 终端中消失【英文标题】:Git repo vanishes in integrated bash terminal in PyCharm when switching to virtual environment 【发布时间】:2021-11-28 11:56:57 【问题描述】:当我通过单击“+”符号启动新终端时,会启动一个新的git-bash terminal
。
由于我在当前选定的PyCharm
项目的根文件夹中,它会自动识别.git
- 文件夹并检查我当前所在的分支。在这里,我最近在“release/dev
”上(如下所示)。
由于 pip-virtual-env 没有被自动识别,我不得不手动获取激活脚本,即使我已经选中了 PyCharm 设置中的复选框:
username@hd1pcms0347 MINGW64 ~/Projects/proj (release/dev)
$ source ../proj-venv/Scripts/activate
接下来,意想不到的发生了:
(proj-venv)
username@hd1pcms0347 MINGW64 ~/Projects/proj
$
名为“proj-venv
”的虚拟环境确实已激活,但 git-repo 'release/dev
' 消失了。
此外,在使用git ...
命令时,它指出
bash: git: 找不到命令
然而,当打开一个新的 bash 终端时,venv
消失了,但git repo
存在,当然所有git
- 命令都在工作。
为什么 git repo 和 venv 似乎相互排斥,我该如何解决这个问题?
系统参数:
操作系统: Windows 10
PyCharm 2021.2.2(社区版)
Build #PC-212.5284.44,构建于 2021 年 9 月 14 日运行时版本: 11.0.12+7-b1504.28 amd64 VM:JetBrains s.r.o 的 OpenJDK 64 位服务器 VM Windows 10 10.0 GC:G1 新生代、G1 老年代 内存:2004M 内核:8 注册表: debugger.valueTooltipAutoShowOnSelection=true
【问题讨论】:
对于找不到git
命令,请检查运行source <env-script>
后您的$PATH
受到的影响:在初始shell 中运行echo $PATH
,并在激活虚拟环境后重新运行它.
提示部分:前后检查echo $PS1
。
【参考方案1】:
在 Python 中,虚拟环境通过修改你的 shell 的 PATH
和 PYTHONPATH
环境设置来工作。1这就是为什么你必须source whatever/activate
,而不是而不仅仅是运行它。运行它会创建一个子shell;该脚本将修改子外壳的设置;然后子shell将退出,删除所有修改。
根据激活脚本在中的内容,以及当前在您自己的shell 环境中的内容,这可能会造成破坏。 Python 的 venv-builder 尝试构建谨慎的脚本,但有无数种方法可以破坏。
在这种情况下,似乎无论在哪里安装 Git,在激活环境之前 在您的 $PATH
中,而不是在之后的 $PATH
中。您可以在前后查看$PATH
以了解发生了什么变化。理想情况下,激活脚本只是添加正确的 Python 二进制文件的位置(见脚注 1),但显然在这种情况下它也删除正确的 Git 安装的位置。
1Unix 风格的 shell 使用 $PATH
查找程序。也就是说,在命令行中,您可以键入:
$ python test.py
您的 shell 不是神奇地“知道”python
的位置,而是简单地将命令行单词分解为“参数向量”(Python 中的 sys.argv
)。在这种情况下,argv[0]
中的那个只是“python”。这不是像/c/whatever/python.exe
这样的完整路径,所以shell 现在采用$PATH
的值,这将类似于/c/bin1:/c/bin2:/c/addons
或/usr/local/bin:/bin:/usr/bin
或其他,并尝试运行python
或@987654337 @ 在每个路径元素中用冒号分隔。
Python 同样使用$PYTHONPATH
来设置sys.path
,这是import
所在的位置。因此,通过设置$PATH
以便python
找到一个特定 Python 版本,并设置$PYTHONPATH
以便这个特定的Python 从某个特定发行版导入,即虚拟环境已经出现了。
【讨论】:
以上是关于切换到虚拟环境时,Git repo 在 PyCharm 的集成 bash 终端中消失的主要内容,如果未能解决你的问题,请参考以下文章
virtualenv系列 · 打通virtualenvwrapper和PyCharm/IntelliJ IDEA的虚拟环境