【问题标题】:PyOpenGL glutInit NullFunctionErrorPyOpenGL glutInit NullFunctionError
【发布时间】:2014-12-29 07:27:55
【问题描述】:

我在 Win7 x64 机器上运行 Anaconda Python 2.7 并使用过

pip install PyOpenGL PyOpenGL_accelerate

在 Anaconda 命令行安装 PyOpenGL。

我有一些使用 glutInit 的代码(我必须承认不是我自己的)

import sys
import math
import numpy

import OpenGL
from OpenGL.GL import *
from OpenGL.GLUT import *

import Image

import linkage

# ... a whole load of definitions etc ...

glutInit(sys.argv)
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB)
glutInitWindowSize(600, 600)
glutCreateWindow('linkage')
init()
initWindow()
glutIdleFunc(idle)
glutMainLoop()

我通过在命令行输入以下内容运行:

python main.py peaucellier.txt

然后得到以下错误(第 371 行是上面的 glutInt(sys.argv) 行)

File "C:/Users/Owner/Documents/Python Scripts/linkage/main.py", line 371, in <module>
glutInit(sys.argv)

File "C:\Anaconda\lib\site-packages\OpenGL\GLUT\special.py", line 333, in glutInit
_base_glutInit( ctypes.byref(count), holder )

File "C:\Anaconda\lib\site-packages\OpenGL\platform\baseplatform.py", line 407, in __call__
self.__name__, self.__name__,

NullFunctionError: Attempt to call an undefined function glutInit, check for bool(glutInit) before calling

我查看了此论坛中发布的类似错误,但建议的修复都不起作用,这就是为什么我要问,这里有什么问题?

安装有问题吗?导入是否正确?

编辑:在为官方版本尝试了许多修复后,我现在使用一个非官方版本,它可以完美地从 Unofficial Windows Binaries for Python Extension Packages 运行

