python | shiv,一个超酷的 打包工具 Python 库!

本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。

原文链接:shiv,一个超酷的 Python 库!

大家好,今天为大家分享一个超酷的 Python 库 - shiv。

Github地址:https://github.com/linkedin/shiv

在 Python 项目开发和部署中,将项目及其依赖打包为一个可执行文件能够大大简化部署过程。Shiv 是一个强大的工具,可以帮助开发者将 Python 项目连同依赖打包成一个单一的可执行文件,使得项目的分发和执行更加便捷。不同于传统的打包工具Shiv 基于 zipapp 创建自包含的环境,使用户无需依赖系统环境配置,便能快速运行打包的项目,非常适合脚本和小型应用的部署。

安装

可以通过 pip 安装 shiv

pip install shiv

安装完成后,可以在命令行中使用 shiv 命令来打包 Python 项目。

特性

  1. 单文件打包:可以将整个项目及其依赖打包成一个可执行文件,方便分发和部署。

  2. 无需虚拟环境:生成的可执行文件包含所有依赖,无需依赖系统的 Python 环境。

  3. 自包含运行环境:通过 zipapp 实现自包含运行环境,打包文件解压运行,执行快速。

  4. 支持环境变量配置:允许用户通过环境变量自定义运行时配置。

  5. 跨平台支持:适用于多平台,可在不同系统间轻松分发和运行 Python 应用。

基本功能

1. 打包项目为可执行文件

要使用 shiv 打包 Python 项目,可以在项目目录中运行以下命令:

shiv --output-file my_app.pyz -e my_module:main .
  • --output-file 指定生成的可执行文件名。

  • -e 参数用于指定入口点函数,这里假设入口函数在 my_module.py 文件中的 main() 函数。

创建入口函数

my_module.py 文件中定义 main 函数:

# my_module.py

def main():
    print("Hello from Shiv!")

在打包后,可以直接执行 my_app.pyz 文件:

./my_app.pyz

输出结果:

Hello from Shiv!

2. 打包带依赖的项目

Shiv 支持将项目的所有依赖打包在一起。确保项目目录中有 requirements.txt 文件,然后使用 shiv 打包:

shiv -o my_app_with_deps.pyz -e my_module:main -r requirements.txt .

此命令会将 requirements.txt 中指定的依赖一并打包,使生成的 .pyz 文件包含所有所需的库和模块,便于部署。

高级功能

1. 自定义 Python 解释器路径

在某些环境下,可能需要指定不同的 Python 解释器。

可以通过 --python 参数指定 Python 解释器路径:

shiv -o my_app.pyz -e my_module:main --python="/usr/bin/python3.8" .

这样生成的可执行文件会在运行时使用指定的 Python 解释器。

2. 使用环境变量控制缓存

Shiv 默认在第一次运行时将文件缓存到用户目录下的 .shiv 文件夹中,用户可以通过环境变量 SHIV_ROOT 自定义缓存目录:

export SHIV_ROOT="/custom/cache/directory"
./my_app.pyz

这样可以有效控制运行时的缓存位置,特别适合在多用户或容器化环境中使用。

3. 自定义入口脚本

如果项目中包含多个脚本或函数,Shiv 支持通过 entry_point 配置指定不同的入口。

例如,可以在 setup.py 中配置入口脚本:

# setup.py
from setuptools import setup

setup(
    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() 作为默认入口函数。

总结

Python Shiv 是一个轻量高效的打包工具,能够将 Python 项目连同依赖一并打包成单文件可执行格式,简化了部署和分发过程。它不仅适用于脚本和小型应用的分发,还适用于微服务和无服务器架构的场景。Shiv 使用便捷,支持通过环境变量、缓存自定义和不同入口点配置,让开发者能够更灵活地控制打包应用的行为。如果你需要快速部署或分发 Python 应用,不妨尝试 Shiv,让项目打包分发更加简单高效!

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值