【发布时间】:2021-12-15 07:14:40
【问题描述】:
创建并激活虚拟环境后:
python3 -m venv env
. ./env/bin/activate
全局 /usr/bin/pip3 不会全局安装包。实际上它确实复制了包文件但包没有完全安装:
/usr/bin/pip3 install docker
Collecting docker
Downloading docker-5.0.3-py2.py3-none-any.whl (146 kB)
|████████████████████████████████| 146 kB 2.5 MB/s
Requirement already satisfied: requests!=2.18.0,>=2.14.2 in /usr/lib/python3/dist-packages (from docker) (2.22.0)
Collecting websocket-client>=0.32.0
Downloading websocket_client-1.2.1-py2.py3-none-any.whl (52 kB)
|████████████████████████████████| 52 kB 2.9 MB/s
Installing collected packages: websocket-client, docker
Successfully installed docker-5.0.3 websocket-client-1.2.1
文件被全局放置:
ls /usr/lib/python3.8/site-packages
docker docker-5.0.3.dist-info websocket websocket_client-1.2.1.dist-info
但是没有 venv 活动的 shell 都不会认为 docker 已安装:
pip3 list|grep docker
python3
Python 3.8.10 (default, Sep 28 2021, 16:10:42)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import docker
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'docker'
>>>
venv 也没有看到已安装的 docker 包:
(env) pip3 list|grep docker
(env) python3
Python 3.8.10 (default, Sep 28 2021, 16:10:42)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import docker
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'docker'
>>>
这是一个错误吗?
如何在 venv 处于活动状态时使用 pip3 全局安装软件包?
我为什么要这样做?
Ansible 从 venv 启动,它以 localhost 为目标。因此,如果我只使用 pip3 作为可执行文件,它会使用来自 venv 的二进制文件。如果我使用 /usr/bin/pip3 我会得到上述行为。
这是一个更复杂的开源项目,我无法选择不从 venv 运行 Ansible 或不以 localhost 为目标。
谢谢
【问题讨论】:
标签: python linux ansible python-venv