【问题讨论】:

    标签: python python-3.x python-2.7 glut pyopengl


    【解决方案1】:

    根据下面的链接,问题出在 glut 安装而不是pip install。似乎 glut 文件不是 PyOpenGL 或 PyOpenGL_accelerate 包的一部分。您必须单独下载它们。

    https://stackoverflow.com/a/39181193/7030177

    Windows 用户可以使用下面的链接下载给定链接中提到的 glut。 ftp://ftp.sgi.com/opengl/glut/glut3.html.old#windows

    Linux 用户只需使用以下命令安装 glut:

    sudo apt-get install freeglut3-dev
    

    希望这会有所帮助:)

    【讨论】:

    • 在 GNU/Linux 下安装 freeglut3 就足够了。
    • FTP 链接不再托管。
    • 'sudo apt-get install freeglut3-dev' 拯救了我的一天!
    • 在我的 Windows 上,PyOpenGL 可以正常使用名称为 freeglut32.vc14 的 freeglut.dll 副本。
    • 正如@Alexey 所说,只需将 freeglut.dll 重命名为 freeglut64.vc14(如果您有 32 位解释器,请重命名为 freeglut32.vc14)。原始 freeglut.dll 的位大小必须正确。然后将它们放置到您的 python 文件中。在使用的解释器版本上,文件扩展名的数字结尾可能是depends
    【解决方案2】:

    在寻找类似问题的解决方案后,我遇到了这个回答问题的谷歌小组:https://groups.google.com/forum/#!topic/glumpy-users/aC1NjEHXtEE

    当从官方源下载为 pip 时,OpenGL.GLUT 存在问题。使用pip卸载OpenGL,然后从http://www.lfd.uci.edu/~gohlke/pythonlibs/下载OpenGL

    【讨论】:

    • 在 Win 7 上为我工作,python 2.7 anaconda,Mamuka Arabuli 或 Gnat 等其他人提出的 freeglut 解决方案没有,所以先试试吧。
    • 适用于 Win10 Python 3.8。复制 freeglut.dll 无效。
    【解决方案3】:

    If installing PyOpenGL from easy_install, pip or conda,请确保您已经安装了 GLUT 实现,例如 FreeGLUT (prebuilt Windows binaries)。

    对于 FreeGLUT,将分发的文件复制到硬盘上的某个位置,然后将 bin 目录(包含 GLUT DLL)的路径添加到 PATH 环境变量中。然后 PyOpenGL 应该可以正常工作了。

    【讨论】:

      【解决方案4】:

      Linux 用户在通过easy_install PyOpenGLpip install PyOpenGL 安装后出现此错误。

      -> 将分发包安装为:sudo apt-get install python-opengl - 这对我有用

      【讨论】:

        【解决方案5】:

        主要是因为你运行64-bitwindows把pip安装的是32-bit版本的PyOpenGL。

        要解决此问题,请按以下步骤操作:

        1. 卸载现有的 PyOpenGL,运行pip uninstall PyOpenGL PyOpenGL_accelerate

        2. 从这里下载 64 位版本的 PyOpenGL 和 PyOpenGL 加速:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyopengl

        3. 如何选择下载哪一个?好吧,首先你需要检查你的 python 版本。运行python --version 确定。 然后根据你的版本下载 PyOpenGL 和 PyOpenGL 加速的 whl 文件。比如你有Python 3.8,下载这2个文件:

        PyOpenGL‑3.1.5‑cp38‑cp38‑win_amd64.whl

        PyOpenGL_accelerate‑3.1.5‑cp38‑cp38‑win_amd64.whl

        同样,如果您运行 Python 3.9,请下载这些:

        PyOpenGL‑3.1.5‑cp39‑cp39‑win_amd64.whl

        PyOpenGL_accelerate‑3.1.5‑cp39‑cp39‑win_amd64.whl

        注意:必须下载amd64的,毕竟你运行的是64位windows。

        1. 现在转到您下载文件的文件夹并在那里以管理员身份运行 powershell/cmd。

        2. 使用 pip 强制安装这些文件。例如:

        pip install PyOpenGL-3.1.5-cp38-cp38-win_amd64.whl --force-reinstall

        pip install PyOpenGL_accelerate-3.1.5-cp38-cp38-win_amd64.whl --force-reinstall

        注意:先安装 PyOpenGL,再安装 PyOpenGL_accelerate

        1. 如果安装成功,您现在可以运行了。

        需要确认的一些事实:

        *所有平台必须是相同的位版本。

        *系统类型、python、OpenGL需要同位版本。就我而言,它是x64 bit

        *如果重新安装其中任何一个(Python,OpenGL),都需要重新启动桌面

        *建议你的pip版本保持在20.3,我是从21.1.3降级的

        【讨论】:

        • 最佳答案,唯一适合我的答案!谢谢。
        • 同意。在 stackoverflow 上的几篇文章中的最佳答案。谢谢
        【解决方案6】:

        我遇到了同样的错误,并解决了从 here 安装所需文件的问题。

        下载这些文件:

        • PyOpenGL-3.1.1-cp27-cp27m-win32.whl(如果您的计算机是 32 位则下载)

        • PyOpenGL-3.1.1-cp27-cp27m-win_amd64.whl(如果您的计算机是 64 位,请下载)

        • PyOpenGL_accelerate-3.1.1-cp27-cp27m-win32.whl(如果您的计算机是 32 位,请下载)

        • PyOpenGL_accelerate-3.1.1-cp27-cp27m-win_amd64.whl(如果您的计算机是 64 位,请下载)

        为 64 位安装这些 .whl 文件:

        pip install PyOpenGL-3.1.1-cp27-cp27m-win_amd64.whl
        pip install PyOpenGL_accelerate-3.1.1-cp27-cp27m-win_amd64.whl
        

        为 32 位安装这些 .whl 文件:

        pip install PyOpenGL-3.1.1-cp27-cp27m-win32.whl 
        pip install PyOpenGL_accelerate-3.1.1-cp27-cp27m-win32.whl
        

        【讨论】:

        • ergul,您会注意到这与开篇文章中的链接相同。
        • @DrBwts 你是对的。 2年前你问的这个问题。我只是为不太懂英语的人一步一步写一个解决方案。
        【解决方案7】:

        对于 python 2.7,PyopenGL 需要 vc++ 9 编译器,download 并安装它。

        然后:

        python -m pip install --upgrade pip
        
        pip install image
        
        pip install numpy
        
        pip install PyOpenGL PyOpenGL_accelerate
        

        我下载了freeglut

        解压并添加bin目录到路径 来电时:glutCreateWindow("sometitle") 改为glutCreateWindow(b'sometitle')

        并让它在 Windows 7 上运行

        【讨论】:

          【解决方案8】:

          我的情况不同,Python 3.6 和 windows 10。但是完全相同的错误消息。尝试了以上所有解决方案,均未成功。 将WHL文件下载到我的电脑和HERE的python版本

          然后pip安装filename.Whl,没有问题了!

          答案来自一个中文网站:Answer Link

          【讨论】:

            【解决方案9】:

            是的,这发生在我运行 python 2.713 anaconda 4 64 位的 Windows 10 上。我曾使用 conda 安装 pyopengl,但收到与上述相同的错误。所以我从 transmissionzero 下载了 freeglut,然后将 freeglut.dll(对我来说是 64 位)复制到与我的源文件相同的目录中(它只需要在 dll 搜索路径中),一切都很好。

            【讨论】:

              【解决方案10】:

              我知道有点晚了。我在 Windows 中也遇到了 python 2.7(32 位)的这个问题。我尝试了user2723240提到的方法,但仍然失败。最后,我通过将glue32.dll复制到C盘的System32并将glue32.dll复制到我的源文件目录中来解决了这个问题。现在效果很好。

              【讨论】:

              • 是的,我试过了,但它在我的设置上不起作用。只有在 OP 中链接到的非官方版本对我有用。
              【解决方案11】:

              在 linux 上,pyopengl 模块尝试使用 ctypes 模块将 glut 库加载为简单的“glut”。根据 ctypes 文档,必须为 loadLibrary 例程提供完整的文件名。因此,我创建了一个指向 libglut.so 的符号链接,并将其命名为“glut”,一切正常。

              【讨论】:

                【解决方案12】:

                以下命令应该适用于 Anaconda 用户:

                conda install -c conda-forge freeglut

                https://anaconda.org/conda-forge/freeglut

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-01-02
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-08-19
                  • 1970-01-01
                  相关资源
                  最近更新 更多