导入错误:找不到netifaces模块

8
我正在尝试使用Python获取我的计算机网络适配器的IP地址和MAC地址。我从这里获得了一些代码:here 我创建了一个名为“getip”的项目。 创建“main.py”。并按照以下方式修改“main.py”的代码。
from netifaces import interfaces, ifaddresses, AF_INET

def ip4_addresses():
    ip_list = []
    for interface in interfaces():
        for link in ifaddresses(interface)[AF_INET]:
            ip_list.append(link['addr'])

    return ip_list

def main():
    print ip4_addresses()


if __name__ == "__main__":
    main()

我创建了"app.yaml"文件

application: getip
version: 1
runtime: python
api_version: 1

handlers:
- url: .*
  script: main.py

当我在控制台运行“python main.py”时,我得到了IP地址。
当我作为“dev_appserver.py getip”运行时,服务器被设置。 当我浏览 localhost:8080 页面时,网页是白屏,并在控制台上得到以下错误。

from netifaces import interfaces, ifaddresses, AF_INET

ImportError: No module named netifaces

如何解决这个问题?

你的应用服务器是否运行相同的 Python 二进制文件?head dev_appserver.py 命令返回的结果是什么? - Martijn Pieters
看起来你正在使用Google App Engine。为什么? - Leonardo.Z
@MartijnPieters,head: 无法打开“which dev_appserver.py”以进行阅读:没有这样的文件或目录 - Thu Ra
@ThuRa:你在哪个平台上运行这个程序?这是Google Appserver吗? - Martijn Pieters
@MartijnPieters,Linux(Ubuntu 12.04)。是的,这是Google App Engine。 - Thu Ra
显示剩余7条评论
5个回答

10

只需安装netifaces

pip install netifaces如果您已经安装了pip,或者下载源代码,解压缩运行并执行python setup.py install

警告:这将在您的系统全局安装它,因此请谨慎使用,或使用virtualenv


6
如果您正在使用 ubuntu
sudo apt install python3-netifaces

5

我来到这里寻求帮助,但是在我的情况下,pip install 命令显示已满足安装要求。然而:

pip uninstall netifaces && pip install netifaces

解决了问题。

为了后人能够参考,我将这个方法留在这里。如果需要,使用 sudo 权限执行命令。


这导致了我的实际问题。我安装了多个netifaces。尝试使用pip卸载它,但它显示“未在/usr/lib/python3/dist-packages以外的环境/usr卸载netifaces”。切换到root用户并执行“apt remove python3-netifaces”,然后pip按预期工作。 - Martin

1
实际上,问题在于您必须以root身份使用pip进行安装,否则它将不会全局安装。因此,除非与模块目录在同一目录或路径中,否则将无法找到该模块。因此,您需要执行以下操作:
sudo pip install netifaces

或在Windows上使用提升的命令提示符进行安装!


2
在Windows上安装软件包时,您不需要使用提升的命令提示符。 - Zoe stands with Ukraine

0

看起来你在本地开发环境中安装了netifaces。但是Google App Engine不认识它。

如果你使用python main.py运行脚本,Python解释器将在PYTHONPATH中查找你的库。GAE不遵循这个规则。

要在GAE中安装库,通常只需要将库模块目录放在应用程序路径的根目录下(即app.yaml所在的位置)。但出于安全原因,我不认为Google允许您安装可以获取硬件信息的库。

更新:

因为你只需要一个Web服务器来输出结果,我建议你选择一个简单、文档完善、微型Python Web框架,比如Flaskbottle

安装:pip install Flaskeasy_install Flask

代码:

from flask import Flask
from netifaces import interfaces, ifaddresses, AF_INET
app = Flask(__name__)

def ip4_addresses():
    ip_list = []
    for interface in interfaces():
        for link in ifaddresses(interface)[AF_INET]:
            ip_list.append(link['addr'])

    return ip_list

@app.route("/")
def main():
    return str(ip4_addresses())

if __name__ == "__main__":
    app.run()

运行:python main.py


你的答案基本正确。实际上,我想要创建一个适用于Windows和Linux的应用程序。但是我是Python的新手。我的背景来自于Web(LAMP)环境,所以我不知道如何通过Python创建应用程序。如果可以的话,请与我分享知识。 - Thu Ra
如果你想学习/创建Python Web应用程序,我建议你选择一些Web框架,例如Flask(或Bottle、Django),而不是Google App Engine。 - Leonardo.Z
感谢 @glasslion,我会尝试其中一个,也许是Django。但我想创建的是软件应用程序而不是Web应用程序。 - Thu Ra
我按照你的指示安装了Flask。但是当我运行python main.py时,出现了ImportError: No module named flask的错误提示。 - Thu Ra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接