重新安装 python 和 ufw 后,出现以下错误:
user@machine:~$ sudo ufw status
Traceback (most recent call last):
File "/usr/sbin/ufw", line 25, in <module>
import ufw.frontend
ModuleNotFoundError: No module named 'ufw'
我尝试多次重新安装 ufw,但它不起作用。
我注意到的是,pip
它sudo
使用pip2
而不是,pip3
而且还使用python3
as python
:
user@machine:~$ pip -V
pip 19.3.1 from /usr/local/lib/python3.8/site-packages/pip (python 3.8)
user@machine:~$ sudo pip -V
pip 19.3.1 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
user@machine:~$ sudo -i
root@machine:~# pip -V
pip 19.3.1 from /usr/local/lib/python3.8/site-packages/pip (python 3.8)
user@machine:~$ python -V
Python 3.8.0
user@machine:~$ sudo python -V
Python 3.8.0
user@machine:~$ sudo -i
root@machine:~# python -V
Python 3.8.0
但我不确定这是否会导致问题。
Apt 历史:
apt remove --purge python3-pip # This broke ufw probably because --purge
apt remove python3
apt install python3
apt remove python3 # Noticed outdated version, uninstall again and built from source afterwards
apt install python3-pip # Was done after building and installing python3 from source
sudo pip3 list
:
Package Version
---------- ---------
certifi 2019.9.11
chardet 3.0.4
idna 2.8
pip 19.3.1
requests 2.22.0
setuptools 41.2.0
urllib3 1.25.7
python3 -c 'import sys; print(sys.version); print(sys.path)'
:
3.8.0 (default, Dec 1 2019, 09:38:21)
[GCC 7.4.0]
['', '/usr/local/lib/python38.zip', '/usr/local/lib/python3.8', '/usr/local/lib/ python3.8/lib-dynload', '/usr/local/lib/python3.8/site-packages']
ls /usr/lib/python3/dist-packages/ufw/
applications.py backend_iptables.py backend.py common.py frontend.py __init__.py parser.py __pycache__ util.py
答案1
您不应该python
从 Ubuntu 中删除它,因为很多软件包都是基于它构建的。由于您已经安装了 python,请执行下面列出的命令来重新安装ufw
sudo apt-get purge --auto-remove ufw
sudo apt-get install ufw
答案2
似乎ufw
已被删除pip3
,当你卸载时python3-pip
尝试以下方法重新安装:
sudo pip3 install https://launchpad.net/ufw/0.36/0.36/+download/ufw-0.36.tar.gz
答案3
看起来 ufw 使用的 python 版本已被删除,并且安装的版本与以前不同,因此 ufw 报告错误。
您可以通过以下命令追溯 ufw 正在使用的 python 版本。
sudo find /usr/lib/ -name "ufw"
例如,您将获得类似下面的输出(具体取决于您使用的 ufw 的 python 版本)。
/usr/lib/python3.6/site-packages/ufw
在上面的例子中,ufw 使用的是 python 3.6。您需要根据您的情况重新安装特定的 python 版本。
答案4
我不确定这个问题是否仍然与 OP 相关,但我今天遇到了同样的问题,所以我会与遇到同样问题的人分享这个问题。
我在 Debian 机器上安装了 Python 3.5,并且必须安装较新版本的 Python(因为我有带有“f 字符串”和其他功能的脚本)。
安装新版本的 Python(我的情况是 3.9)后,我会得到相同的结果sudo ufw status
:
Traceback (most recent call last):
File "/usr/sbin/ufw", line 26, in <module>
import ufw.frontend
ModuleNotFoundError: No module named 'ufw'
花了几个小时试图找出如何纠正这个问题后,我设法通过让ufw 包来自之前安装的 Python 包文件夹(在我的例子中是/usr/lib/python3/dist-packages/ufw)并将此文件夹及其所有内容复制到包含新版本 Python 软件包的目录中(在我的例子中,它是/usr/local/lib/python3.9/),所以最后我得到了如下结果:
usr
│ ...
└───local
│ ...
└───lib
│ ...
└───python3.9
│ ...
└───ufw
│ applications.py
│ backend_iptables.py
│ backend.py
│ common.py
│ frontend.py
│ __init__.py
│ parser.py
│ util.py
路径可能会根据您使用的 Python 版本而改变,但此过程解决了我的问题。
简而言之,我所做的就是复制ufw 包从以前安装的 Python 的 dist-packages 文件夹移动到新版本 Python 的 packages 文件夹。