我可以使用setup.py来打包需要PyQt5的应用吗?

时间:2016-05-18 23:11:33

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

我在这里看了这个问题:

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作为一种易于运行的多平台语言进行开发。

1 个答案:

答案 0 :(得分:8)

我可以通过setup.py吗

来要求PyQt5

单词 yes ,只要你限制对PyQt5和Python3的支持。

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

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

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

例如,这是在Mac上在Python3上安装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' app'捆绑包或Linux包,您将需要使用专用于此目的的工具之一。

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

MacOSX的

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

的Linux

  • PyInstaller见上文。
  • stdeb见上文。
  • {{3}}根据您的setup.py定义构建Debian风格的包。

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