为什么 pip list 在 pipx 创建的虚拟环境中不能正常工作?
Why does pip list not work correctly within a virtual environment created by pipx?
我在 Linux/Ubuntu 系统上,在 pyenv 指定为 Python 3.8.1 的文件夹中。我使用 pip install pipx
安装了 pipx。如果我安装一个应用程序 (cowsay),并为该应用程序激活虚拟环境,pip 会列出我全局安装的包。 为什么在激活虚拟环境后我没有看到 cowsay 安装的站点包?
你可以从下面的例子中看出,无论 virtualenv 的激活状态如何,pip list
都会给我相同的结果?我知道在项目开发期间,这不是观察到的响应。在 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
您的 pip
命令实际上并未使用 venv。检查 type pip
会告诉您真正解决的地方。 pipx
不会在 venv 中为 pip
创建控制台脚本,因为没有必要。
为 venv 创建的控制台脚本,包括 cowsay
可执行文件和 $PATH 上的 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
我在 Linux/Ubuntu 系统上,在 pyenv 指定为 Python 3.8.1 的文件夹中。我使用 pip install pipx
安装了 pipx。如果我安装一个应用程序 (cowsay),并为该应用程序激活虚拟环境,pip 会列出我全局安装的包。 为什么在激活虚拟环境后我没有看到 cowsay 安装的站点包?
你可以从下面的例子中看出,无论 virtualenv 的激活状态如何,pip list
都会给我相同的结果?我知道在项目开发期间,这不是观察到的响应。在 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
您的 pip
命令实际上并未使用 venv。检查 type pip
会告诉您真正解决的地方。 pipx
不会在 venv 中为 pip
创建控制台脚本,因为没有必要。
为 venv 创建的控制台脚本,包括 cowsay
可执行文件和 $PATH 上的 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