PyOpenGL的安装与错误解决
1. 引言
OpenGL,一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)
OpenGL规范严格规定了每个函数该如何执行,以及它们的输出值。至于内部具体每个函数是如何实现(Implement)的,将由OpenGL库的开发者自行决定(译注:这里开发者是指编写OpenGL库的人)。因为OpenGL规范并没有规定实现的细节,具体的OpenGL库允许使用不同的实现,只要其功能和结果与规范相匹配(亦即,作为用户不会感受到功能上的差异)
OpenGL只是一种规范,不仅语言无关,而且平台无关。规范只字未提获得和管理OpenGL上下文相关的内容,而是将这些作为细节交给底层的窗口系统。出于同样的原因,OpenGL纯粹专注于渲染,而不提供输入、音频以及窗口相关的API
PyOpenGL是常见的跨平台语言Python与OpenGL和相关API的绑定,支持:
- OpenGL v1.1 to 4.4
- GLES 1 to 3.1 (Experimental)
- GLU
- EGL, WGL, GLX
- GLUT, FreeGLUT
- GLE 3 (GL Extrusion Library)
- hundreds of extensions to GL, GLES, EGL, WGL and GLX
OpenGL_accelerate,PyOpenGL的cython编码加速器模块,可选,但建议在可用的情况下使用
2. 安装使用
诚然,直接使用Pip进行安装是最简便的,但是往往存在问题(当然,不妨试试)
按照PyOpenGL官网PyOpenGL -- The Python OpenGL Binding (sourceforge.net)的指导,使用以下命令安装:
$ pip install PyOpenGL PyOpenGL_accelerate
不妨按照示例代码测试一下:
from OpenGL.GL import *
from OpenGL.GLUT import *
def drawFunc():
glClear(GL_COLOR_BUFFER_BIT)
glRotatef(1, 1, 1, 0)
glutWireTeapot(0.5)
glFlush()
glutInit()
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
glutInitWindowSize(400, 400)
#参数为b类型而不是string
glutCreateWindow(b"First")
glutDisplayFunc(drawFunc)
glutMainLoop()
如果顺利的话,应该会出现一个茶壶:

但是,往往会出现这个错误:Attempt to call an undefined function glutInit, check for bool(glutInit) before calling
大部分博客都有说到这个问题:
- 超简单的PyOpenGL安装教程,我竟然还要总结一下,有毒!!!_光子俊的博客-CSDN博客_pyopengl安装
- Python安装配置OpenGL环境的全过程记录--易采站长站 (easck.com)
- 尝试调用未定义的函数 glutInit - IT宝库 (itbaoku.cn)
这些博客基本都提到了动态链接库与32/64位库的问题,采取的问题基本都是去下载whl文件再安装:
下载地址:Archived: Python Extension Packages for Windows - Christoph Gohlke (uci.edu)
选择对应的版本进行安装,可以参考:Python安装配置OpenGL环境的全过程记录--易采站长站 (easck.com)
3. 错误解决
使用pip安装的方式错在哪里呢?
笔者下载Archived: Python Extension Packages for Windows - Christoph Gohlke (uci.edu)的安装文件,使用解压软件打开,可以发现里面GLUT对应含有DLL文件:

然而,通过pip方式安装的whl文件却不包含DLL文件:

笔者下载源码安装包,可以看到源码里面包含了DLL文件:

所以问题的根源就显而易见了:通过pip方式安装的whl文件却不包含DLL文件所以无法直接执行
解决的方法有很多:
- 下载对应的DLL添加到PATH(环境变量)中,无需纠结放在那个文件
- 下载包含DLL的whl安装包,本地安装
- 下载源码进行安装
以下对上述三种方法进行进一步叙述:
下载对应的DLL添加到PATH(环境变量)
获取glut或者freeglut的对应的dll文件,然后将dll文件添加到PATH(环境变量),DLL可以去官网下载,也可以从PyOpenGL源码包、包含DLL的whl安装包中等获取,可以参考:
下载包含DLL的whl安装包本地安装
下载包含DLL的whl安装包,本地安装,就解决了DLL缺失的问题,可以参考:
下载源码进行安装
下载PyOpenGL源码(包含DLL),进行本地安装,可以参考:
推荐:下载包含DLL的whl安装包本地安装
从上图中,我们可以看到PyOpenGL 3.1.6 版本中使用的是freeglut,在 3.1.5 中是glut和freeglut都有,笔者发现在3.1.1版本中用的是glut(如下图所示),可以看到glut逐渐被废弃,如果搞不清楚需要什么DLL,那就下载包含DLL的whl安装包本地安装

一些想法:
笔者看到pip源上有源码包,那能否跳过whl文件直接使用源码安装呢?

