重新安装python后无法使用UFW

重新安装python后无法使用UFW

重新安装 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,但它不起作用。

我注意到的是,pipsudo使用pip2而不是,pip3而且还使用python3as 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 文件夹。

相关内容