#python #freeze #pyopengl
#python #замораживание #pyopengl
Вопрос:
У меня есть это приложение pyopengl, и я пытаюсь заморозить его с помощью bbfreeze. К сожалению, когда я запускаю замороженное приложение, оно выдает ошибку с этим:
Traceback (most recent call last):
File "<string>", line 6, in <module>
File "__main__.py", line 128, in <module>
File "__main__client__.py", line 11, in <module>
File "ui.py", line 15, in <module>
File "OpenGL/GLUT/__init__.py", line 2, in <module>
File "OpenGL/raw/GLUT/__init__.py", line 6, in <module>
File "OpenGL/raw/GLUT/constants.py", line 7, in <module>
File "OpenGL/platform/__init__.py", line 36, in <module>
File "OpenGL/platform/__init__.py", line 27, in _load
File "OpenGL/plugins.py", line 14, in load
File "OpenGL/plugins.py", line 28, in importByName
ImportError: No module named glx
Вот необходимая информация о версии:
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import OpenGL
>>> OpenGL.__version__
'3.0.1b2'
>>> import bbfreeze
>>> bbfreeze.version
(0, 97, 3)
Я пытаюсь запустить его на той же машине, на которой я его замораживаю, и размороженное приложение работает нормально на этой машине.
Кому-нибудь удалось заставить это работать? или, возможно, предоставить некоторые рекомендации по отладке?
Комментарии:
1. Мне удалось заставить cxfreeze заморозить то же приложение, и оно выдает ту же ошибку (хотя и отформатировано по-другому).
Ответ №1:
Попробуйте явно добавить «OpenGL.platform.glx» в список включенных модулей в замораживании. Я думаю, что опция bbfreeze «включает» — это то, что вы хотите.
Обновление: взгляните на то, как PyInstaller делает это: http://www.pyinstaller.org/browser/trunk/PyInstaller/hooks/hook-OpenGL.py
Вероятно, вам потребуется добавить все эти модули в свой список включаемых.
Комментарии:
1. Мне действительно нужны были другие, кроме numarrays, похоже, у меня его нет. Добавление их в includes действительно решило мою проблему, спасибо.
2. Для списка модулей OpenGL.arrays.* я использую этот скрипт:
for f in $(setopt extended_glob;ls $(python3 -c "import OpenGL;print(OpenGL.__path__[0])")/arrays/*.py|grep -v __init__);do m="${f##*/}";echo -n ,OpenGL.arrays."${m%.py*}";done
Ответ №2:
Я также сталкиваюсь с той же проблемой, пока не прочитаю документацию, в которой говорится, что:
bbfreeze has been tested with python 2.4, 2.5 and 2.6. bbfreeze will not work with python versions prior to 2.3 as it uses the zipimport feature introduced with python 2.3.
Поэтому я думаю, что лучше всего использовать упомянутые версии python! Надеюсь, это поможет!