为啥说模块 pygame 没有 init 成员?

Posted

技术标签:

【中文标题】为啥说模块 pygame 没有 init 成员?【英文标题】:Why does it say that module pygame has no init member?为什么说模块 pygame 没有 init 成员? 【发布时间】:2018-11-07 05:30:18 【问题描述】:

这是我的代码:

import pygame
pygame.init()

我很困惑,因为如果我尝试运行该文件,那么似乎没有问题,但 pylint 说如下:

E1101:模块 'pygame' 没有 'init' 成员

我已彻底寻找解决此“错误”的方法。在我发现的每个相关案例中,解决方案是确保我没有创建另一个名为“pygame”的文件或文件夹,因为在这种情况下,我只会导入我自己的文件或文件夹。

但是,我没有创建一个名称甚至接近“pygame”的文件夹或文件,所以我不知道问题是什么。

如前所述,我似乎能够毫无问题地运行该文件,并且在学习过程中出现此类错误使我感到困惑。

我在 Visual Studio Code 中编写代码,我使用的是 python 3.6,我使用的是 pygame 1.9.3 并更新了我的 pylint。任何帮助将不胜感激。

【问题讨论】:

您是否使用pip 安装了pygame,或者您是如何安装的?导入后运行 print(dir(pygame)) 会发生什么? 还有,用import pygame; print(pygame)打印什么? 我首先使用pip 安装了 pygame,但我也尝试为它下载一个 python 轮文件,解压缩并将 pygame 文件夹放入 Lib\site-packages,这是其他类似的东西cx_Freeze 和 Django 是一样的。两种方法产生相同的结果。 print(dir(pygame)) 给了我一个看起来像命令的大列表。其中,我实际上可以找到'init'。 print(pygame) 给了我这个:init_.py'> 代码有效,但只有pylint告诉你有问题,对吧? 【参考方案1】:

如果你有 VS 代码,进入你的 .vscode 文件夹 > settings.json 或搜索 python.linting.mypyArgs 在用户设置选项卡下粘贴在大括号之间

"python.linting.pylintArgs": [
    "--extension-pkg-whitelist=lxml"  // The extension is "lxml" not "1xml"
]

我不再看到 pyinit 错误。

【讨论】:

查看下面的链接。当您尝试制作 pygame 时,它​​消除了 vs 代码中的“模块 'pygame' 没有 'init' 成员”错误。 如果您使用的是 Mac 版 VS Code,您需要执行以下操作才能编辑 settings.json 文件: 1. 单击 Code(即打开的 Visual Studio Code 选项卡) “文件”选项卡的左侧)-> 首选项-> 设置 2. 向下滚动到扩展并单击列表中的 Python。 3. 单击任一Edit in settings.json 链接。这会打开 settings.json 进行编辑。 实际上,我必须将pygame 列入白名单才能摆脱这些错误错误。我应该相应地编辑这个答案吗?白名单lxml 是否适用于某些用户? 应该是"--extension-pkg-whitelist=pygame"【参考方案2】:

总结所有答案。

这是一种不加载非默认 C 扩展的安全措施。

    您可以将特定的扩展程序列入白名单。

    打开用户设置并在 之间添加以下内容:

    "python.linting.pylintArgs": [
        "--extension-pkg-whitelist=extensionname" // comma separated
    ]
    

    您可以允许“不安全加载”所有扩展。

    打开用户设置并在 之间添加以下内容:

    "python.linting.pylintArgs": [
        "--unsafe-load-any-extension=y"
    ]
    

【讨论】:

【参考方案3】:

当我开始将 Visual Studio Code 与 Python 结合使用时,我遇到了同样的问题。它与拥有另一个 pygame.py 或未正确安装它无关。这与 Visual Studio Code 从字面上理解您的代码这一事实有关,并且由于您无法导入 pygame.init(),因此它认为它不是一个正确的模块。

要解决此问题,请打开 settings.json(进入您的设置,然后单击 图标)并粘贴

"python.linting.pylintArgs": [
    "--extension-pkg-whitelist=pygame"
]

给它。

【讨论】:

【参考方案4】:

