Компиляция программы Pyqt4
Я пытаюсь упаковать написанную мной программу (используя Pyqt4) в один исполняемый файл для Linux. Я пытался использовать Pyinstaller, однако у него есть проблемы с импортом Gio (для настроек)
from gi.repository import Gio
Запуск приложения даст:
ImportError: cannot import name Gio
Затем я попытался использовать bbFreeze. Проблема в том, что после компиляции и запуска приложения я получаю следующее сообщение об ошибке:
TypeError: GObject.__init__() takes exactly 0 arguments (1 given)
Для bbFreeze это мой скрипт, который я запускаю для компиляции кода:
#!/usr/bin/env python
from bbfreeze import Freezer
includes = ["gio"]
excludes = []
bbFreeze_Class = Freezer('dist', includes=includes, excludes=excludes)
bbFreeze_Class.addScript("main.py", gui_only=True)
bbFreeze_Class.use_compression = 0
bbFreeze_Class.include_py = True
bbFreeze_Class()
Я использую Ubuntu 11.10 и Python 2.7. Если кто-то может помочь, это было бы здорово. Я впервые пишу на Python и пытаюсь его скомпилировать (поэтому я не уверен, что есть лучшие альтернативы).
2 ответа
Вы на самом деле не компилируете его, а просто упаковываете его. Компиляция - это то, где вы переводите свой исходный код в машиночитаемый объектный код в собственном наборе инструкций вашего компьютера. Например, вы компилируете код C в исполняемый файл.
Python не компилируется, он интерпретируется. Но вы все равно можете выполнить их, добавив #!/usr/bin/env python
к любому скрипту и пометив его как исполняемый.
С точки зрения упаковки приложения Python для распространения, это немного больше хлопот, чем вы надеетесь, но есть официальные инструкции от Ubuntu.
Кроме того, если вы разрабатываете с Ubuntu Quickly, у него есть команда для упаковки.
На самом деле Python поддерживает упаковку. Вам лучше изучить distutils или setuptools для упаковки вашего пакета python. Я рекомендую упаковку Python для конкретной дистрибутивной упаковки, поскольку она будет использоваться в любом дистрибутиве. Также взгляните на некоторые проекты, которые используют эти инструменты для упаковки в pypi, например, Django.