python-3.x - 为什么 pip list 在 pipx 创建的虚拟环境中无法正常工作?
问题描述
我在 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
解决方案
您的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
推荐阅读
- javascript - 在 Angular 6 中以编程方式调用组件
- java - 在maven中创建可执行jar文件,清单中缺少主类
- batch-file - Windows批处理脚本中的时间比较
- python - 使用 Python 和 beautifulSoup 从 XML 输出创建多个 txt 文件
- javascript - 如果元素在同一位置或堆叠,如何设置集群?
- javascript - 文件上传和验证
- php - php.ini 中 output_buffering 的值 1 和 4096 有什么区别
- angular - Primeng ConfirmDialog 在点击 Yes、No 或 Close(X) 后没有关闭
- machine-learning - ignite:训练模型后如何从 db/work 文件夹中删除创建的 ML 数据集
- c++ - “煎饼贪吃”运动;如果用户输入两个或更多相等的值怎么办