PEX打包工具链。
项目描述
概述
pex是一个用于生成.pex(Python EXecutable)文件的库,这些文件是类似于virtualenvs的Python可执行环境。pex是在PEP 441中概述的思想的扩展,使得Python应用的部署变得像cp一样简单。pex文件甚至可以包含多个特定平台的Python分发,这意味着单个pex文件可以在Linux和OS X之间移植。
可以使用pex工具构建pex文件。构建系统,如Pants、Buck和{py}gradle也支持直接构建.pex文件。
仍然不确定pex是什么以及它是如何工作的?观看这个快速闪电演讲:WTF is PEX?。
pex采用Apache2许可证。
安装
要安装pex,只需
$ pip install pex
您还可以使用tox在git克隆中构建pex
$ tox -e package
$ cp dist/pex ~/bin
这将在dist/pex中构建一个pex二进制文件,可以复制到您的$PATH。这种方法的优势在于它使您的Python环境尽可能保持空的状态,并且更符合pex的哲学。
简单示例
在环境中启动具有requests、flask和psutil的解释器
$ pex requests flask 'psutil>2,<3'
从Pip保存依赖项
或者,您也可以通过requirements.txt冻结当前的虚拟环境并在任何地方执行它
$ pex $(pip freeze) -o my_virtualenv.pex
$ deactivate
$ ./my_virtualenv.pex
临时环境
在包含flask的环境中运行webserver.py,这是一种快速实验的方式
$ pex flask -- webserver.py
使用Sphinx的Sphinx entry point sphinx:main在临时pex环境中启动Sphinx
$ pex sphinx -e sphinx:main -- --help
使用入口点
在配置中指定console_scripts入口点的项目可以为这些入口点构建独立的可执行文件。
要构建一个独立的pex-tools-executable.pex二进制文件,该文件运行在所有pex版本2.1.35及更高版本分发中找到的pex-tools控制台脚本
$ pex "pex>=2.1.35" --console-script pex-tools --output-file pex-tools-executable.pex
指定特定解释器
您还可以构建使用特定解释器类型的pex文件
$ pex "pex>=2.1.35" -c pex-tools --python=pypy -o pex-tools-pypy-executable.pex
大多数pex选项可以很好地组合在一起,因此上述命令可以混合使用,并提供等效的简短选项。
有关完整选项列表,只需输入pex --help。
将pex集成到您的流程中
如果您使用tox(您应该使用!),将包装测试环境添加到您的tox.ini中是一种简单地将pex集成到您的流程中的方法
[testenv:package]
deps = pex
commands = pex . -o dist/app.pex
然后,使用tox -e package将生成您应用程序的可移动副本,您可以将它复制到预发布或生产环境。
文档
有关Pex、构建.pex文件以及.pex文件如何工作的更多文档,可在https://docs.pex-tool.org找到。
开发
Pex使用tox进行测试和开发自动化。要运行测试套件,只需调用tox。
$ tox
如果您没有tox,可以生成tox的pex。
$ pex tox -c tox -o ~/bin/tox
Tox提供许多有用的命令和选项,具体请参阅https://tox.wiki/en/latest/。以下提供了在Pex开发过程中最常用的命令,但建议您阅读文档,以更好地了解Tox的工作原理以及如何执行更高级的命令。
要运行特定环境,通过运行tox --listenvs-all来识别您想要调用的环境的名称,然后按照以下方式运行
$ tox -e fmt
运行MyPy
$ tox -e check
我们所有的tox测试环境都允许传递参数,这有助于运行特定测试
$ tox -e py37-integration -- -k test_reproducible_build
要从源运行Pex,而不是通过您的PATH,请通过Python运行
$ python -m pex
项目详情
下载文件
下载适合您平台的应用程序文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。
源代码分布
构建分布
pex-2.20.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ed691c64b26def01168e960804e74dc13d38654598ae40579be2f971d0393a84 |
|
MD5 | 178775e0f4f0baa9244c589801d242b8 |
|
BLAKE2b-256 | 57911587136daa587ba812d4196a2f084c6565513ba3a8aefb9ada5d38a2f511 |
pex-2.20.2-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 639bfd2ca838b932e418192031c0d25e77f4c1c685261fa928b182bef5cebde3 |
|
MD5 | 8a957605d06716a8190284e2370342a0 |
|
BLAKE2b-256 | fdcc2fce6b8d5ae397bff40f054911329bb6b0777384aaf1c674f983259f9af7 |