本文共 2070 字,大约阅读时间需要 6 分钟。
Shiv 是一个强大的 Python 打包工具,专为开发者设计。它能够将你的 Python 项目及所有依赖打包成一个单一的可执行文件,使得项目的分发和部署更加便捷。与传统的打包工具不同,Shiv 基于 zipapp 创建自包含的运行环境,这意味着用户无需依赖系统环境即可运行打包的项目,非常适合脚本和小型应用的部署。
安装 Shiv 非常简单,仅需通过以下命令即可完成:
pip install shiv
安装完成后,你可以在命令行中使用 shiv 命令进行打包操作。
Shiv 的核心功能是将整个项目及所有依赖打包成一个可执行文件。无论是脚本还是小型应用,生成的文件都可以直接运行,无需额外配置。
Shiv 基于 zipapp 创建自包含的运行环境。当打包文件解压运行时,所有依赖都会被自动加载,无需依赖系统的 Python 环境。
Shiv 允许用户通过环境变量进行自定义配置。你可以根据需要设置运行时的缓存目录或指定特定的 Python 解释器。
Shiv 适用于多种平台,生成的可执行文件可以在 Windows、macOS 和 Linux 等系统间轻松分发和运行。
在项目目录中新建一个 my_module.py 文件,定义入口函数:
# my_module.pydef main(): print("Hello from Shiv!") 在项目目录中运行以下命令,将项目及依赖打包成一个可执行文件:
shiv --output-file my_app.pyz -e my_module:main .
--output-file 指定生成的可执行文件名。-e 参数指定入口函数,格式为 模块名:函数名。打包完成后,你可以直接运行生成的 my_app.pyz 文件:
./my_app.pyz
运行结果会输出:
Hello from Shiv!
确保项目目录中包含 requirements.txt 文件,列表中列出所有所需依赖。例如:
Flask==2.0.3requests==2.31.0
在运行 shiv 命令时,添加 -r 参数指定 requirements.txt 文件:
shiv -o my_app_with_deps.pyz -e my_module:main -r requirements.txt .
生成的 my_app_with_deps.pyz 文件包含了所有依赖库,便于分发和运行。
在某些环境下,可能需要指定特定的 Python 解释器。你可以通过 --python 参数指定路径:
shiv -o my_app.pyz -e my_module:main --python="/usr/bin/python3.8" .
这样生成的可执行文件会在运行时使用指定的 Python 解释器。
Shiv 默认将打包文件缓存到用户目录下的 .shiv 文件夹。你可以通过环境变量 SHIV_ROOT 自定义缓存目录:
export SHIV_ROOT="/custom/cache/directory"./my_app.pyz
如果项目中包含多个脚本或函数,Shiv 支持通过 entry_point 配置指定不同的入口。你可以在 setup.py 中配置入口脚本:
# setup.pyfrom setuptools import setup, setupsetup( name="my_app", version="0.1", py_modules=["my_module"], entry_points={ "console_scripts": [ "myapp=my_module:main", ], },) 然后运行以下命令生成带有入口配置的可执行文件:
shiv -o my_custom_app.pyz .
生成的 my_custom_app.pyz 将会使用 setup.py 中配置的 main() 作为默认入口函数。
Shiv 是一个轻量高效的打包工具,能够将 Python 项目连同依赖打包成单文件可执行格式,简化了部署和分发过程。它不仅适用于脚本和小型应用的分发,还适用于微服务和无服务器架构的场景。通过环境变量和缓存配置,Shiv 提供了高度的可定制性,适合开发者在不同场景下使用。如果你需要快速部署或分发 Python 应用,不妨尝试 Shiv,让项目打包分发更加简单高效!
转载地址:http://iuofk.baihongyu.com/