Python 如何将PyQt脚本(.py)编译为适用于windows(.exe)和/或linux的单个独立可执行文件?

Python 如何将PyQt脚本(.py)编译为适用于windows(.exe)和/或linux的单个独立可执行文件?,python,qt4,compilation,executable,pyqt4,Python,Qt4,Compilation,Executable,Pyqt4,我开始摆弄PyQt,并从PyQt白皮书示例应用程序()中创建了一个“漂亮”的脚本 它可以在Windows和Linux中完美地工作(两者都已安装了qt环境) 现在我的问题是:因为我试图使用Qt,因为它是编译的(至少是纯C++的基于Qt),我怎么编译一些exe文件来在Windows上运行它,或者是一个Linux的独立执行程序。 关键是,由于速度和可移植性,我希望编译程序,而不是从源代码进行解释,这需要在任何机器上进行先前的设置。例如,其中一个目标是通过电子邮件向根本不是程序员的同事发送小型gui脚本

我开始摆弄PyQt,并从PyQt白皮书示例应用程序()中创建了一个“漂亮”的脚本

它可以在Windows和Linux中完美地工作(两者都已安装了qt环境)

现在我的问题是:因为我试图使用Qt,因为它是编译的(至少是纯C++的基于Qt),我怎么编译一些exe文件来在Windows上运行它,或者是一个Linux的独立执行程序。
关键是,由于速度和可移植性,我希望编译程序,而不是从源代码进行解释,这需要在任何机器上进行先前的设置。例如,其中一个目标是通过电子邮件向根本不是程序员的同事发送小型gui脚本。

有一个名为Py2EXE的模块,它将完成您想要做的事情。它会将脚本转换为.exe文件,以便在windows上运行。我不确定linux,但我敢打赌在某个地方有一个模块。 您可能想退房。它声称创建的可执行文件是“跨平台的,应该可以在Python本身工作的任何平台上工作。”

我在探索使用PyQt的包时遇到了它。我将moneyguru.exe文件下载到我的Windows XP系统中,并执行了它,它在Python 3.2上运行良好


您可以从中克隆hg repo以查看它是如何完成的。

如果您想完全创建一个独立的可执行文件,可以尝试以下操作:。我觉得创建一个独立的可执行文件比cx_freeze或py2exe(以我的经验)要好。易于使用(网站提供完整的文档)

更新: 根据@SoursopTree和@讲师Maker的最新信息,它现在支持python版本3.3-3.6

更新:如果要创建完全独立的.exe,请传递-onefile参数。例如:

pyinstaller.exe --onefile --windowed app.py
因为我试图使用Qt,因为它是编译的

通过使用Python,您正在挫败这一优势。虽然其他答案介绍了在不要求用户自己安装Python的情况下分发Python代码的选项,但Python是一种解释语言,因此每个选项都有缺点(例如速度、程序大小、兼容性等)。他们可能是你的交易破坏者,也可能不是

您的另外两个选择是:

  • 接受Python的解释性质:让与您共享程序的人安装Python及其依赖项。不过,您可以显著简化此过程。例如,在Linux上,使用包管理器
  • 用C++编写程序。这样做将允许您真正编译单个本机可执行文件。不幸的是,这意味着放弃Python,但是人们仍然使用C++等不太漂亮的语言编写代码,听起来好像你可能碰到了其中的一些。

  • 在花了很多周的时间在这上面,并尝试了所有的替代方案——PyInstaller、py2exe、cx_freeze我创建了自己的库:。它基于PyInstaller,但解决了许多常见的难点。它还允许您在Windows、Mac和Linux上创建本机安装程序。

    我正在使用pyinstaller

    pip install pyinstaller
    
    我不知道,但是pyinstaller没有附加sip.pyd。因此,您需要一个PyQt5\sip.pyd。我推荐漂亮的windows风格qwindowvistastyle.dll

    将build.cmd文件设置为:


    ^
    -命令文件(.cmd.bat)中的新行

    我想回答您的windows问题。对于Linux和Mac OS X,这里有一个问题:您让它工作了吗?我在这里有一个类似的问题:@DuhCompewtuhr不幸的是,我没有做额外的尝试或项目,每当我需要一些简单的GUI材料时,我仍然使用PyGtk。我知道这个模块可能重复,但我不确定它是否等同于在本机qt中创建一个相同的应用程序并编译它。对不起,如果我想要的没有意义。我将尝试用py2exe编译脚本,并在这里发布结果。现在谢谢你!O'Donnel:“moneyguru.exe文件(…)在Python 3.2上运行良好”。唐,我不明白。你在Python上运行了一个.exe文件?您使用cx\u freeze编译py源代码以获取.exe文件?还是别的什么?谢谢@赫尔顿比克:很抱歉搞混了。下载文件是
    moneyGuru\uwin\u2\u3\u7.exe
    。当您执行该命令时,它会在
    C:\Program Files
    中创建一个名为
    Hardcoded Software
    的目录,其中包含启动Python应用程序的文件
    moneyGuru.exe
    。@heltonbiker:我还没有尝试安装Linus或Mac版本,但我希望它们能以类似的方式运行。嘿…,好消息!它现在支持python 3.3–3.5。为什么不更新答案,提到它支持python 3?不是每个人都读过评论:)我看到pyinstaller现在也支持Python 3.6:多版本:支持Python 2.7和Python 3.3-3.6。@YudaPrawira:可以在没有安装pyqt的机器上运行pyinstaller生成的可执行文件吗?我正在尝试部署pyqt5应用程序,并且面临问题…@Abin请检查此处,我认为您可以使用--hidden import命令选项。值得一试。先生,您能确认支持哪些版本的Python和PyQt吗?目前仅支持Python 3.5和3.6。请注意许可证:授权您可以在根据
    GPL
    授权的开源项目中免费使用fbs。如果你不想公开你的代码,你可以以每位开发者449欧元的价格购买商业许可证。
    pyinstaller --onefile --clean ^
        --add-binary="C:\Users\Quazer\.virtualenv\pyqt5-36\Lib\site-packages\PyQt5\sip.pyd;PyQt5" ^
        --add-binary="C:\Users\Quazer\.virtualenv\pyqt5-36\Lib\site-packages\PyQt5\Qt\plugins\styles\qwindowsvistastyle.dll;PyQt5\Qt\plugins\styles" ^
        .\main.py