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

     2023-02-23     28

关键词:

【中文标题】我可以使用 setup.py 打包需要 PyQt5 的应用程序吗?【英文标题】:Can I use setup.py to pack an app that requires 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 作为一种易于运行的多平台开发语言。

【问题讨论】:

【参考方案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

cx_Freeze 见上文。 PyInstaller 见上文。 stdeb 根据您的 setup.py 定义构建 Debian 风格的软件包。

注意:可以编写一个非常复杂的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/…

让 sphinx 使用 setup.py 中的版本

】让sphinx使用setup.py中的版本【英文标题】:Letsphinxuseversionfromsetup.py【发布时间】:2014-11-2607:44:08【问题描述】:如果我选择sphinx-quickstart,我会被问及项目的版本。我想避免我的项目版本有两个位置。如何在python打包世界中做... 查看详情

pythonpython打包文件(setup.py)示例(代码片段)

查看详情

如何在 setup.py 中包含 git 依赖项以进行 pip 安装

...中包含可通过公共Github存储库获得的Python包。我的包应该可以通过pip使用setup.py安装。到目前为止,这可以在setup.py文件中使用dep 查看详情

在 CMake 中使用 setup.py 构建 python 包

】在CMake中使用setup.py构建python包【英文标题】:Buildapythonpackagewithsetup.pyinCMake【发布时间】:2015-05-2718:18:59【问题描述】:编辑:这个问题有点太长了。这是我真正的问题:如何在CMake中使用setuptools(setup.py)构建和安装python包?... 查看详情

python能做成exe程序吗?

...本中,然后修改后缀为.bat,例如run.bat,然后双击run.bat就可以啦。。(前提是,你设置了环境变量)运行后,会产生一个dist文件夹,在文件夹中,有一个与被打包文件同名的exe文件,那个就是可执行文件啦。。。参考技术A可以... 查看详情

我在 setup.py 中需要啥选项才能在正确的目录中创建包?

...包?【发布时间】:2013-03-2804:46:00【问题描述】:我正在使用setup.py创建一个python包,我想通过pip安装它。正确安装下的文件lib/python2. 查看详情

是否可以使用 dist utils (setup.py) 包含子目录作为包数据的一部分?

】是否可以使用distutils(setup.py)包含子目录作为包数据的一部分?【英文标题】:Isitpossibletoincludesubdirectoriesusingdistutils(setup.py)aspartofpackagedata?【发布时间】:2012-06-1102:22:01【问题描述】:基本上我的python包是这样设置的:module\\_e... 查看详情

设置 setup.py 用于打包单个 .py 文件和单个数据文件,无需创建任何文件夹

】设置setup.py用于打包单个.py文件和单个数据文件,无需创建任何文件夹【英文标题】:Settingupsetup.pyforpackagingofasingle.pyfileandasingledatafilewithoutneedingtocreateanyfolders【发布时间】:2012-09-0919:23:03【问题描述】:项目树:$.├──happy_... 查看详情

为啥我使用 setup.py 安装时找不到 ansible?

】为啥我使用setup.py安装时找不到ansible?【英文标题】:Whycan\'tIfindansiblewhenIinstallitusingsetup.py?为什么我使用setup.py安装时找不到ansible?【发布时间】:2018-01-3022:37:35【问题描述】:因为我在使用Ansible(我在Mac上)时遇到了一些... 查看详情

python能做成exe程序吗?

...本中,然后修改后缀为.bat,例如run.bat,然后双击run.bat就可以啦。。(前提是,你设置了环境变量)运行后,会产生一个dist文件夹,在文件夹中,有一个与被打包文件同名的exe文件,那个就是可执行文件啦。。。 参考技术Bpython... 查看详情

使用 setup.py 和 wheel 安装包依赖项

...我们正在使用内部托管的PyPI服务器(devpi-server),以便我们可以托管需要很长时间才能从源代码(如scipy、matplotlib等)安装的大型软件包的二进制轮。使用pipinstallscipy安装这些软件包 查看详情

使用 setup.py 链接 library.lib

】使用setup.py链接library.lib【英文标题】:Linklibrary.libusingsetup.py【发布时间】:2019-10-1315:54:53【问题描述】:我想使用setup.py编译一个库以在我的python包中使用。我正在编译的库是在Windows上使用vcpkg安装的。在编译期间我遇到了... 查看详情

setup.py 中的 Python 包名称与 pip 名称

...包,必须将不同的名称传递给pip而不是包名称?例如,我可以使用pip安装pyintervalfromPyPI,然后我可以通过fromin 查看详情

软件开发目录规范(代码片段)

... 简要解释一下:bin/:存放项目的一些可执行文件,当然你可以起名script/之类的也行。foo/:存放项目的所有源代码。(1)源代码中的所有模块、包都应该放在此目录。不要置于顶层目录。(2)其子目录tests/存放单元测试代码;(3)程序的... 查看详情

将做好的py文件打包成模块,供别人安装调用

现在要将写完的3个py文件,打包。 步骤:1.新建一个文件夹setup(名字随便取),在setup文件夹下,再新建一个文件夹financeapi。2.将上面4个py文件拷贝至financeapi文件夹。 3.在setup文件夹下新建一个setup.py文件,里面的内容... 查看详情

[工具]利用setuptools打包python程序(代码片段)

...容全部导入到leeoo的__init__.py中这样,以后importleeoo后,就可以直接使用leeoo.testfunc()了。四、打包1.命令行进入工程根目 查看详情

conda-build 使用旧的(陈旧的)setup.py

】conda-build使用旧的(陈旧的)setup.py【英文标题】:conda-buildusinganold(stale)setup.py【发布时间】:2019-01-2816:49:45【问题描述】:我正在尝试从一些python源文件和其他DLL文件生成一个conda包(使用conda-build)。我首先使用setup.py文件... 查看详情

怎么将自己写的包打包上传到pypi供其他人下载

...供了一个佛祖字符画和一个打印函数。__main__.py让这个包可以被python-m直接运行,而__main__.py其实也就只干了一件事,那就是调用print_buddha打印字符画。打包项目你需要学习以下知识加星的是必须的,其他的可有可无不影响打包和... 查看详情