【问题标题】:Can I use setup.py to pack an app that requires PyQt5?我可以使用 setup.py 打包需要 PyQt5 的应用程序吗?
【发布时间】:2016-09-15 15:24:43
【问题描述】:

我在这里查看了这个问题:

Is it possible to require PyQt from setuptools setup.py?

分发具有 gui 且基于 PyQt 的 python 应用程序的正确方法是什么? (我使用的是 PyQt5 和 Python3)

我还在学习如何分发东西,所以我不知道我的问题是否有意义。


编辑:

答案是正确的,sudo pip3 install . 为我自己的 setup.py 文件工作,但显然 pyqt5 不包含 QtWebKitWidgets 模块,并且无法单独安装包在 pip3 中。所以现在我正在考虑完全摆脱 Python 并使用 Javascript + Electron 作为一种易于运行的多平台开发语言。

【问题讨论】:

    标签: python python-3.x pyqt pyqt5 setup.py


    【解决方案1】:

    我可以通过 setup.py 要求 PyQt5 吗?

    总之是的,只要你限制对 PyQt5 和 Python3 的支持。

    setup.py 中指定的要求通常通过从 Python 包索引 (PyPi) 请求包来提供。直到最近,这些包只是源代码,这意味着依赖于 PyQt5 的安装只能在可以从源代码构建它的系统上运行。尤其是在 Windows 上构建需要进行大量设置,因此任何无法或不愿意执行此操作的人都无法访问您的应用程序。

    注意:据我所知,实际上永远不可能通过 PyPi 从源代码构建。标准方法是从Riverbank Software 下载源代码/二进制文件并从那里构建/安装。

    通过引入Python Wheels 解决了这个问题,它提供了一种无需在目标系统上编译即可安装C 扩展包的方法。这是通过特定于平台的.whl 文件实现的。 Python3 上 PyQt5 的 Wheels 可用于 PyPi 的多个平台,包括 MacOS X, Linux (any), Win32 and Win64,它应该涵盖大多数用途。

    例如,这是在 Mac 上的 Python3 上 pip 安装 PyQt5 时的输出:

    mfitzp@MacBook-Air ~ $ pip3 install pyqt5
    Collecting pyqt5
      Downloading PyQt5-5.6-cp35-cp35m-macosx_10_6_intel.whl (73.2MB)
        100% |████████████████████████████████| 73.2MB 2.5kB/s 
    Collecting sip (from pyqt5)
      Downloading sip-4.18-cp35-cp35m-macosx_10_6_intel.whl (46kB)
        100% |████████████████████████████████| 49kB 1.8MB/s 
    Installing collected packages: sip, pyqt5
    Successfully installed pyqt5-5.6 sip-4.18
    

    要将 PyQt5 设置为您自己的包的依赖项,只需在您的 setup.py 中将其指定为正常的,例如install_requires=['PyQt5']

    分发 Python GUI 应用程序的正确方法是什么?

    这里有几个选项。以上意味着任何安装了 Python3 的人现在都可以使用 pip 安装您的应用程序。但是,这假设最终用户拥有 Python 并且知道 pip 是什么。如果您希望通过 Windows 安装程序、MacOSX“应用程序”包或 Linux 包分发您的应用程序,则需要使用专用于该目的的工具之一。

    窗口

    • cx_Freeze 是一个跨平台的打包器,可以为 Windows、Mac 和 Linux 打包 Python 应用程序。它通过分析您的项目并冻结所需的包和子包来工作。成功很大程度上取决于您所依赖的软件包及其复杂性/正确性。
    • PyInstaller 是另一个跨平台打包器,可以为 Windows、Mac 和 Linux 打包 Python 应用程序。这与 cx_Freeze 的工作方式类似,并且可能会根据软件包执行更好/更差。
    • PyNSISt 为 Windows 构建 NSIS 安装程序包。这具有非常简单的优点:它只是将所有文件按原样打包在一起,而不会“冻结”。缺点是软件包最终可能会非常大并且安装速度较慢(但请参阅文件过滤器选项)。它现在支持捆绑.whl 文件,这将在许多情况下解决此问题。到目前为止,如果您只针对 Windows,这是最简单的。

    MacOSX

    • cx_Freeze 见上文。
    • PyInstaller 见上文。
    • Py2app 根据 setup.py 中的定义创建 .app 捆绑包。最大的优势是允许您调整麻烦包的包装的自定义处理程序。如果您只针对 MacOSX,这可能是您的最佳选择。

    Linux

    注意:可以编写一个非常复杂的setup.py,允许您在不同平台上使用一个或多个工具进行构建,但为了清楚起见,我通常最终存储单独的配置(例如setup-py2app.py) .

    【讨论】:

    • 所以我现在可以在 setup.py 中写install_requires=['PyQt5'] 了吗?
    • @Elric 当然可以——只是在这里测试了一下,没问题。
    • 好的,在这里测试。 Wheels 仍然不适用于 Ubuntu(我认为任何其他 Linux 发行版)。因此,除非您在 Mac OS 中,否则它将无法正常工作。
    • 这可能也值得一提PyInstaller - 由于各种问题,我从 cx_Freeze 切换到它并且维护得不是很好,我对 PyInstaller 非常满意。
    • Pynsist 现在可以使用轮子构建安装程序,这使得打包 PyQt5 应用程序变得超级容易。此处的示例配置文件:github.com/takluyver/pynsist/blob/master/examples/pyqt5/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多