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

Python 我可以使用setup.py打包需要PyQt5的应用程序吗?,python,python-3.x,pyqt,pyqt5,setup.py,Python,Python 3.x,Pyqt,Pyqt5,Setup.py,我在这里看到了这个问题: 分发具有gui且基于PyQt的python应用程序的正确方法是什么?(我正在使用PyQt5和Python3) 我还在学习如何分配东西,所以我不知道我的问题是否有意义 编辑: 答案是正确的,sudopip3安装。为我自己的setup.py文件工作,但显然pyqt5不包括QtWebKitWidgets模块,并且它不能在pip3中的单独包中安装。所以现在我考虑完全脱离Python,使用Javascript+Electron作为一种易于运行的多平台开发语言 我可以通过set

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

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

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


编辑:

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

我可以通过setup.py要求PyQt5吗? 一句话,是的,只要您限制对PyQt5和Python3的支持

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

注意:据我所知,通过PyPi从源代码构建实际上是不可能的。标准方法是从中下载源代码/二进制文件,然后从中构建/安装

这个问题通过引入提供了一种无需在目标系统上编译即可安装C扩展包的方法而得以解决。这是通过平台特定的
.whl
文件实现的。Python3上PyQt5的控制盘在PyPi上可用于多个平台,包括应涵盖大多数用途的控制盘

例如,这是pip在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\u requires=['PyQt5']

分发Python GUI应用程序的正确方法是什么? 这里你有几个选择。上述情况意味着任何安装了Python3的人现在都可以使用
pip
安装您的应用程序。但是,这假设最终用户拥有Python并且知道什么是
pip
。如果您希望使用Windows安装程序、MacOSX“应用程序”捆绑包或Linux软件包分发应用程序,则需要使用专用于此目的的工具之一

窗户
  • 是一个跨平台的打包程序,可以为Windows、Mac和Linux打包Python应用程序。它的工作原理是分析项目并冻结所需的包和子包。成功在很大程度上取决于您所依赖的包及其复杂性/正确性
  • 是另一个跨平台的打包程序,可以打包适用于Windows、Mac和Linux的Python应用程序。这与cx_Freeze的工作方式类似,根据软件包的不同,可能会表现更好/更差
  • 为Windows构建NSIS安装程序包。这样做的优点是非常简单:它只是将所有文件按原样打包在一起,而不会“冻结”。缺点是,软件包可能会非常大,安装速度也会较慢(但请参见文件过滤器选项)。它现在支持捆绑
    .whl
    文件,这在很多情况下都能解决这个问题。如果只针对Windows,那么这是目前为止最简单的方法
马科斯
  • 见上文
  • 见上文
  • 根据
    setup.py
    中的定义创建
    .app
    捆绑包。最大的优点是自定义处理程序,允许您调整麻烦包的打包。如果你只针对MacOSX,这可能是你最好的选择
Linux
  • 见上文
  • 见上文
  • setup.py
    定义中构建Debian风格的包

注意:可以编写一个非常复杂的
setup.py
,允许您在不同的平台上使用一个或多个工具进行构建,但为了清晰起见,我通常会存储单独的配置(例如
setup-py2app.py
),因此我可以编写
install\u requires=['PyQt5']
inside setup.py now?@Elric当然可以-只需在此处测试即可,一切正常。好的,在此处测试。轮子仍然不适用于Ubuntu(我认为任何其他Linux发行版)。因此,除非您使用Mac OS,否则它将无法工作。这可能也值得一提-由于各种问题,我从cx_Freeze切换到它,并且它没有得到很好的维护,我对PyInstaller非常满意。Pynsist现在可以使用wheels构建安装程序,这使得打包PyQt5应用程序非常容易。此处的配置文件示例: