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
, больше не проблема!
Ответ был сделан на китайском веб-сайте: Ответная ссылка