python-3.x - 将具有依赖关系的python3脚本打包到exe中的最简单方法?
问题描述
我试图用谷歌搜索它,但没有找到我需要的确切东西,我被卡住了。我在 Linux 上编写了一个 Python3.7 脚本(使用一些外部库)。这只是一个模块 + 依赖项。我需要将其打包,最好打包成一个 .exe 文件并将其发送给 Windows 用户。该文件将在 Windows 系统上使用。用户不会安装 Python,我也不能指望他们做很多设置工作。打包代码的最简单方法是什么(最好使用交叉编译,这样我就不需要使用 Windows)并最大限度地减少 Windows 用户必须执行的设置量?
解决方案
基于 Artashes 的回答,PyInstaller 实际上是目前将 Python 脚本编译为 exe 的最佳工具。
但大多数时候,它并不像他所说的那么简单。
例如,如果您的脚本中使用了外部文件,则需要提供更多工作才能使编译工作。同样,一些第三方模块(例如 PyQt5 或 sounddevice)需要更多的工作。
我建议您仔细阅读 PyInstaller 文档,并确保阅读有关规范文件的部分。每当我将脚本编译为 exe 时,我首先使用 PyInstaller 创建一个规范文件。然后我填写规范文件以添加所有有问题的依赖项和外部文件。
在这一步你很少完成。大多数情况下,您的一个或多个导入需要手动添加或修改 dist 文件夹才能使事情正常工作(例如,对于 Qt,您需要将 Qt5Core.dll 移动到另一个文件夹)。
换句话说,一般步骤如下:
- 使用 PyInstaller 创建一个规范文件
- 填写规范文件
- 尝试编译。
如果可行,请创建一个脚本来自动编译。你完成了。
如果不:
- 检查看看有什么不工作(缺少dll,文件在错误的地方)
- 在自动化脚本中修复它。
然而
PyInstaller 适用于所有平台,但它只能针对它启动的平台进行编译。换句话说,在 Windows 上使用 PyInstaller 将创建一个 exe,而在 Linux 上执行它将创建一个二进制文件。不幸的是,我只知道一种解决方法:大多数人(包括我)求助于虚拟机来为特定平台进行编译。如果您使用的是 linux,请安装 Virtualbox,安装 Windows 操作系统并从 VM 运行 PyInstaller 以创建一个 exe。
推荐阅读
- java - 用户输入字符串时如何重新提示用户输入有效输入(Java)
- hadoop - 所有datanodes hdfs的顺序自动重启
- git - 我无法将代码推送到远程 devOps 存储库
- java - 对 BigInteger 数组进行基数排序
- sql - 计算postgresql缓冲区内多边形的百分比
- kotlin - TornadoFX DataGrid 与 ScrollPane
- keras - 在训练活动识别模型时观察不同机器中不同的模型性能
- spring - 如何修复 Spring MVC 中的自定义删除查询(使用 JPARepository 和 MYSQL)?
- javascript - selrrrow 在 jqGrid 4.15.6 中返回 null
- elasticsearch-dsl - 如何在 Elasticsearch_dsl 中搜索嵌套文档