PyOpenGL glutInit NullFunctionError

Я запускаю Anaconda Python 2.7 на машине Win7 x64 и использовал

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

Я просмотрел похожие ошибки, размещенные на этом форуме, но ни одна из предлагаемых исправлений не работает, поэтому я спрашиваю, что здесь не так?

Неисправна ли установка? Правильны ли импорт?

EDIT: после многих исправлений для официального выпуска я использую неофициальный выпуск, который отлично работает из Неофициальные бинарные файлы Windows для пакетов расширения Python

Ответы

Ответ 1

После поиска решения аналогичной проблемы я столкнулся с этой группой google, которая отвечает на вопрос: https://groups.google.com/forum/#!topic/glumpy-users/aC1NjEHXtEE

Существует проблема с OpenGL.GLUT при загрузке в качестве пипа из официального источника. Удалите OpenGL с помощью pip, затем загрузите OpenGL из http://www.lfd.uci.edu/~gohlke/pythonlibs/

Ответ 2

Для людей в Linux с этой ошибкой после установки через easy_install PyOpenGL или pip install PyOpenGL.

- > Установите дистрибутив как: sudo apt-get install python-opengl - это работает для меня.

Ответ 3

В соответствии с приведенной ниже ссылкой проблема была связана с установкой переполнения, а не с pip install. Кажется, что файлы перенасыщения не входят в пакет PyOpenGL или PyOpenGL_accelerate. Вы должны скачать их отдельно.

fooobar.com/questions/382415/...

Пользователь Windows может использовать приведенную ниже ссылку для загрузки перенасыщения, как указано в данной ссылке. ftp://ftp.sgi.com/opengl/glut/glut3.html.old#windows

Пользователи Linux могут просто установить перенасыщение, используя следующую команду:

sudo apt-get install freeglut3-dev

Надеюсь, что это поможет:)

Ответ 4

Если вы устанавливаете PyOpenGL из easy_install, pip или conda, убедитесь, что вы уже установили реализацию GLUT, например FreeGLUT (готовые двоичные файлы Windows).

Для FreeGLUT скопируйте распределенные файлы в папку на вашем жестком диске, а затем добавьте путь к каталогу bin (который содержит DLL GLUT) в переменную среды PATH. Затем PyOpenGL должен работать должным образом.

Ответ 5

для python 2.7, PyopenGL требуется компилятор vС++ 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')

и он запускается на окнах 7

Ответ 6

Да, это случилось со мной в Windows 10 с запуском python 2.713 anaconda 4 64 бит. Я использовал conda для установки pyopengl, но получил ту же ошибку, что и выше. Поэтому я загрузил freeglut из передачиzero и просто скопировал файл freeglut.dll(64 бит для меня) в тот же каталог, что и исходный файл (он просто должен быть в пути поиска dll), и все было хорошо.

Ответ 7

Я знаю, что немного поздно. Я также столкнулся с этой проблемой с python 2.7 (32 бита) в окнах. Я попробовал метод, упомянутый пользователем2723240, но все еще не удалось. Наконец, я решил эту проблему, скопировав файл glue32.dll в System32 на диске C и скопировав файл glue32.dll в каталог исходного файла. Теперь он работает хорошо.

Ответ 8

Я получил ту же ошибку и решил установить необходимые файлы из здесь.

Загрузите эти файлы:

  • 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 бит)

установите эти файлы .whl для 64 бит:

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

установите эти .whl файлы для 32 бит:

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

Ответ 9

В linux модуль pyopengl пытается использовать модуль ctypes для загрузки библиотеки переполнения как просто "перегиб". Согласно документации ctypes, в процедуре loadLibrary должно быть указано полное имя файла. Поэтому я сделал символическую ссылку на libglut.so и назвал ее "переутомлением", и все просто сработало.

Ответ 10

Мой случай отличается от Python 3.6 и Windows 10. Однако точно такое же сообщение об ошибке. Пробовал все вышеперечисленные решения, без успеха. Загруженный WHL файл прямо на мой компьютер и версия python из ЗДЕСЬ

Затем pip устанавливает имя файла. WHL, больше не проблема!

Ответ был сделан на китайском веб-сайте: Ответная ссылка