CentOS 7 上的 Python 3 上没有模块“yum”
Posted
技术标签:
【中文标题】CentOS 7 上的 Python 3 上没有模块“yum”【英文标题】:No module 'yum' on Python 3 on CentOS 7 【发布时间】:2020-04-02 19:09:10 【问题描述】:我正在尝试在 CentOS 7 中使用 yum Python package。
在Python 2中:我可以成功import yum
。
在 Python 3 中:当我尝试import yum
时,我遇到了ModuleNotFoundError: No module named 'yum'
。
安装 dnf 后,dnf Python package 也会出现完全相同的问题。
围绕这个问题的研究把我带到了 CentOS 8,其中dnf
包确实适用于 Python 3。
在 CentOS 7 中尝试查找 python3-dnf
软件包(或 yum
的等效软件包)时。
尝试在 CentOS 7 上安装 CentOS 8 软件包只会导致我与所需软件包发生冲突和不匹配。
另外,尝试pip3 install yum
找不到任何包,pip3 install dnf
成功但导入会给出以下警告:
/usr/local/lib/python3.6/site-packages/dnf.py:15: UserWarning: The DNF Python API is not currently available via PyPI.
Please install it with your distro package manager (typically called
'python2-dnf' or 'python3-dnf'), and ensure that any virtual environments
needing the API are configured to be able to see the system site packages
directory.
warnings.warn(warning_msg)
所以,目前我无法找到一种方法来与 yum
/dnf
在 CentOS 7 上运行 Python 3 的 Python 代码进行本机交互。
【问题讨论】:
【参考方案1】:我的电脑运行 Fedora,我无法安装 CentOS,但我认为下面的信息是正确的。
您使用的yum
和dnf
模块不是您日常使用的pip
模块。相反,它们实际上是 dnf
和 yum
rpms 的一部分。
你可以这样检查:
Python2
>>> import yum
>>> help(yum)
(...)
FILE
/usr/lib/python2.7/site-packages/yum/__init__.py
$ dnf -C repoquery --file /usr/lib/python2.7/site-packages/yum/__init__.py
yum-0:3.4.3-518.fc29.noarch
Python3
>>> import dnf
>>> help(dnf)
(...)
FILE
/usr/lib/python3.7/site-packages/dnf/__init__.py
$ dnf -C repoquery --file /usr/lib/python3.7/site-packages/dnf/__init__.py
python3-dnf-0:4.0.4-1.fc29.noarch
python3-dnf-0:4.2.5-5.fc29.noarch
如果您检查 yum
和 dnf
文件,您会发现它们都是 python3
脚本
$ head -1 /usr/bin/yum /usr/bin/dnf
==> /usr/bin/yum <==
#!/usr/bin/python3
==> /usr/bin/dnf <==
#!/usr/bin/python3
如果您详细查看yum
,您会发现它实际上是对dnf
模块的调用。
因此,Python 的 yum
或 dnf
模块的可用性将取决于您安装的实际命令的版本。
对于dnf
,可以尝试安装python2-dnf
或python3-dnf
。不过,我不确定您是否可以同时拥有它们。我想你可以,因为它们在 /usr/bin
中有不同的名称。
对于yum
,我的猜测是他们提供了 Python 2 库以实现向后兼容性,但他们可能不会费心将其移至 Python 3,因为它已被 dnf
淘汰
同样,这对我的 Fedora 版本来说是正确的。你的 CentOS 版本可能会得到不同的结果和包名,但底线应该是一样的:Python2 lib only for yum
;为不同的 Python 版本模块安装不同的 dnf
包。
【讨论】:
感谢您的详细回答,但不幸的是,这并不能解决 CentOS 7 中的问题。 @OrB,我想我的回答实际上是“对不起,你不能”。yum
/dnf
作为系统包安装,所以你必须使用系统提供的东西,显然在 CentOS 上它只提供 Python2 接口。为什么需要专门的 Python 3 绑定?你想达到什么目的?而且,你愿意破解它多远才能通过它?例如,您可以通过制作具有适当要求的virtualenv
并将 python3-dnf 包中的文件添加到其中来解决问题。但是你想去那里吗?
我特别想要 Python 3 绑定,因为 Python 2 将在 15 天后退役。看来您说这根本不可能是对的,所以目前我将通过为 Python 2 编写代码来解决它:(
@caxcaxcoatl 我需要 Python 3,因为在 Python 2 上使用时,已知 Ansible 在具有大量文件指针的系统上非常慢。但我不能将 python 3 与 Ansible 一起使用来安装包我的 CentOS 7 系统带有 Yum 而不是 Dnf。这是我的一个难题。
@Gherman,好的,这是有道理的。我只是想仔细检查一下您是否尝试过 Python 3 + Ansible + package
模块。我不确定 Ansible 是使用库还是命令调用,所以可能值得一试,因为您只提到了 yum
模块。同样,如果这不起作用,这将是 DevOps 的一个有效问题以上是关于CentOS 7 上的 Python 3 上没有模块“yum”的主要内容,如果未能解决你的问题,请参考以下文章
Bad Gateway 502 - 在 centos 7 上使用 gunicorn nginx 部署 Flask (python 3.5.2)
在 CentOS 7上安装并配置 Python 3.6 环境
在centos 7上安装并配置python 3.6环境,怎样使用3.6.1 版本