本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。
原文链接:shiv,一个超酷的 Python 库!
大家好,今天为大家分享一个超酷的 Python 库 - shiv。
Github地址:https://github.com/linkedin/shiv
在 Python 项目开发和部署中,将项目及其依赖打包为一个可执行文件能够大大简化部署过程。Shiv
是一个强大的工具,可以帮助开发者将 Python 项目连同依赖打包成一个单一的可执行文件,使得项目的分发和执行更加便捷。不同于传统的打包工具,Shiv
基于 zipapp
创建自包含的环境,使用户无需依赖系统环境配置,便能快速运行打包的项目,非常适合脚本和小型应用的部署。
安装
可以通过 pip
安装 shiv
:
pip install shiv
安装完成后,可以在命令行中使用 shiv
命令来打包 Python 项目。
特性
-
单文件打包:可以将整个项目及其依赖打包成一个可执行文件,方便分发和部署。
-
无需虚拟环境:生成的可执行文件包含所有依赖,无需依赖系统的 Python 环境。
-
自包含运行环境:通过
zipapp
实现自包含运行环境,打包文件解压运行,执行快速。 -
支持环境变量配置:允许用户通过环境变量自定义运行时配置。
-
跨平台支持:适用于多平台,可在不同系统间轻松分发和运行 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 !
文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。