PyOpenGL glutInit NullFunctionError

时间:2014-11-02 15:04:14

标签: python-2.7 glut pyopengl

我在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完美地运行

12 个答案:

答案 0 :(得分:12)

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

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

下载OpenGL

答案 1 :(得分:10)

根据以下链接,问题在于过剩而不是pip install。似乎过剩文件不属于PyOpenGL或PyOpenGL_accelerate包。你必须单独下载它们。

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

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

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

sudo apt-get install freeglut3-dev

希望这会有所帮助:)

答案 2 :(得分:7)

Linux上的人在通过easy_install PyOpenGLpip install PyOpenGL安装后出现此错误。

- &GT;将分发包安装为:sudo apt-get install python-opengl - 这对我来说是

答案 3 :(得分:6)

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

对于FreeGLUT,将分布式文件复制到硬盘驱动器上的某个位置,然后将bin目录(包含GLUT DLL)的路径添加到PATH环境变量中。然后PyOpenGL应该按预期工作。

答案 4 :(得分:2)

对于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上运行

答案 5 :(得分:2)

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

答案 6 :(得分:1)

这主要是因为您正在运行 64-bit windows put pip 正在安装 32-bit 版本的 PyOpenGL。

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

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

  2. 从这里下载 PyOpenGL 和 PyOpenGL 加速的 64 位版本: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

*如果您重新安装其中任何一个(Python、OpenGL),则必须重新启动桌面

*建议将您的 pip 版本保持在 20.3,我已将其从 21.1.3 降级

答案 7 :(得分:0)

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

答案 8 :(得分:0)

我收到同样的错误并解决了从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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

我的情况不同,Python 3.6和Windows 10.但完全相同的错误消息。尝试了以上所有解决方案,没有成功。 将WHL文件从HERE

下载到我的计算机和python版本

然后pip安装文件名。Whl,不再有问题!

答案来自中文网站:Answer Link

答案 11 :(得分:0)

以下内容适用于Anaconda用户:

conda install - c conda-forge freeglut

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

相关问题