ITADN
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

PEX


.. image:: https://github.com/pex-tool/pex/actions/workflows/ci.yml/badge.svg?branch=main :target: https://github.com/pex-tool/pex/actions?query=branch%3Amain+workflow%3ACI

.. image:: https://img.shields.io/pypi/l/pex.svg :target: https://pypi.org/project/pex/

.. image:: https://img.shields.io/pypi/v/pex.svg :target: https://pypi.org/project/pex/

.. image:: https://img.shields.io/pypi/pyversions/pex.svg :target: https://pypi.org/project/pex/

.. image:: https://img.shields.io/pypi/wheel/pex.svg :target: https://pypi.org/project/pex/#files

.. image:: https://img.shields.io/discord/1205942638763573358 :target: https://pex-tool.org/discord

.. contents:: 目录

概述

pex 是一个用于生成 .pex(Python EXecutable)文件的库,这些文件是 virtualenvs <https://virtualenv.pypa.io>_ 精神下的可执行 Python 环境。 pex 是对 PEP 441 <https://peps.python.org/pep-0441/>_ 中概述的理念的扩展, 并使 Python 应用程序的部署变得像 cp 一样简单。pex 文件甚至可以 包含多个特定平台的 Python 发行版,这意味着单个 pex 文件 可以在 Linux 和 OS X 之间移植。

pex 文件可以使用 pex tool. Build systems such as Pants <http://pantsbuild.org/>, Buck <http://facebook.github.io/buck/>, and {py}gradle <https://github.com/linkedin/pygradle>_ 构建, 也 支持直接构建 .pex 文件。

仍然不确定 pex 做什么或它是如何工作的?观看这个简短的闪电 演讲:WTF is PEX? <https://www.youtube.com/watch?v=NmpnGhRwsu0>_。

pex 采用 Apache2 许可证授权。

安装

要安装 pex,只需

.. code-block:: bash

$ pip install pex

你也可以在 git 克隆中使用 uv 来构建 pex:

.. code-block:: bash

$ uv run dev-cmd package
$ cp dist/pex ~/bin

这会在 dist/pex that can be copied onto your `` 中构建一个 pex 二进制文件。 这种方法的优势在于,它使你的 Python 环境尽可能保持空状态, 并且更符合 pex 的哲学理念。

简单示例

在环境中使用 requests, flask and psutil 启动一个解释器:

.. code-block:: bash

$ pex requests flask 'psutil>2,<3'

从 Pip 保存依赖项


或者,通过 requirements.txt 冻结当前的虚拟环境,并在任何地方执行它:

.. code-block:: bash

    $ pex $(pip freeze) -o my_virtualenv.pex
    $ deactivate
    $ ./my_virtualenv.pex

临时环境
~~~~~~~~~~~~~~~~~~~~~~

Run webserver.py in an environment containing ``flask`` as a quick way to experiment:

.. code-block:: bash

    $ pex flask -- webserver.py

Launch Sphinx in an ephemeral pex environment using the Sphinx entry point ``sphinx:main``:

.. code-block:: bash

    $ pex sphinx -e sphinx:main -- --help

Using Entry Points
~~~~~~~~~~~~~~~~~~

Projects specifying a ``console_scripts`` entry point in their configuration
can build standalone executables for those entry points.

To build a standalone ``pex-tools-executable.pex`` binary that runs the
``pex-tools`` console script found in all pex version ``2.1.35`` and newer distributions:

.. code-block:: bash

    $ pex "pex>=2.1.35" --console-script pex-tools --output-file pex-tools-executable.pex

Specifying A Specific Interpreter

你还可以构建使用特定解释器类型的 pex 文件:

.. code-block:: bash

$ pex "pex>=2.1.35" -c pex-tools --python=pypy -o pex-tools-pypy-executable.pex

大多数 pex 选项可以很好地组合使用,因此上述命令可以 混合搭配,并且提供了等效的短选项。

要查看完整的选项列表,只需输入 pex --help

文档

有关 Pex、构建 .pex 文件以及 .pex 文件工作原理的更多文档 可在 https://docs.pex-tool.org 上找到。

开发

Pex 使用 uv <https://docs.astral.sh/uv/>_ 配合 dev-cmd <https://pypi.org/project/dev-cmd/>_ 进行 测试和开发自动化。安装 uv 后,要运行 Pex 测试套件,只需 通过 uv 运行 dev-cmd

.. code-block:: bash

$ uv run dev-cmd

dev-cmd 命令运行器提供了许多有用的选项,详见 https://pypi.org/project/dev-cmd/ 。下面,我们提供了在 开发 Pex 时最常用的部分命令,但熟悉文档有助于更好地理解 dev-cmd 的工作方式以及如何执行更高级的工作流。

要运行特定命令,请通过运行 uv run dev-cmd --list 来确定要调用的命令名称,然后按名称调用该命令,如下所示:

.. code-block::

$ uv run dev-cmd format

这需要输入不少内容。建议使用 shell 别名,标准别名是 uvrc, 我将在后续内容中使用该别名。

要运行 MyPy:

.. code-block::

$ uvrc typecheck

我们所有的测试都允许向 pytest 传递参数,这有助于运行特定 测试:

.. code-block::

$ uvrc test-py37-integration -- -k test_reproducible_build

要从源码运行 Pex,而不是通过 PATH 中的版本,请通过 Python 调用:

.. code-block::

$ python -m pex