为什么在没有 sudo python 找到模块的情况下使用 sudo 安装 netfilterqueue 不起作用

why does installing netfilterqueue with sudo doesn't work when without sudo python found the module

当使用 sudo 安装 netfilterqueue 时,我没有收到任何错误,但是当执行 python 代码时,它说没有模块,但是当不使用 sudo 执行相同的命令时,它说模块已安装,但我需要使用 sudo 来使用 python 代码,我把我得到的所有命令行都放在下面。

与 sudo

pi@raspberrypi:~/serveur/firewall $ sudo python3.5 -m  pip install -U git+https://github.com/kti/python-netfilterqueue
Collecting git+https://github.com/kti/python-netfilterqueue
  Cloning https://github.com/kti/python-netfilterqueue to /tmp/pip-26umdc4u-build
Installing collected packages: NetfilterQueue
  Running setup.py install for NetfilterQueue ... done
Successfully installed NetfilterQueue
pi@raspberrypi:~/serveur/firewall $ sudo python3.5 firewall.pyTraceback (most recent call last):
  File "firewall.py", line 1, in <module>
    from netfilterqueue import NetfilterQueue
ImportError: No module named 'netfilterqueue'

没有 sudo

pi@raspberrypi:~/serveur/firewall $ python3.5 -m pip install -U git+https://github.com/kti/python-netfilterqueue
Defaulting to user installation because normal site-packages is not writeable
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting git+https://github.com/kti/python-netfilterqueue
  Cloning https://github.com/kti/python-netfilterqueue to /tmp/pip-req-build-yad67c46
Building wheels for collected packages: NetfilterQueue
  Building wheel for NetfilterQueue (setup.py) ... done
  Created wheel for NetfilterQueue: filename=NetfilterQueue-0.8.1-cp35-cp35m-linux_armv7l.whl size=79256 sha256=7461466e6fb8ef7cf85d7d7351be96991273863d684aaac3360b3c97534cfa46
  Stored in directory: /tmp/pip-ephem-wheel-cache-ogtjqq3t/wheels/64/80/b2/4dc9e937d58cc96a143e886a09d951be89ad9d7315141d6c2c
Successfully built NetfilterQueue
Installing collected packages: NetfilterQueue
Successfully installed NetfilterQueue-0.8.1
WARNING: You are using pip version 20.2.2; however, version 20.2.3 is available.
You should consider upgrading via the '/usr/bin/python3.5 -m pip install --upgrade pip' command.
pi@raspberrypi:~/serveur/firewall $ ls
firewall.py
pi@raspberrypi:~/serveur/firewall $ python3.5 firewall.pyTraceback (most recent call last):
  File "firewall.py", line 8, in <module>
    nfqueue = NetfilterQueue()
  File "netfilterqueue.pyx", line 162, in netfilterqueue.NetfilterQueue.__cinit__ (netfilterqueue.c:4098)
OSError: Failed to bind family 2. Are you root?

感谢您的帮助

所以我不知道 netfilterqueue 库,但根据消息,我认为发生的事情是该库正在使用需要 sudo 访问 运行 的内置 C 文件。有一个 github issue here 可能会回答这个问题,但我不确定。

尝试使用 sudo -E

sudo -E python3.5 firewall.py