【问题标题】: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告诉你有问题,对吧?

标签: python visual-studio-code pygame 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 扩展的安全措施。

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

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

    "python.linting.pylintArgs": [
        "--extension-pkg-whitelist=extensionname" // comma separated
    ]
    
  2. 您可以允许“不安全加载”所有扩展。

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

    "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)

      1. 在 Visual Studio 中按 CTRL+SHIFT+P
      2. 选择“首选项:打开设置 (JSON)”
      3. 在其中一行下方添加"python.linting.pylintArgs": ["--generate-members"](必要时加逗号)
      4. 保存.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. 
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2021-07-11
                  相关资源
                  最近更新 更多