今天尝试学习使用 pygame
时,按照我的习惯一发 pip install
下去,本以为很简单的事情,没想到遇到了不少问题,顺手记录一下。
pygame
是使用 SDL
库写就的游戏框架,自然强依赖于 SDL
,我的 python@3
是使用 macOS
的 brew
管理器直接安装的,可能由于不是编译安装的问题,缺少了这个库,继续使用 brew
安装一下就好:
$ brew install sdl sdl-image # 注意别装 sdl2,名字不一样
这个问题我翻遍了 stackoverflow 和 github issues 也没有找到准确的解决方案,最终在这个问题找到了一些端倪,最后发现了一个意想不到的 bug。
正常情况我都会默认从 pip
安装的包是没有问题的,但是在翻看了 pygame
的源码之后,我确信我的代码没有问题,并且 pygame
也是正确安装的。
在了解到 pygame
曾是基于 PIL
来进行图片解析后,我也尝试过通过 pip install PIL
来安装 PIL,但随后我了解到这个包在 python3
中已经被弃用了,也就是说 pygame==1.9.0
不可能依赖于这个包。
这时候我开始怀疑 pip install
的内容是否完整了,在翻看了通过 pip
下载安装的 pygame
源码确认无误后,我尝试了重装但没有解决,接着我通过 pip uninstall pygame
卸载了 pygame
后,换用了下面的命令重新安装:
$ sudo -H python -m pip install -U pygame --user
注意到编译的部分明显变成长了以后,我意识到这次应该对了,我使用以下命令测试了 pygame.image.load()
方法:
$ python pygame.examples.aliens.py
没有问题。
这个问题之所以很难想到其实主要是我的惯性思维的问题,如果我第一时间尝试下载 .whl
文件编译安装就应该不会遇到这些问题,但也同样让我见识了第三方包管理器的不靠谱,还是应该养成从源码编译安装的好习惯。