我可以创建一个具有依赖项的可执行 Python zip 存档吗?

问题描述 投票:0回答:2

我有一个在 Nix 上开发的小型 Python 应用程序,我希望分发给一些 M$ Windows 用户。似乎可执行的 Python zip archive 是实现此目的的绝佳方法。

但是,我想包含标准 Python 安装中不包含的依赖项,例如术语颜色。这可能吗?

这是我正在测试的应用程序

from termcolor import cprint

print('hello world')
cprint('hola mundo', 'red')

termcolor 不包含在标准 Python 实现中。我不希望用户 pip install.

我已经使用

构建了一个 .pyz
 python  -m zipapp . -o my_app.pyz

应用程序已创建,它可以在安装了 termcolor 的 virtualenv 中运行。但如果不是,当然会失败。

我也试过了

python  -m zipapps my_app -o my_app.pyz -r requirements.txt

这会创建一个包含 termcolor 的 .pyz,但是当我运行它时,它会落入 Python REPL

这可能吗?

python python-packaging zipapp
2个回答
1
投票

您需要提供

--main
选项。最好先创建一个 main 函数。

my_app.py

from termcolor import cprint

def my_main():
    print('hello world')
    cprint('hola mundo', 'red')

if __name__ == '__main__':
    my_main()

然后用类似的东西打包:

mkdir build
mkdir dist
python -m pip install termcolor --target build
cp my_app.py build
python -m zipapp build --main my_app:my_main --output dist/my_app.pyz

最后可以运行:

python dist/my_app.pyz

并且这个

.pyz
文件可以移动到任何地方(在同一台机器上)并且它将继续工作,因为它包含依赖项(不需要虚拟环境)。如果依赖项只是纯 Python(就像 termcolor 的情况一样),那么
.pyz
文件可以与其他 Python 解释器版本和其他操作系统一起使用。

您还可以选择使用--python选项

设置
shebang


无论如何,如果以后你的目标是更严肃的使用,我建议为此使用 pexshiv。这些工具将负责处理许多复杂的极端情况。


0
投票

将标准 Python 安装中未包含的依赖项包含到 Python zip 存档中是一个完全合理的壮举。这可以通过 PyInstaller 或 cx_Freeze 等工具来实现,它们都能够生成包含所有必要依赖项的独立可执行文件。

利用 PyInstaller 或 cx_Freeze 的强大功能的第一步是制作一个 requirements.txt 文件,它本质上是应用程序所需的所有依赖项的概要,包括 termcolor。这可以手动生成,也可以借助 pipreqs 等工具自动生成,该工具会搜索代码的导入语句以识别所需的依赖项。

requirements.txt 文件创建成功后,下一步是使用 PyInstaller 或 cx_Freeze 生成可执行文件。这两种工具都提供了指定需求文件的能力,从而允许自动下载所有必需的包并将其包含在可执行文件中。

这是一个使用 PyInstaller 创建可执行文件的示例命令:

pyinstaller --onefile --add-data "path/to/requirements.txt;." myscript.py

执行此命令后,将在 dist 文件夹中创建一个单独的可执行文件,其中包含您的 Python 脚本 (myscript.py) 和 requirements.txt 文件。在 Windows 机器上执行后,可执行文件将自动安装所需的依赖项并执行您的脚本。

同样,这是一个使用 cx_Freeze 创建可执行文件的示例命令:

cxfreeze myscript.py --include-path=path/to/requirements.txt

执行此命令将生成一个可执行文件,位于构建文件夹中,其中包括您的 Python 脚本和 requirements.txt 文件中规定的所需依赖项。

请注意,PyInstaller 和 cx_Freeze 提供了额外的选项和设置,可用于根据您的需要定制可执行文件的行为。建议仔细阅读每个工具的文档,以更深入地了解它们的功能。

© www.soinside.com 2019 - 2024. All rights reserved.