1

我在 Linux/Ubuntu 系统上,在 pyenv 指定为 Python 3.8.1 的文件夹中。我已经使用pip install pipx. 如果我安装一个应用程序 (cowsay),并为该应用程序激活虚拟环境,pip 会列出我全局安装的包。为什么我在激活虚拟环境时没有看到用于 cowsay 安装的站点包?

您可以从下面的示例中看到,pip list无论 virtualenv 的激活状态如何,都会给我相同的结果?我知道在项目开发过程中,这不是观察到的反应。当在 venv 中时,pip list 为我提供了安装在 venv 中的站点包。

pipx --verion
0.15.5.1

pip --version    
pip 20.2.3 from /home/steve/.pyenv/versions/3.8.1/lib/python3.8/site-packages/pip (python 3.8)


cd /home/steve/.local/pipx/venvs/
source activate cowsay/bin/activate

(cowsay):~/.local/pipx/venvs$ pip list
Package     Version
----------- --------
argcomplete 1.12.1
click       7.1.2
distro      1.5.0
packaging   20.4
pip         20.2.3
pipx        0.15.5.1
pyparsing   2.4.7
setuptools  41.2.0
six         1.15.0
userpath    1.4.1
(cowsay) :~/.local/pipx/venvs$ deactivate

:~/.local/pipx/venvs$ pip list
Package     Version
----------- --------
argcomplete 1.12.1
click       7.1.2
distro      1.5.0
packaging   20.4
pip         20.2.3
pipx        0.15.5.1
pyparsing   2.4.7
setuptools  41.2.0
six         1.15.0
userpath    1.4.1
4

1 回答 1

1

您的pip命令实际上并未使用 venv。检查type pip将告诉您真正解决的问题。pipx不会pip在 venv 中创建控制台脚本,因为没有必要。

为 venv 创建的控制台脚本,包括 $PATH 上的cowsay可执行文件和python符号链接,将位于:

~/.local/pipx/venvs/cowsay/bin

但是 pip 安装的控制台脚本将在一个不在 $PATH 上的位置创建:

~/.local/pipx/shared/bin

您仍然应该能够在实际的 venv 中看到 cowsay 库,如下所示:

python -m pip list

你可能想知道为什么python -m pip工作pip而不工作?实际上,pip 安装是在 venvs 之间共享的,您应该能够看到在此处设置的路径文件 hack:

~/.local/pipx/venvs/cowsay/lib/python3.8/site-packages/pipx_shared.pth
于 2020-10-05T23:48:24.907 回答