ModuleNotFoundError:运行 yum 或 dnf 时没有名为“dnf”的模块

pol*_*oig 6 python fedora yum dnf

几天前我想运行 dnf 但收到以下错误

Traceback (most recent call last):
  File "/usr/bin/dnf", line 57, in <module>
    from dnf.cli import main
ModuleNotFoundError: No module named 'dnf'
Run Code Online (Sandbox Code Playgroud)

因此我尝试运行 yum 并收到类似的信息:

Traceback (most recent call last):
  File "/usr/bin/yum", line 57, in <module>
    from dnf.cli import main
ModuleNotFoundError: No module named 'dnf'
Run Code Online (Sandbox Code Playgroud)

我不知道发生了什么,我希望有人能帮助我找到问题并解决它。我唯一知道的是,这可能与前几天我使用conda在python中安装tensorflow有关。虽然 conda 现在似乎不起作用,因为我得到了这个:

Traceback (most recent call last):
  File "/usr/bin/conda", line 6, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3126, in <module>
    @_call_aside
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3110, in _call_aside
    f(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3139, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 581, in _build_master
    ws.require(__requires__)
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 898, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 784, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'conda==4.5.11' distribution was not found and is required by the application
Run Code Online (Sandbox Code Playgroud)

我正在使用 fedora 29 谢谢!

小智 6

我遇到了同样的问题,但经过反复试验,唯一真正有效的是:

rpm -qa python3
Run Code Online (Sandbox Code Playgroud)

这将公布您的 python3 rpm 包。

我从网上搜索并下载了它

转到下载的目录,例如:

sudo rpm -e --nodeps python3-3.7.2-4.fc29.x86_64(my python3 rpm package)
sudo rpm -i python3-3.7.2-4.fc29.x86_64.rpm
Run Code Online (Sandbox Code Playgroud)

我尝试了许多其他方法,因此这不是解决该问题的唯一因素。

  • 我发现这个答案很有用。可能需要澄清的是,作者本质上建议卸载当前的 python3 软件包并再次安装它。如果现有安装由于某种原因被破坏,这可能会起作用。就我而言,它被破坏了,因为有人在系统范围内安装了自定义的“python3”,而它没有附带“dnf”包。 (2认同)

and*_*1er 6

从软件包安装 Python 3.11 时,我在 Rocky Linux 9 Docker 映像(预装了 Python 3.9)上遇到了类似的问题。

dnf install python3.11
Run Code Online (Sandbox Code Playgroud)

python3.11可执行文件工作正常,但是在设置符号链接时python3.11 -> python3

$ ls -l /usr/bin/pyth*
lrwxrwxrwx 1 root root    16 Sep 19 12:53 /usr/bin/python -> /usr/bin/python3
lrwxrwxrwx 1 root root    19 Sep 19 12:53 /usr/bin/python3 -> /usr/bin/python3.11
-rwxr-xr-x 1 root root 15448 Jun 23 06:04 /usr/bin/python3.11
-rwxr-xr-x 1 root root 15440 Apr 17 23:46 /usr/bin/python3.9
Run Code Online (Sandbox Code Playgroud)

dnf 停止工作并出现ModuleNotFoundError: No module named 'dnf'错误,因为它的 Python 模块安装在/usr/lib/python3.9/site-packages/dnf目录中。

解决方案:对我来说,帮助将Python 脚本#!/usr/bin/python3中的默认 shebang替换/usr/bin/dnf为特定的 shebang #!/usr/bin/python3.9

sed -i 's|#!/usr/bin/python3|#!/usr/bin/python3.9|g' /usr/bin/dnf
Run Code Online (Sandbox Code Playgroud)

然后与

$ head -1 /usr/bin/dnf
#!/usr/bin/python3.9
Run Code Online (Sandbox Code Playgroud)

它工作正常:

$ dnf --version
4.14.0
Run Code Online (Sandbox Code Playgroud)