跳转到主要内容

便携式Python二进制文件

项目描述

便携式Python二进制文件

Version on pypi Tested with Github Actions Test coverage Python versions tested (link to github project)

Portable-Python 是一个CLI(以及Python库)工具,可以从源代码编译Python二进制文件,并将其解压缩到任何文件夹中,从而无需进一步操作即可使用(即:无需运行“安装程序”)。

动机

这里的想法是允许自动化系统

  • 轻松获取Python二进制文件,并在沙盒/工作站/笔记本电脑/实例中使用

  • 检查任何Python安装,并指出其可移植性如何,以及它使用了哪些共享或非标准库

安装

portable-python 是一个常规的 Python CLI,可以使用以下方式安装:

pickley:

pickley install portable-python
portable-python --help
portable-python inspect /usr/bin/python3

或者 pipx

pipx install portable-python
portable-python inspect /usr/bin/python3

使用 pip install(CI 构建器可能会这样做)

/usr/bin/python3 -mvenv /tmp/pp
/tmp/pp/bin/python -mpip install portable-python
/tmp/pp/bin/portable-python --help
/tmp/pp/bin/portable-python inspect /usr/bin/python3

支持的操作系统

可移植的 Python 二进制文件可以构建为 Linux 和 MacOS(Intel/M1/M2)。

目前 Windows 不受支持,欢迎贡献。

Python 二进制文件可以生成“可移植的”(静态链接,可以从任何二进制文件解包的文件夹中运行),或者使用 --prefix(构建到预定的文件夹中,如 /apps/pythonM.m

操作系统

可移植的

–prefix

Linux

Macos

Windows

构建可移植的 cpython

一旦 portable-python 安装完毕

构建二进制文件

cd some-temp-folder
portable-python build 3.9.7
ls -l dist/cpython-3.9.7-macos-arm64.tar.gz

将其解压到某个位置

tar -C ~/tmp/versions/ -xf dist/cpython-3.9.7-macos-arm64.tar.gz
ls -l ~/tmp/versions/

即可使用

~/tmp/versions/3.9.7/bin/python --version

注意,您可以使用 --dryrun 模式来检查将要执行的操作而无需实际执行

$ portable-python --dryrun build 3.9.7

INFO selected: xz openssl gdbm (3 modules) xz:5.2.5 openssl:1.1.1k gdbm:1.18.1
INFO Platform: macos-x86_64
...
--------------
-- xz:5.2.5 --
--------------
Would download https://tukaani.org/xz/xz-5.2.5.tar.gz
Would untar build/sources/xz-5.2.5.tar.gz -> build/components/xz
INFO env PATH=build/deps/bin:/usr/bin:/bin
INFO env MACOSX_DEPLOYMENT_TARGET=10.14
Would run: ./configure --prefix=build/deps --enable-shared=no --enable-static=yes ...
...
-------------------
-- cpython:3.9.7 --
-------------------
Would download https://pythonlang.cn/ftp/python/3.9.7/Python-3.9.7.tar.xz
Would untar build/sources/Python-3.9.7.tar.xz -> build/components/cpython
...
Would run: ./configure --prefix=/ppp-marker/3.9.7 --enable-optimizations ...
Would run: /usr/bin/make
Would run: /usr/bin/make install DESTDIR=build
...
Would tar build/3.9.7 -> dist/cpython-3.9.7-macos-x86_64.tar.gz

可移植 Python 可以用作 Python 库来调用构建,或检查安装情况。

从 Python 代码中调用构建

from portable_python import BuildSetup

setup = BuildSetup("cpython:3.9.7")
setup.compile()

从 Python 代码中调用检查

from portable_python.inspector import PythonInspector

inspector = PythonInspector("/usr/bin/python3")
print(inspector.represented())
problem = inspector.full_so_report.get_problem(portable=True)
if problem:
    print("oops, it is not portable!: %s" % problem)

从源代码开始,欢迎贡献!

git clone https://github.com/codrsquad/portable-python.git
cd portable-python
python3 -mvenv .venv
.venv/bin/pip install -r requirements.txt -r tests/requirements.txt
.venv/bin/pip install -e .
.venv/bin/portable-python --help
.venv/bin/portable-python inspect /usr/bin/python3

tox -e py311
tox -e style

构建文件夹结构

portable-python 使用此文件结构(build/ 和 dist/ 文件夹可配置)

build/
    ppp-marker/3.9.7/                   # Full installation (after build completes)
    components/                         # Builds of statically compiled extension modules are here
    deps/                               # --prefix=.../deps passed to all component ./configure scripts
    sources/
        openssl-1.1.1k.tar.gz           # Downloaded artifacts (downloaded only once)
dist/
    cpython-3.9.7-macos-arm64.tar.gz    # Ready-to-go portable binary tarball

指导原则

  • 专注于一件事情:编译可移植的 Python,并验证其确实可移植,在(可配置的)./dist/ 文件夹中产生结果,仅此而已

  • 无补丁:C 编译尽可能简单,不修改上游源代码。仅依赖于 make/configure 脚本,通常通过诸如 --enable-shared=no 之类的操作

  • 构建得到验证,编写能够检查 Python 安装并检测其是否可移植的代码是这项工作的一个重要部分(以及为什么不可移植,如果确实如此)。

  • 仅支持 Python 的最新几个非 EOL 版本(不支持历史版本)

  • 随着时间的推移,这个工具的代码将不断进化,以确保最新的 Python 版本可以构建(但不会担心旧版本仍然可以构建)

对于本项目本身

  • 代码是纯 Python,它是一个 CLI,有一个名为 portable-python 的入口点

    • 可以在调试器中运行

    • 100% 测试覆盖率,有一个 --dryrun 模式来帮助进行测试/调试/快速查看将要执行的操作

    • 没有 shell 脚本(这些难以维护/测试/调试)

    • 可以 pip install 并重用

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

portable_python-1.9.3.tar.gz (46.5 kB 查看哈希值)

上传时间

构建分发

portable_python-1.9.3-py3-none-any.whl (40.5 kB 查看哈希值)

上传时间 Python 3

由以下组织支持