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

eri*_*i0o 11 python pyqt setup.py python-3.x pyqt5

我在这看了这个问题:

可以从setuptools setup.py中要求PyQt吗?

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

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


编辑:

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

mfi*_*tzp 9

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

总之一句话是,只要你限制PyQt5和Python3您的支持.

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

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

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

例如,这是在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
Run Code Online (Sandbox Code Playgroud)

要设置PyQt5作为自己包的依赖简单地将其指定为您的正常setup.py如install_requires=['PyQt5']

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

在这里你有几个选择.以上意味着安装了Python3的任何人现在都可以使用安装您的应用程序pip.但是,这假设最终用户拥有Python并知道它是什么pip.如果您希望使用Windows安装程序,MacOSX"app"软件包或Linux软件包分发应用程序,则需要使用专用于此目的的工具之一.

视窗

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

MacOSX的

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

Linux的

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

  • 值得一提的是[PyInstaller](http://www.pyinstaller.org/) - 我从cx_Freeze切换到它,因为各种各样的问题并且它维护得不好,我对PyInstaller非常满意. (3认同)