切换到虚拟环境时,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 的 PATHPYTHONPATH 环境设置来工作。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 终端中消失的主要内容,如果未能解决你的问题,请参考以下文章

在 Android Repo 项目中切换 Git 分支

在Android Repo项目中切换Git分支

删除 git repo 中的文件夹? [复制]

virtualenv系列 · 打通virtualenvwrapper和PyCharm/IntelliJ IDEA的虚拟环境

linux CentOS虚拟机切换为阿里源

linux CentOS虚拟机切换为阿里源