shiv:打包 Python 项目为单个可执行文件

LinkedIn 开源的 shiv,是一个 Python 打包工具,斩获了 1,900+ Star:

正文顶部截图

README区域截图

shiv 是一个命令行工具,用于构建自包含的 Python zipapp 可执行文件。它遵循 PEP 441 标准,能把 Python 应用和所有依赖打包成一个 .pyz 文件。分发 Python 工具时,只需给对方这一个文件,不需要对方安装依赖或配置虚拟环境。

shiv 支持 Python 3.8 及以上版本,兼容 Linux、macOS 和 Windows 三大平台。

安装使用

安装 shiv 很简单,一条 pip 命令即可:

pip install shiv

也可以从 GitHub Releases 页面下载预构建的可执行文件,解压后直接使用。

打包命令行工具

以 flake8 为例,将其打包为可执行文件:

shiv -c flake8 -o ~/bin/flake8 flake8

-c 指定入口命令名称,-o 指定输出文件路径,最后的 flake8 是要从 PyPI 安装的依赖。生成的 ~/bin/flake8 可以直接在终端中调用,运行效果和正常安装的 flake8 一致:

$ ~/bin/flake8 --version
3.7.8 (mccabe: 0.6.1, pycodestyle: 2.5.0, pyflakes: 2.1.1) CPython 3.7.4 on Darwin

创建交互式环境

shiv 也能打包库文件,生成一个包含该库的交互式 Python 环境:

shiv -o boto.pyz boto
./boto.pyz
Python 3.7.4 ...
>>> import boto
>>> boto.__version__
'2.49.0'

这种方法适合创建一个预装好依赖的 Python 环境,方便临时测试或演示。

打包 shiv 自身

shiv 也可以用来打包自己:

python3 -m venv .
source bin/activate
pip install shiv
shiv -c shiv -o shiv shiv

这条命令创建一个包含 shiv 的可执行文件,实现了自我承载。

开发与贡献

克隆仓库后,用 venv 启动开发环境:

git clone git@github.com:linkedin/shiv.git
cd shiv
python3 -m venv venv
source ./venv/bin/activate
python3 -m pip install -e .

运行测试:

python3 -m pip install tox
tox

注意事项

包含 C 扩展的 zipapp 在不同操作系统架构间可能无法通用。如果依赖全是纯 Python,跨平台运行基本没问题。

shiv 默认在 ~/.shiv 目录解压运行文件,可通过 SHIV_ROOT 环境变量修改解压位置。

间可能无法通用。如果依赖全是纯 Python,跨平台运行基本没问题。

shiv 默认在 ~/.shiv 目录解压运行文件,可通过 SHIV_ROOT 环境变量修改解压位置。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