web-dev-qa-db-fra.com

PyOpenGL glutInit NullFunctionError

J'utilise Anaconda Python 2.7 sur une machine Win7 x64 et utilisé 

pip install PyOpenGL PyOpenGL_accelerate

sur la ligne de commande Anaconda pour installer PyOpenGL.

J'ai du code (pas le mien, je dois l'avouer) qui utilise 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()

Je cours en entrant ce qui suit à la ligne de commande:

python main.py peaucellier.txt

Mais ensuite, obtenez l'erreur suivante (la ligne 371 est la ligne glutInt (sys.argv) ci-dessus)

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

J'ai consulté des erreurs similaires postées sur ce forum, mais aucune des corrections proposées ne fonctionne. C'est pourquoi je demande, qu'est-ce qui ne va pas ici?

L'installation est-elle en cause? Les importations sont-elles correctes?

EDIT: Après avoir essayé de nombreux correctifs pour la version officielle, j'utilise maintenant une version non officielle qui fonctionne parfaitement à partir de Fichiers binaires Windows non officiels pour les packages d'extension Python

17
DrBwts

Après avoir cherché une solution à un problème similaire, j'ai trouvé ce groupe Google qui répond à la question suivante: https://groups.google.com/forum/#!topic/glumpy-users/aC1NjEHXtEE

Il y a un problème avec OpenGL.GLUT lors du téléchargement en tant que pip depuis la source officielle. Désinstallez OpenGL avec pip, puis téléchargez-le à partir de http://www.lfd.uci.edu/~gohlke/pythonlibs/

11
user2723240

Selon le lien ci-dessous, le problème était lié à l'installation de Glut plutôt qu'à pip install. Il semble que les fichiers glut ne fassent pas partie des packages PyOpenGL ou PyOpenGL_accelerate. Vous devez les télécharger séparément.

_ { https://stackoverflow.com/a/39181193/7030177 } _

Les utilisateurs Windows peuvent utiliser le lien ci-dessous pour télécharger glut, comme indiqué dans le lien indiqué ftp://ftp.sgi.com/opengl/glut/glut3.html.old#windows }

Les utilisateurs de Linux peuvent simplement installer glut en utilisant la commande suivante:

Sudo apt-get install freeglut3-dev

J'espère que cela t'aides :)

9

Pour les personnes sous Linux avec cette erreur après l'installation via easy_install PyOpenGL ou pip install PyOpenGL

-> Installez le paquet de distribution en tant que: Sudo apt-get install python-opengl - cela fonctionne pour moi.

7
pds

Si vous installez PyOpenGL depuis easy_install, pip ou conda , vérifiez que vous avez déjà installé une implémentation GLUT, telle que FreeGLUT ( binaires Windows prédéfinis ).

Pour FreeGLUT, copiez les fichiers distribués dans un emplacement de votre disque dur, puis ajoutez le chemin d'accès au répertoire bin (qui contient les DLL GLUT) à votre variable d'environnement PATH. PyOpenGL devrait alors fonctionner comme prévu.

6
Gnat

Oui, cela m’est arrivé sous Windows 10 exécutant python 2.713 anaconda 4 64 bits. J'avais utilisé conda pour installer pyopengl mais j'avais reçu la même erreur que ci-dessus. J'ai donc téléchargé freeglut à partir de transmissionzero et copié le fichier freeglut.dll (64 bits pour moi) dans le même répertoire que mon fichier source (il doit simplement figurer dans le chemin de recherche de la DLL), et tout était bien. 

2
rhoids

pour python 2.7, PyopenGL a besoin du compilateur vc ++ 9, download et installez-le.

puis:

python -m pip install --upgrade pip

pip install image

pip install numpy

pip install PyOpenGL PyOpenGL_accelerate

J'ai téléchargé freeglut

décompressez-le et ajoutez le répertoire bin au chemin lors de l'appel: glutCreateWindow("sometitle") remplacé par glutCreateWindow(b'sometitle')

et l'a fait fonctionner sur Windows 7

2
Mamuka Arabuli

J'ai eu la même erreur et un résolu l'installation des fichiers requis de ici .

Téléchargez ces fichiers:

  • PyOpenGL-3.1.1-cp27-cp27m-win32.whl (à télécharger si votre ordinateur est en 32 bits) 

  • PyOpenGL-3.1.1-cp27-cp27m-win_AMD64.whl (télécharger si votre ordinateur 64 bits)

  • PyOpenGL_accelerate-3.1.1-cp27-cp27m-win32.whl (à télécharger si votre ordinateur est en 32 bits) 

  • PyOpenGL_accelerate-3.1.1-cp27-cp27m-win_AMD64.whl (télécharger si votre ordinateur 64 bits)

installez ces fichiers .whl pour 64 bits:

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

installez ces fichiers .whl sur 32 bits:

pip install PyOpenGL-3.1.1-cp27-cp27m-win32.whl 
pip install PyOpenGL_accelerate-3.1.1-cp27-cp27m-win32.whl
0
Harun ERGUL

Je sais qu'il est un peu tard. J'ai également rencontré ce problème avec Python 2.7 (32 bits) dans Windows. J'ai essayé la méthode mentionnée par l'utilisateur2723240 mais j'ai quand même échoué. Enfin, j'ai résolu ce problème en copiant glue32.dll dans System32 in C et en copiant glue32.dll dans le répertoire de mon fichier source. Cela fonctionne bien maintenant.

0
ccy

Ce qui suit devrait fonctionner pour les utilisateurs d’Anaconda:

conda install - c conda-forge freeglut

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

0
Nirmal

Mon cas est différent, Python 3.6 et Windows 10. Cependant, exactement le même message d'erreur. J'ai essayé toutes les solutions ci-dessus, sans succès. Téléchargé le fichier WHL directement sur mon ordinateur et la version de python depuis ICI

Puis pip installe nomfichier .Whl, plus de problème!

La réponse provenait d'un site web chinois: Answer Link

0
Mars Carl

Sur linux, le module pyopengl tente d'utiliser le module ctypes pour charger la bibliothèque glut simplement comme "glut". Selon la documentation ctypes, le nom de fichier complet doit être attribué à la routine loadLibrary. Par conséquent, j'ai créé un lien symbolique vers libglut.so et je l'ai nommé «surabondance» et tout fonctionne.

0
Travis