经过笔者搜索,在没有whl文件的情况下,pip就会下载源码进行安装,然而,在有whl文件的情况下,pip似乎没有办法跳过whl文件直接源码安装,先下载源码再本地安装就显得麻烦
4. 参考资料
[1][OpenGL - LearnOpenGL CN (learnopengl-cn.github.io)](https://learnopengl-cn.github.io/01 Getting started/01 OpenGL/)
[3]PyOpenGL -- The Python OpenGL Binding (sourceforge.net)
[4]超简单的PyOpenGL安装教程,我竟然还要总结一下,有毒!!!_光子俊的博客-CSDN博客_pyopengl安装
[5]Python安装配置OpenGL环境的全过程记录--易采站长站 (easck.com)
[6]尝试调用未定义的函数 glutInit - IT宝库 (itbaoku.cn)
[7]PyOpenGL Installation (sourceforge.net)
[8]python opengl安装提示没有glutinit的解决方法。_ljhhh7890的博客-CSDN博客
PyOpenGL的安装与错误解决的更多相关文章
- 2016最新CocoaPods安装和错误解决 + 自己的经验
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 20.0px Times; color: #333333; background-color: #fffff ...
- setuptools安装和错误解决
错误解决:ImportError No module named setuptools GitHub: https://github.com/pypa/setuptools 下载安装 wget htt ...
- redis 安装 与错误解决办法
redis 安装与安装中遇到的错误 redis 安装 wget http://download.redis.io/releases/redis-4.0.11.tar.gz .tar.gz cd red ...
- SQL Server2005中文版x64安装29506错误解决办法
在使用SQL Server 2005简体中版安装时,使用X86(32位操作系统下)安装没有出现任何问题.可是在X64(64位操作系统下)安装过程没有出现问题,可是安装完成后却没有Microsoft S ...
- MongoDB下载+安装+配置+错误解决方法
下载 官网下载: https://www.mongodb.com/download-center/community Server=>Download 安装 下载完成后安装 建议下载根目录(下过 ...
- CTC安装及其错误解决办法:binding.cpp:92:49: error: cannot convert ‘THCudaTensor*’ to ‘const THFloatTensor*’ for argument ‘1’ to ‘int64_t THFloatTensor_size(const THFloatTensor*, int)’
CTC安装: 1. 在终端执行命令:git clone https://github.com/SeanNaren/warp-c) (效果如下图,大家不用管我前面括号的内容,那是我打开的虚拟环境) 2. ...
- Linux下glui 的安装,以及错误解决
下载源文件: http://sourceforge.net/projects/glui/ 2. 解压源文件 3. 用terminal进入glui-2.36/src文件 4. make 5. make之 ...
- mysql-5.6.27源码安装及错误解决办法
wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.27.tar.gz yum install -y cmake 当然也可以自己下载源码包安 ...
- java安装1335错误解决办法(亲测)
心血来潮想了解一下java,结果一开始就碰到了让心"恶心"的1335错误. 废话不多说,直接看下面: 你可以先尝试在这个链接下载java.exe文件 http://www.orac ...
- wget在linux中安装出现错误解决办法
在使用wget命令报错 certificate common name 'xxx' doesn't match requestde host name,我们一般的解决办法是查找下载地址,但是有时候更换 ...
随机推荐
- 【每日一题】【暴力、动态规划、动规优化、贪心】2022年1月21日-NC19 连续子数组的最大和/最大子序和
同:最大子序和 https://www.cnblogs.com/liujinhui/p/15574312.html 描述输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组. ...
- 万字长文解析Scaled YOLOv4模型(YOLO变体模型)
一,Scaled YOLOv4 摘要 1,介绍 2,相关工作 2.1,模型缩放 3,模型缩放原则 3.1,模型缩放的常规原则 3.2,为低端设备缩放的tiny模型 3.3,为高端设备缩放的Large模 ...
- AVM 拖动组件 movable-view 介绍
应用开发中拖动功能是比较常见的 ,如滑动解锁,滑动验证码,实现一些小游戏,少儿编程中常见. avm.js 是多端开发框架,一套代码可同时编译为APP .小程序.h5. avm 框架中实现拖动功能非常简 ...
- OpenMP 原子指令设计与实现
OpenMP 原子指令设计与实现 前言 在本篇文章当中主要与大家分享一下 openmp 当中的原子指令 atomic,分析 #pragma omp atomic 在背后究竟做了什么,编译器是如何处理这 ...
- python实现简单信息收集
python实现简单信息收集 import whois import socket import sys def Query(domain): ip = socket.gethostbyname(st ...
- Array.from的9大优美用途!!!看了不后悔哦~~~~
纯手工打印调试~~~~ 九种用途~~~超赞的哦~~~~~ <!DOCTYPE html> <html lang="en"> <head> < ...
- obj转换为gltf方法three.js一步一步来--性能优化超厉害的!!!!!超赞操作!!!Obj模型转Gltf模型并超强压缩!!!!!
1.准备好模型文件table.obj和table.mtl 2.下载obj2gltf 下载地址https://github.com/AnalyticalGraphicsInc/obj2gltf 解压至文 ...
- Linux简易入门
安装Linux系统 VMware安装 首先安装VMware VMware下载地址 在镜像网站下载镜像,直接进行安装 虚拟机安装 镜像下载地址 这里使用\(16.04\)版本 点击创建新的虚拟机 根据向 ...
- Keil 5(Keil C51)安装与注册 [ 图文教程 ]
前言 Keil C51 是 51 系列兼容单片机 C 语言软件开发系统,支持 8051 微控制器体系结构的 Keil 开发工具,适合每个阶段的开发人员,不管是专业的应用工程师,还是刚学习嵌入式软件开发 ...
- centos7系统的安装部署过程
一.进入系统引导界面进行配置 引导项说明: 安装centos7系统(*) 测试光盘镜像并安装系统 排错模式(修复系统 重置系统密码) 补充:centos7系统网卡名称 默认系统的网卡名称 eth0 e ...