我的一个模块遇到了同样的问题。这就是我为解决问题所做的。 (我在 Windows 10 上使用 Visual Studio)

    在 Visual Studio 中按 CTRL+SHIFT+P 选择“首选项:打开设置 (JSON)” 在其中一行下方添加"python.linting.pylintArgs": ["--generate-members"](必要时加逗号) 保存.json文件(CTRL+S)

对我来说,代码如下所示:


    "breadcrumbs.enabled": false,
    "editor.minimap.enabled": false,
    "python.pythonPath": "C:\\Users\\xxx\\Anaconda3",
    "terminal.integrated.rendererType": "dom",
    "window.menuBarVisibility": "default",
    "workbench.activityBar.visible": false,
    "workbench.statusBar.visible": true,
    "python.linting.pylintArgs": ["--generate-members"], //line to add
    "[json]": 

    

希望对您有所帮助。 归功于 github 上的@Alamnoor

【讨论】:

【参考方案5】:

This answer 包括您的问题的答案。简而言之,它解释了:

Pylint 导入模块以有效识别有效方法和属性。决定导入不属于 python stdlib 的 c 扩展存在安全风险,并可能引入恶意代码。

作为解决方案,它提到了,其中包括:

使用.pylintrc 设置unsafe-load-any-extensions=yes 禁用安全。

有关pylint.rc 的更多信息,请参阅here。最快的方法是在项目目录或主目录中创建文件.pylintrc

【讨论】:

【参考方案6】:

我发现在 settings.json() 中添加这个可以解决问题。

"python.linting.pylintArgs":[
            "--extension-pkg-whitelist=pygame",
            "--erros-only"
      ]

【讨论】:

请注意,"--errors-only" 不是必需的。看起来这会禁用 pylint 警告,我会说这是一个坏主意(pylint 警告将帮助您编写更好的代码 - 您应该将它们保持打开状态)。【参考方案7】:

我找到了答案,它确实对我有用。 查看接受的答案并将其更改为extension-pkg-whitelist=lxml

pylint 1.4 reports E1101(no-member) on all C extensions

【讨论】:

应该是"--extension-pkg-whitelist=pygame"【参考方案8】:

我建议转到视图选项卡,单击命令面板并搜索首选项:打开 settings.json。然后在代码的最后一行添加一个逗号。在下面粘贴这个:

"python.linting.pylintArgs": [
    "--extension-pkg-whitelist=extensionname" // comma separated
]

然后保存您的文档 (ctrl + s)。

【讨论】:

【参考方案9】:

检查您的目录中是否有一个名为pygame.py 的python 文件由您创建。如果你这样做了,那么import pygame 行正在导入你自己的文件而不是真正的 Pygame 模块。由于您在该文件中没有 init() 函数,因此您会看到此特定错误消息。

【讨论】:

【参考方案10】:

我找到了解决办法,修改投票最多的答案:

"python.linting.pylintArgs": [
    "--extension-pkg-whitelist=pygame"
]

将“lxml”替换为“pygame”。

【讨论】:

【参考方案11】:

禁用 Pylint 1.按 ctrl + shift + p 2.然后输入 Disable Pylint

【讨论】:

也许 OP 不想禁用 pylint。 虽然标准有时可能会“令人讨厌”……但它们通常是为了让我们成为更好的程序员。您最好在错误上添加一个 pylint 禁用注释(或者只是删除特定的 no-member 检查)【参考方案12】:

如果您使用的是vscode,那么您可以进入设置:

python.linting.pylintEnabled = False

它将解决问题。如果您不使用vscode,则可以转到命令提示符并使用命令手动卸载pylint

pip uninstall pylint. 

【讨论】:

以上是关于为啥说模块 pygame 没有 init 成员?的主要内容,如果未能解决你的问题,请参考以下文章

Pygame 已经安装;但是,python终端说“没有名为'pygame'的模块”(Ubuntu 20.04.1)

Pygame 已经安装;但是,python终端说“没有名为'pygame'的模块”(Ubuntu 20.04.1)

python pygame.camera.init() 没有视频捕获

导入pygame没有名为'pygame'的模块[重复]

为啥 PyGame 在延迟或睡眠之前没有在窗口中绘制?

为啥 PyGame 动画闪烁