CentOS 7 上的 Python 3 上没有模块“yum”

Or *_*r B 4 python python-3.x centos7 rhel7

我正在尝试在 CentOS 7 中使用yum Python 包

Python 2 中:我可以成功import yum

Python 3 中:当我尝试时import yum,我遇到ModuleNotFoundError: No module named 'yum'.

安装 dnf 后,dnf Python 包出现完全相同的问题。

围绕这个问题的研究将我带到了 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)
Run Code Online (Sandbox Code Playgroud)

So, currently I can't find a way to interact natively with yum/dnf with Python code, running Python 3 on CentOS 7.

cax*_*atl 8

我的电脑运行 Fedora,我无法访问 CentOS 安装,但我认为下面的信息是正确的。

您使用的yumdnf模块不是您的日常pip模块。相反,它们实际上是dnfyumrpm 的一部分。

你可以这样检查:

蟒蛇2

>>> 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
Run Code Online (Sandbox Code Playgroud)

蟒蛇3

>>> 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
Run Code Online (Sandbox Code Playgroud)

如果你检查yumdnf文件,你会看到它们都是python3脚本

$ head -1 /usr/bin/yum /usr/bin/dnf
==> /usr/bin/yum <==
#!/usr/bin/python3

==> /usr/bin/dnf <==
#!/usr/bin/python3
Run Code Online (Sandbox Code Playgroud)

如果您仔细查看yum,您会发现它实际上是对dnf模块的调用。

因此,Python的yumordnf模块的可用性将取决于您安装的实际命令的版本。

对于dnf,您可以尝试安装python2-dnfpython3-dnf。不过,我不确定您是否可以同时拥有它们。我想你可以,因为它们在/usr/bin.

对于yum,我的猜测是他们提供了 Python 2 库以实现向后兼容性,但他们可能没有费心将其移至 Python 3,因为它已被废弃dnf

同样,这对于我的 Fedora 版本来说都是正确的。你的 CentOS 版本可能会得到不同的结果和包名,但底线应该是一样的:Python2 lib only for yum; dnf为不同的 Python 版本模块安装不同的包。