Создание исполняемых файлов для Python 3 и PyQt
Я построил довольно простое приложение в Python 3.1 с помощью PyQt4. В настоящее время я хочу, чтобы приложение было распространено на компьютеры без какой-либо из них.
я почти исключительно забота о платформах Windows, поэтому моя цель-иметь один исполняемый файл и, возможно, некоторые файлы ресурсов и .библиотеки DLL, в конце концов.
обыскав все вокруг, я пришел к выводу, что
- py2exe поддерживает только Python до версия 2.7
- pyinstaller поддерживает Python только до версии 2.6
- cx_Freeze не работает для меня, потому что я продолжаю получать следующее сообщение об ошибке при попытке выполнить успешно построить двоичное:
Y:Userslulzbuildexe.win32-3.1>system_shutdown.exe
Traceback (most recent call last):
File "Y:Program Files (x86)Pythonlibsite-packagescx_FreezeinitscriptsConsole3.py", line 27, in exec(code, m.__dict__)
File "Y:/Users/lulz/Documents/Coding/Python3/projects/System Shutdown/system_shutdown.pyw", line 5, in from PyQt4 import QtCore
File "ExtensionLoader_PyQt4_QtCore.py", line 16, in AttributeError: 'NoneType' object has no attribute 'modules'
Так что моя проблема в основном две проблемы здесь:
- есть ли другой способ, кроме cx_Freeze, создавать двоичные файлы с моей конфигурацией?
- если нет, то что может cx_Freeze проблема быть?
Я могу предоставить больше информации о второй проблеме, если это необходимо, например, мой вызов cx_Freeze, мой сценарий установки distutils и т. д.
уже Спасибо за вашу помощь и комментарии.
2 ответов
вы можете исправить это, добавив одну строку кода в freeze.py в вашем пакете cx_Freeze.
это описано здесь: http://www.mail-archive.com/cx-freeze-users@lists.sourceforge.net/msg00212.html
Он работал для меня по крайней мере :)
Ура, Альмар!--1-->
для Python 3.3 и более поздних версий здесь хорошее разрешение: py2exe - создать один исполняемый файл
установить py2exe:
pip install py2exe
затем добавить кроме 'your_script.py-файл, следующий .Make_exe.py файл:
from distutils.core import setup
import py2exe, sys
class Make_exe():
def __init__(self, python_script):
sys.argv.append('py2exe')
setup(
console=[{'script': python_script}],
zipfile = None,
options={
'py2exe':
{
'bundle_files': 1,
'compressed': True,
# Add includes if necessary, e.g.
'includes': ['lxml.etree', 'lxml._elementpath', 'gzip'],
}
}
)
if __name__ == '__main__':
Make_exe('your_script.py')
и если вы хотите сделать 'your_script.py' восстановление как сценарий.exe'каждый раз, когда вы запускаете его в python, вы можете добавить к своей главной:
import subprocess
import sys
if __name__ == '__main__':
currentFile = sys.argv[0]
if currentFile.lower().endswith(".py"):
exitCode = subprocess.call("python Make_exe.py")
if exitCode==0 :
dirName = os.path.dirname(currentFile)
exeName = os.path.splitext(os.path.basename(currentFile))[0] + '.exe'
exePath = dirName + "/dist/" + exeName
cmd = [exePath] + sys.argv[1:]
print ("Executing command:\n %s" % cmd)
exitCode = subprocess.call(cmd)
sys.exit(exitCode)
else:
print ("This will be executed only within the new generated EXE File...")