我可以使用 setup.py 来打包需要 PyQt5 的应用程序吗?
Can I use setup.py to pack an app that requires PyQt5?
我在这里看了这个问题:
Is it possible to require PyQt from setuptools setup.py?
分发具有图形用户界面且基于 PyQt 的 python 应用程序的正确方法是什么? (我正在使用 PyQt5 和 Python3)
我还在学习如何分发东西,所以我不知道我的问题是否有意义。
编辑:
答案是正确的,sudo pip3 install .
为我自己的 setup.py 文件工作,但显然 pyqt5 不包含 QtWebKitWidgets 模块,它不能在 pip3 的单独包中安装。所以现在我正在考虑完全摆脱 Python 并使用 Javascript + Electron 作为一种易于 运行 开发的多平台语言。
我可以通过 setup.py 要求 PyQt5 吗?
一句话可以,只要你限制对PyQt5和Python3的支持。
setup.py
中指定的要求通常通过从 Python 包索引 (PyPi) 请求包来提供。直到最近,这些包都只是源代码,这意味着依赖于 PyQt5 的安装只能在可以从源代码构建它的系统上运行。特别是在 Windows 上构建需要大量设置,因此这会使您的应用程序无法或不愿意这样做的任何人都无法访问。
注意:据我所知,实际上不可能通过 PyPi 从源代码构建。标准方法是从 Riverbank Software 下载 source/binaries 并从那里下载 build/install。
此问题已通过引入 Python Wheels which provide a means to install C extension packages without the need for compilation on the target system. This is achieved by platform-specific .whl
files. Wheels for PyQt5 on Python3 are available on PyPi for multiple platforms, including 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 'app' 捆绑包或 Linux 包来分发您的应用程序,您将需要使用以下其中一种专门用于此目的的工具。
Windows
- cx_Freeze 是一个跨平台打包器,可以为 Windows、Mac 和 Linux 打包 Python 个应用程序。它通过分析您的项目并冻结所需的包和子包来工作。成功很大程度上取决于您所依赖的包及其 complexity/correctness。
- PyInstaller 是另一个跨平台打包程序,可以为 Windows、Mac 和 Linux 打包 Python 应用程序。这与 cx_Freeze 的工作方式类似,并且可能会根据包执行两者 better/worse。
- PyNSISt 为 Windows 构建 NSIS 安装程序包。这样做的好处是非常简单:它只是按原样将所有文件打包在一起,没有 'freezing'。缺点是软件包最终会变得非常大并且安装速度较慢(但请参阅文件过滤器选项)。它现在支持
.whl
文件的捆绑,这将在许多情况下解决这个问题。如果您只定位 Windows,那么到目前为止是最简单的。
MacOSX
- cx_Freeze 见上文。
- PyInstaller 见上文。
- Py2app 根据您
setup.py
中的定义创建 .app
包。最大的优势是自定义处理程序,允许您调整有问题的包的打包。如果您只定位 MacOSX,这可能是您的最佳选择。
Linux
- cx_Freeze 见上文。
- PyInstaller 见上文。
- stdeb 根据您的
setup.py
定义构建 Debian 风格的软件包。
注意:可以编写一个非常复杂的 setup.py
允许您在不同平台上使用一个或多个工具进行构建,但我通常最终会存储单独的配置(例如setup-py2app.py
) 为了清楚起见。
我在这里看了这个问题:
Is it possible to require PyQt from setuptools setup.py?
分发具有图形用户界面且基于 PyQt 的 python 应用程序的正确方法是什么? (我正在使用 PyQt5 和 Python3)
我还在学习如何分发东西,所以我不知道我的问题是否有意义。
编辑:
答案是正确的,sudo pip3 install .
为我自己的 setup.py 文件工作,但显然 pyqt5 不包含 QtWebKitWidgets 模块,它不能在 pip3 的单独包中安装。所以现在我正在考虑完全摆脱 Python 并使用 Javascript + Electron 作为一种易于 运行 开发的多平台语言。
我可以通过 setup.py 要求 PyQt5 吗?
一句话可以,只要你限制对PyQt5和Python3的支持。
setup.py
中指定的要求通常通过从 Python 包索引 (PyPi) 请求包来提供。直到最近,这些包都只是源代码,这意味着依赖于 PyQt5 的安装只能在可以从源代码构建它的系统上运行。特别是在 Windows 上构建需要大量设置,因此这会使您的应用程序无法或不愿意这样做的任何人都无法访问。
注意:据我所知,实际上不可能通过 PyPi 从源代码构建。标准方法是从 Riverbank Software 下载 source/binaries 并从那里下载 build/install。
此问题已通过引入 Python Wheels which provide a means to install C extension packages without the need for compilation on the target system. This is achieved by platform-specific .whl
files. Wheels for PyQt5 on Python3 are available on PyPi for multiple platforms, including 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 'app' 捆绑包或 Linux 包来分发您的应用程序,您将需要使用以下其中一种专门用于此目的的工具。
Windows
- cx_Freeze 是一个跨平台打包器,可以为 Windows、Mac 和 Linux 打包 Python 个应用程序。它通过分析您的项目并冻结所需的包和子包来工作。成功很大程度上取决于您所依赖的包及其 complexity/correctness。
- PyInstaller 是另一个跨平台打包程序,可以为 Windows、Mac 和 Linux 打包 Python 应用程序。这与 cx_Freeze 的工作方式类似,并且可能会根据包执行两者 better/worse。
- PyNSISt 为 Windows 构建 NSIS 安装程序包。这样做的好处是非常简单:它只是按原样将所有文件打包在一起,没有 'freezing'。缺点是软件包最终会变得非常大并且安装速度较慢(但请参阅文件过滤器选项)。它现在支持
.whl
文件的捆绑,这将在许多情况下解决这个问题。如果您只定位 Windows,那么到目前为止是最简单的。
MacOSX
- cx_Freeze 见上文。
- PyInstaller 见上文。
- Py2app 根据您
setup.py
中的定义创建.app
包。最大的优势是自定义处理程序,允许您调整有问题的包的打包。如果您只定位 MacOSX,这可能是您的最佳选择。
Linux
- cx_Freeze 见上文。
- PyInstaller 见上文。
- stdeb 根据您的
setup.py
定义构建 Debian 风格的软件包。
注意:可以编写一个非常复杂的 setup.py
允许您在不同平台上使用一个或多个工具进行构建,但我通常最终会存储单独的配置(例如setup-py2app.py
) 为了清楚起见。