python - venv在ansible中将系统范围的pip包安装到venv虚拟环境中
问题描述
我正在运行 ansible 以将一些 pip 包安装到虚拟环境中,venv
但它安装的版本完全相同,但没有。来自系统范围的 python 的包,而不是requirement.txt
.
当我手动完成时,我能够取得成功。即系统范围的 pip 包和虚拟环境 pip 包是不同的。
我在ansible中遇到错误
TASK [curator : Install pip packages List.] ****************************************************************************************************************************
fatal: [elasticsearch_1]: FAILED! => {
"changed": false,
"cmd": "/home/user/elk-venv/bin/pip list --format=freeze",
"rc": 13
}
MSG:
[Errno 13] Permission denied
我正在通过 ansible 任务执行的步骤是 -
- 使用命令模块创建
venv
如下
# /usr/bin/python3.6 -m venv /home/user/elk-venv
- 复制里面的
requirements.txt
文件和tranferred_packages
文件夹/home/user/elk-venv/
。
requirements.txt
有 pip 包列表,tranferred_packages
文件夹有下载包。基本上以离线方式安装软件包。
- 使用 pip 模块尝试安装如下软件包,
- name: Install pip packages List.
pip:
requirements: /home/user/elk-venv/requirements.txt
extra_args: "--no-index --find-links=file:////home/user/elk-venv/tranferred_packages"
virtualenv: /home/user/elk-venv
virtualenv_python: /home/user/elk-venv/bin/python3.6
下面是ansible(elk-env)创建的虚拟环境
尝试使用bin/pip3 list
.
(elk-venv) [root@Server elk-venv]# bin/pip3 list
-bash: bin/pip3: Permission denied
能够像下面一样列出 pip3 列表,但它似乎是系统 python 的副本
(elk-venv) [root@Server elk-venv]# pip3 list
attrs (19.3.0)
blist (1.3.6)
如果我们在下面看到它显示/usr/local/lib/python3.6/site-packages
。
(elk-venv) [root@Server elk-venv]# pip3 show pytz
Name: pytz
Version: 2019.3
Summary: World timezone definitions, modern and historical
Home-page: http://pythonhosted.org/pytz
Author: Stuart Bishop
Author-email: stuart@stuartbishop.net
License: MIT
Location: /usr/local/lib/python3.6/site-packages
Requires:
(elk-venv) [root@Server elk-venv]#
不知道为什么,但配置文件也显示/usr/bin
(elk-venv) [root@Server elk-venv]# cat pyvenv.cfg
home = /usr/bin
include-system-site-packages = false
version = 3.6.8
(elk-venv)
bin 文件夹下的 pip/python 文件。python3.6
指向/usr/bin/python3.6
(elk-venv) [root@Server bin]# ls -lrth
lrwxrwxrwx 1 root root 18 Apr 28 21:56 python3.6 -> /usr/bin/python3.6
lrwxrwxrwx 1 root root 9 Apr 28 21:56 python3 -> python3.6
lrwxrwxrwx 1 root root 9 Apr 28 21:56 python -> python3.6
-rwxr-xr-x 1 root root 224 Apr 28 21:56 pip
-rwxr-xr-x 1 root root 224 Apr 28 21:56 pip3.6
-rwxr-xr-x 1 root root 224 Apr 28 21:56 pip3
elk-venv
venv下的文件。LICENSE
在此处看不到devenv
.
drwxr-x--- 2 root root 4.0K Apr 28 21:56 include
-rw-r----- 1 root root 69 Apr 28 21:56 pyvenv.cfg
lrwxrwxrwx 1 root root 3 Apr 28 21:56 lib64 -> lib
drwxr-x--- 3 root root 4.0K Apr 28 21:56 lib
drwxr-x--- 2 root root 4.0K Apr 28 21:56 bin
-rw-r----- 1 root root 1022 Apr 28 21:56 requirements.txt
drwxr-x--- 3 root root 4.0K Apr 28 21:56 tranferred_packages
在虚拟环境下手动创建(devenv),它有自己的 pip 包。
这里能够列出包。未获得许可被拒绝。
(devenv) [root@Server devenv]# bin/pip list
Package Version
--------------------- ----------
APScheduler 3.6.3
attrs 19.3.0
pip 21.1
它显示来自自己路径的包,即/root/devenv/lib/python3.6/site-packages
.
# pip3 show pytz
Name: pytz
Version: 2019.3
Summary: World timezone definitions, modern and historical
Home-page: http://pythonhosted.org/pytz
Author: Stuart Bishop
Author-email: stuart@stuartbishop.net
License: MIT
Location: /root/devenv/lib/python3.6/site-packages
Requires:
Required-by: tzlocal, twilio, APScheduler
配置文件显示/bin
。
(devenv) [root@Server devenv]# cat pyvenv.cfg
home = /bin
include-system-site-packages = false
version = 3.6.8
(devenv) [root@Server devenv]#
bin 文件夹下的 pip/python 文件。这里python3.6
指的是/bin/python3.6
。
(devenv) [root@Server bin]# ls -lrth
total 148K
lrwxrwxrwx 1 root root 14 Apr 27 17:39 python3.6 -> /bin/python3.6
lrwxrwxrwx 1 root root 9 Apr 27 17:39 python3 -> python3.6
lrwxrwxrwx 1 root root 9 Apr 27 17:39 python -> python3.6
-rwxr-xr-x 1 root root 233 Apr 28 12:29 pip3.6
-rwxr-xr-x 1 root root 233 Apr 28 12:29 pip3
-rwxr-xr-x 1 root root 233 Apr 28 12:29 pip
devenv
venv下的文件。
-rw-r----- 1 root root 65 Apr 27 17:39 pyvenv.cfg
lrwxrwxrwx 1 root root 3 Apr 27 17:39 lib64 -> lib
drwxr-x--- 3 root root 4.0K Apr 27 17:39 lib
drwxr-x--- 2 root root 4.0K Apr 27 17:39 include
-rw-r----- 1 root root 12K Apr 28 12:30 LICENSE
drwxr-x--- 3 root root 4.0K Apr 28 13:30 bin
drwxr-x--- 2 root root 4.0K Apr 28 20:45 tranferred_packages
-rw-r----- 1 root root 1022 Apr 28 20:45 requirements.txt
(devenv) [root@Server devenv]#
ansible 版本是 - ansible 2.9.9
ansible python 版本 = 2.7.5
我认为 anisble 上面的 pip 模块中缺少一些东西导致了这种情况。有人可以告诉它是什么吗?
谢谢,
解决方案
推荐阅读
- javascript - Wordpress $ 未定义
- c# - 在此上下文中,数据过滤仅支持原始类型或枚举类型
- entity-framework - 单个实体“映射到相同的行”
- wordpress - 仅通过我的家庭 wifi 访问一个网站时出现 403 禁止错误。怎么修?
- twitter-bootstrap - 每页两个 ul nav-tabs 需要公共类活动引导程序 4
- elasticsearch - ElasticSearch :content-type header application/x-www-form-urlencoded 不受支持
- sql - 当列包含特定值时转到下一行(sql server 2008)
- ruby-on-rails - 阵列访问和插入记录数据库
- c++ - C++ 命名空间外定义
- java - 如何@Autowired 服务的具体实现?