跳转到主要内容

Python到Debian源包转换工具,由stdeb衍生

项目描述

https://travis-ci.org/ashleysommer/stdeb3.png?branch=master

stdeb3 - Python到Debian源包转换工具

这是stdeb的移植版,进行了现代化改进,如移除构建时对python2的支持,移除对低于8(jessie)的Debian版本的支持(旧稳定版),提高所需的Debhelper版本,更新dh-compat版本等。有关更多信息,请参阅RELEASE_NOTES.txt。

stdeb3通过新的distutils命令sdist_dsc将Python包转换为Debian源包。为Debian包提供了自动默认值,但许多方面都可以进行自定义(请参阅下面的自定义部分)。额外的命令bdist_deb创建Debian二进制包,一个.deb文件。命令install_deb安装此.deb文件。命令debianize在您的setup.py旁边直接构建一个debian/目录。

还提供了一些便利工具

  • pypi-download将查询Python包索引(PyPI)以查找包并下载。

  • pypi-install将查询Python包索引(PyPI)以查找包,下载它,从中创建.deb文件,然后安装.deb。

  • py2dsc将distutils构建的源tarball转换为Debian源包。

  • py2dsc-deb 将将 distutils 构建的源 tarball 转换为 Debian 源包,然后使用 Debian 机制从这些包中构建 .deb 文件。

Python 3 支持

如以下详细解释所述,stdeb 的核心是 sdist_dsc distutils 命令。此命令运行一次以生成 Debian 源包。此 Debian 源包可以指定为 Python 2、Python 3 或两者都构建包。现在只能通过 python3 解释器执行此操作。默认情况下,仅构建正在使用的 Python 版本的包。要覆盖此设置,请使用 --with-python2=True--with-python3=True 作为 sdist_dsc distutils 命令的参数(或两者都使用以确保)。例如,使用 Python 3 解释器仅构建 Python 3 包

python3 setup.py --command-packages=stdeb3.command bdist_deb

使用 Python 3 解释器构建 Python 2 和 Python 3 包(并且仅安装 Python3 包的脚本)

python3 setup.py --command-packages=stdeb3.command sdist_dsc --with-python2=True --with-python3=True --no-python2-scripts=True bdist_deb

新闻

  • 2019-01-31:版本 0.9.0。迁移到 stdeb3。有关更改,请参阅 RELEASE_NOTES.txt。

  • 2015-02-18:版本 0.8.5。请参阅 下载页面。错误修复:已撤销在虚拟环境构建时安装到虚拟环境的更改。改进:添加 –allow-virtualenv-install-location 以允许安装到虚拟环境位置。支持 Debian Squeeze(6)、Debian Wheezy(7)、Ubuntu Precise(12.04)、Ubuntu Trusty(14.04)和后续版本。

  • 2015-02-16:版本 0.8.4。请参阅 下载页面。错误修复:再次在 Python 3.4(例如 Ubuntu Trusty)上工作。改进:改进了 Python 3 的自定义(Dirk Thomas 添加了 force-x-python3-versionX-Python3-Version,Louis 添加了 Recommends3Suggests3Provides3Replaces3 支持)。支持 Debian Squeeze(6)、Debian Wheezy(7)、Ubuntu Precise(12.04)、Ubuntu Trusty(14.04)和后续版本。

  • 2015-02-14:版本 0.8.3。请参阅 下载页面。这是一个错误修复版本,修复了 Unicode 支持的几个方面。测试通过 Debian Squeeze(6)、Debian Wheezy(7)和 Ubuntu Precise(12.04)。Python 3.4(例如 Ubuntu Trusty 14.04)的支持被错误地破坏,并在 0.8.3 版本中修复。

  • 2014-8-14:版本 0.8.2。请参阅 下载页面。这是一个错误修复版本,修复了在某些情况下请求 Python 3 包时构建 Python 2 包的严重问题。

  • 2014-8-10:版本 0.8.1。请参阅 下载页面。由于 0.8.0 中的错误,这是 0.8 系列的第一个宣布版本。自 0.7.1 以来亮点

    • 完全支持Python 3。这包括使用Python 3运行以及为Python 3生成包。默认情况下,使用Python 3运行时构建Python 3包,从Python 2运行时构建Python 2包。可以使用命令行选项来构建其他Python解释器的包。

    • 为源包构建.changes文件。虽然这仍然需要在例如上传到PPA时签名,但在某些情况下仍然有用。

    • 切换到Debian源格式3.0(quilt)。实际上,过去随源包提供的.diff.gz文件现在被.deb.tar.gz文件替换。

    • 使用Requests与PyPI通信时验证SSL证书。(验证需要Requests >= 0.8.8。)

    • 许多错误修复。

  • 2014-05-05:版本0.7.1。请参阅下载页面。本次发布亮点(您还可以查看完整的变更日志)。由于0.7.0中的错误,本次发布是0.7系列的第一个发布。自0.6.0以来的亮点

    • 新增命令:pypi-download和pypi-install,分别用于直接从PyPI下载和安装包。py2dsc-deb直接从源tarball创建.deb文件。

    • 新增distutils命令:install_deb,允许您将Python包直接安装为标准系统包。

    • 许多错误修复,包括新的PyPI URL。

    • 感谢Travis CI自动运行测试套件。

    • 感谢许多人的帮助,特别是Piotr Ożarowski对stdeb的帮助。

  • 2010-06-18:版本0.6.0。请参阅下载页面。本次发布亮点(您还可以查看完整的变更日志

    • 新增debianize命令,在您的setup.py文件旁边构建debian/目录。

    • 错误修复。

  • 2010-01-09:版本0.5.1。错误修复版本。请参阅下载页面变更日志发行说明

  • 2009-12-30:版本0.5.0。请参阅下载页面。本次发布亮点(您还可以查看完整的变更日志

    • 新增pypi-install脚本,可以自动下载、创建.deb文件并安装来自Python包索引(PyPI)的包。

    • 移除了setuptools依赖。

    • 新增选项(–guess-conflicts-provides-replaces),用于查询原始Debian包的Conflicts/Provides/Replaces信息。

    • 由于这些更改和修复了一些错误/瑕疵,进行了一些较小的向后不兼容的更改和弃用。请查看发行说明

  • 2009-12-28:版本0.4.3发布。请参阅下载页面。请参阅变更日志发行说明

  • 2009-11-02:版本0.4.2发布。请参阅下载页面。请参阅变更日志发行说明

  • 2009-10-04:版本0.4.1发布。请参阅下载页面。请参阅变更日志发行说明

  • 2009-09-27: 版本 0.4 发布。请参阅下载页面。此版本切换到 debhelper 7。请参阅0.4 版本的变更日志

版本 0.3.2 及之前的版本与 Ubuntu Hardy 兼容。

命令

pypi-download,命令行命令

pypi-download 接收一个包名,查询 PyPI 并下载它

pypi-download [options] mypackage

pypi-install,命令行命令

pypi-install 接收一个包名,查询 PyPI,下载它,从它构建一个 Debian 源包,然后构建 .deb 文件,并安装它

pypi-install [options] mypackage

py2dsc,命令行命令

py2dsc 接收一个 .tar.gz 源包并构建一个 Debian 源包

py2dsc [options] mypackage-0.1.tar.gz # uses pre-built Python source package

py2dsc-deb,命令行命令

py2dsc-deb 接收一个 .tar.gz 源包并构建一个 Debian 源包和 .deb 文件

py2dsc-deb [options] mypackage-0.1.tar.gz # uses pre-built Python source package

sdist_dsc,distutils 命令

所有方法最终都会调用 sdist_dsc distutils 命令。您可能更喜欢直接这样做

python3 setup.py --command-packages=stdeb3.command sdist_dsc

从未经修改的 Python 包生成 Debian 源包。以下文件将在新创建的子目录 deb_dist 中生成

  • packagename_versionname.orig.tar.gz

  • packagename_versionname-debianversion.dsc

  • packagename_versionname-debianversion.diff.gz

然后可以使用标准的 Debian 工具(例如 dpkg-buildpackage)将它们编译成二进制包

bdist_deb,distutils 命令

安装了 bdist_deb distutils 命令。这调用 sdist_dsc 命令,然后对结果运行 dpkg-buildpackage

python3 setup.py --command-packages=stdeb3.command bdist_deb

install_deb,distutils 命令

install_deb distutils 命令调用 bdist_deb 命令,然后安装结果。您需要以超级用户权限运行此命令

sudo python3 setup.py --command-packages=stdeb3.command install_deb

debianize,distutils 命令

debianize distutils 命令构建与上一个命令相同的 debian/ 目录,但输出直接放在项目的根目录中(与 setup.py 并排)。这对于直接定制 Debian 包非常有用(而不是使用各种 stdeb 选项来调整生成的包)。

python3 setup.py --command-packages=stdeb3.command debianize

关于告诉 distutils 使用 stdeb distutils 命令的注意事项

Distutils 命令也可以在 distutils 配置文件中指定(而不是使用 --command-packages 命令行参数到 setup.py),如 distutils 文档 所述。具体来说,您可以将此包含在您的 ~/.pydistutils.cfg 文件中

[global]
command-packages: stdeb3.command

示例

这些都假设您已将 stde3b 安装在系统 Python 路径中。stdeb3 也从非系统 Python 路径(例如 virtualenv)工作。

快速入门 1:现在从 PyPI 安装某个东西,我不关心其他任何事情

从命令行执行此操作

pypi-install mypackage

警告:尽管尽力而为,stdeb也无法保证在没有人工干预的情况下,所有Debian软件包依赖项都能得到正确满足。使用pypi-install会绕过您对stdeb行为的自定义。请阅读本文件的其余部分,了解如何创建更好的软件包。

快速入门 2:只告诉我制作 .deb 文件的最快方式

(首先,像通常安装Python软件包一样安装stdeb3。)

从包含您的setup.py文件的目录中执行此操作

python3 setup.py --command-packages=stdeb3.command bdist_deb

这将创建一个Debian源软件包(.dsc、.orig.tar.gz和.diff.gz文件),然后将其编译成适用于您当前系统的Debian二进制软件包(.deb)。结果将保存在deb_dist中。

警告:在编译它的Ubuntu或Debian版本之外的其他版本上安装.deb文件会导致未定义的行为。如果您有扩展模块,它们可能会损坏。即使在没有扩展模块的情况下,也可能发生一些不好的事情。

因此,最好为每个目标Debian或Ubuntu版本构建Debian源软件包,然后编译它(例如,使用Ubuntu的PPA)。

快速入门 3:我已阅读警告,所以请展示如何制作源包,然后编译它

这会生成一个源软件包

wget http://pypi.python.org/packages/source/R/Reindent/Reindent-0.1.0.tar.gz
py2dsc Reindent-0.1.0.tar.gz

使用标准的Debian工具将其转换为.deb文件。(对每个目标发行版使用相同的源软件包执行操作)

cd deb_dist/reindent-0.1.0/
dpkg-buildpackage -rfakeroot -uc -us

这将安装它

cd ..
sudo dpkg -i python-reindent_0.1.0-1_all.deb

快速入门 4:从 Python 包直接安装到 Debian 系统包

(首先,像通常安装Python软件包一样安装stdeb。)

从包含您的setup.py文件的目录中执行此操作

python3 setup.py --command-packages=stdeb3.command install_deb

这将创建一个Debian源软件包(.dsc、.orig.tar.gz和.diff.gz文件),将其编译成适用于您当前系统的Debian二进制软件包(.deb),然后使用dpkg安装。

另一个示例,带有更多说明

此示例如果您的Python源软件包(由python setup.py sdist生成的.tar.gz文件)不存在,则更有用。为了说明,我们下载了这样的压缩包,但立即解压缩它(或者使用版本控制系统获取软件包解压缩后的源代码)

wget http://pypi.python.org/packages/source/R/Reindent/Reindent-0.1.0.tar.gz
tar xzf Reindent-0.1.0.tar.gz
cd Reindent-0.1.0

以下操作将生成一个包含文件reindent_0.1.0-1.dscreindent_0.1.0.orig.tar.gzreindent_0.1.0-1.diff.gzdeb_dist目录,这三个文件合在一起就是一个Debian源软件包

python3 setup.py --command-packages=stdeb3.command sdist_dsc

以上生成的方式生成的源代码也将被解压缩(使用dpkg-source -x)并放置在deb_dist子目录中。为了继续上面的示例

cd deb_dist/reindent-0.1.0
dpkg-buildpackage -rfakeroot -uc -us

最后,生成的软件包可以安装

cd ..
sudo dpkg -i python-reindent_0.1.0-1_all.deb

有关更多用法示例和解释,请参阅allmydata-tahoe工单251

下载

文件可在下载页面找到(对于旧版本,请参阅旧下载页面)。

git存储库可在http://github.com/astraw/stdeb找到

安装(或,使用 stdeb 创建 stdeb 安装程序)

为了好玩,以下是使用stdeb安装stdeb的方法。请注意,stdeb也存在于Debian和Ubuntu中,因此此食谱仅用于安装较新的stdeb。

STDEB3_VERSION="0.9.0"

# Download stdeb3
wget http://pypi.python.org/packages/source/s/stdeb3/stdeb3-$STDEB3_VERSION.tar.gz

# Extract it
tar xzf stdeb3-$STDEB3_VERSION.tar.gz

# Enter extracted source package
cd stdeb3-$STDEB3_VERSION

# Build .deb (making use of stdeb package directory in sys.path).
python3 setup.py --command-packages=stdeb3.command bdist_deb

# Install it
sudo dpkg -i deb_dist/python-stdeb3_$STDEB3_VERSION-1_all.deb

背景

对于普通Python软件包,其源分发(使用python3 setup.py sdist创建的python_package.tar.gz)包含了制作Debian源软件包所需的几乎所有内容。这种近似等价性鼓励我编写了这个distutils扩展,它会执行setup.py文件以提取相关信息。《setuptools》可能作为可选使用。

最初我写这个是为了将我自己的几个Python包Debian化,但我觉得它可能具有普遍的实用性。在理论上,它与easydebLogilab的Devtoolsbdist_dpkgbdist_debpkgmedh-virtualenv类似。

功能

  • 为python-support支持的Python所有版本创建一个软件包。(可以通过XS-Python-Version:配置选项来限制这个范围。)

  • 自动将Python包名称转换为有效的Debian包名称。

  • 尝试自动转换版本号以保持排序顺序。另请参阅配置选项Forced-Upstream-Version

  • 精细控制版本号。(Debian-VersionForced-Upstream-VersionUpstream-Version-PrefixUpstream-Version-Suffix配置选项。)

  • 安装.desktop文件。(MIME-Desktop-Files配置选项。)

  • 安装.mime和.sharedmimeinfo文件。(MIME-FileShared-MIME-File配置选项。)

  • 安装版权文件。(Copyright-File配置选项。)

  • 对上游源代码应用补丁。(Stdeb-Patch-File配置选项。)

  • 将环境变量传递给setup.py脚本。(Setup-Env-Vars配置选项。)

自定义生成的 Debian 源包(配置选项)

stdeb将尝试提供合理的默认值,但这些只是猜测。

有两种方法可以自定义stdeb生成的Debian源包。首先,您可以为distutils命令提供选项。其次,您可以提供一个stdeb.cfg文件。

stdeb distutils 命令选项

distutils命令的sdist_dsc命令接受命令行选项。例如

python3 setup.py --command-packages=stdeb3.command sdist_dsc --debian-version 0MyName1

这创建了一个设置Debian版本为“0MyName1”的Debian包。

这些选项也可以通过distutils配置文件设置。(这些是与setup.py一起的setup.cfg文件和~/.pydistutils.cfg文件。)在这种情况下,将参数放在[sdist_dsc]部分。例如,一个项目的~/.setup.cfg文件可能如下所示

[sdist_dsc]
debian-version: 0MyName1

要在调用bdist_deb时传递这些命令给sdist_dsc,请这样做

python3 setup.py sdist_dsc --debian-version 0MyName1 bdist_deb

命令行选项

效果

–with-python2

构建Python 2包(默认=True)

–with-python3

构建Python 3包(默认=False)

–no-python2-scripts

禁用Python 2脚本的安装(默认=False)

–no-python3-scripts

禁用Python 3脚本的安装(默认=False)

–force-x-python3-version

使用x-python3-version的值覆盖默认的python3:any依赖项

–allow-virtualenv-install-location

允许安装到/some/random/virtualenv-path

–sign-results

使用gpg签署生成的.dsc和.changes文件

–sign-key

使用此gpg密钥签名进行签署

–dist-dir (-d)

将最终构建的发行版放在的目录(默认=’deb_dist’)

–patch-already-applied (-a)

补丁已经应用(在py2dsc调用sdist_dsc时使用)

–default-distribution

已弃用(请参阅–suite)

–suite (-z)

如果未在.cfg中指定,则使用此发行版名称(默认=’unstable’)

–default-maintainer

已弃用(请参阅–maintainer)

–maintainer (-m)

如果未在.cfg中指定,则使用维护者名称和电子邮件(默认来自setup.py)

–extra-cfg-file (-x)

额外的.cfg文件(在stdeb.cfg存在的情况下)

–patch-file (-p)

在调用setup.py之前应用的补丁文件(与.cfg中指定的文件不兼容)

–patch-level (-l)

在调用setup.py之前应用的补丁文件(与.cfg中指定的文件不兼容)

–patch-posix (-q)

以–posix模式应用补丁

–remove-expanded-source-dir (-r)

移除已展开的源目录

–ignore-install-requires (-i)

忽略egg-info目录中requires.txt的要求

–guess-conflicts-provides-replaces

如果为True,尝试根据apt-cache输出猜测debian/control中的Conflicts/Provides/Replaces。默认=False。

–use-premade-distfile (-P)

使用sdist命令已制作的.zip或.tar.gz文件

–source

debian/control Source: (默认: )

–package

debian/control Package: (默认: python-)

–suite

changelog中的suite(例如stable, lucid)(默认: unstable)

–maintainer

debian/control Maintainer: (默认: )

–debian-version

debian版本(默认: 1)

–section

debian/control Section: (默认: python)

–epoch

版本纪元

–forced-upstream-version

强制上游版本

–upstream-version-prefix

上游版本前缀

–upstream-version-suffix

上游版本后缀

–uploaders

上传者

–copyright-file

版权文件

–build-depends

debian/control Build-Depends

–build-conflicts

debian/control Build-Conflicts

–stdeb-patch-file

包含要应用于stdeb的补丁的文件

–stdeb-patch-level

提供给patch命令的补丁级别

–depends

debian/control Depends

–suggests

debian/control Suggests

–recommends

debian/control Recommends

–xs-python-version

debian/control XS-Python-Version

–x-python3-version

debian/control X-Python3-Version

–dpkg-shlibdeps-params

传递给dpkg-shlibdeps的参数

–conflicts

debian/control Conflicts

–provides

debian/control Provides

–replaces

debian/control Replaces

–mime-desktop-files

MIME桌面文件

–mime-file

MIME文件

–shared-mime-file

共享MIME文件

–setup-env-vars

传递给setup.py的环境变量

–udev-rules

包含安装到udev的规则的文件

–with-dh-addons

包括在规则文件中的debhelper附加组件的逗号分隔列表

您也可以通过distutils选项传递以下任何描述的stdeb.cfg文件参数。以这种方式传递参数(无论是在命令行中还是在distutils .cfg文件的[sdist_dsc]部分)将具有优先权。选项名称应使用小写。

stdeb.cfg 配置文件

您可以使用ConfigParser理解的格式编写配置文件。在构建每个包时,stdeb都会在包含setup.py的目录中查找是否存在stdeb.cfg文件。您可以使用命令行选项–extra-cfg-file指定额外的配置文件。部分应该是[DEFAULT]或[package_name],其中package_name是setup()命令的名称参数。一个示例stdeb.cfg文件是

[DEFAULT]
Depends: python3-numpy
XS-Python-Version: >= 2.7

所有可用选项

配置文件选项

效果

Source

debian/control Source: (默认: )

Package

debian/control Package: (默认: python-)

Suite

changelog中的suite(例如stable, lucid)(默认: unstable)

Maintainer

debian/control Maintainer: (默认: )

Debian-Version

debian版本(默认: 1)

Section

debian/control Section: (默认: python)

Epoch

版本纪元

Forced-Upstream-Version

强制上游版本

Upstream-Version-Prefix

上游版本前缀

Upstream-Version-Suffix

上游版本后缀

Uploaders

debian/control Uploaders

Description

覆盖默认自动生成的debian/control Description

Long-Description

覆盖默认的debian/control long-description

Homepage

debian/control Homepage

Copyright-File

版权文件

Changelog

指定自己的debian/changelog文件

News-File

用作debian/NEWS的文件

Build-Depends

debian/control Build-Depends

Build-Conflicts

debian/control Build-Conflicts

Stdeb-Patch-File

包含要应用于stdeb的补丁的文件

Stdeb-Patch-Level

提供给patch命令的补丁级别

Depends

debian/control Depends

Depends3

debian/control Depends: 用于python3

Suggests

debian/control Suggests

Suggests3

debian/control Suggests: 用于python3

Recommends

debian/control Recommends

Recommends3

debian/control 推荐项:用于 python3

XS-Python版本

debian/control XS-Python-Version

X-Python3版本

debian/control X-Python3-Version

Dpkg-Shlibdeps-参数

传递给dpkg-shlibdeps的参数

冲突

debian/control Conflicts

冲突3

debian/control 冲突:用于python3

破坏

debian/control 破坏

破坏3

debian/control 破坏:用于python3

提供

debian/control Provides

提供3

debian/control 提供:用于python3

替换

debian/control Replaces

替换3

debian/control 替换:用于python3

MIME-桌面文件

MIME桌面文件

MIME-文件

MIME文件

共享MIME-文件

共享MIME文件

设置环境变量

传递给setup.py的环境变量

Udev规则

包含安装到udev的规则的文件

stdeb.cfg文件中的选项名称不区分大小写。

先决条件

  • Python 3.4+

  • 标准的Debian工具,如 datedpkg-source 和 Debhelper 9(如果需要支持没有dh9的旧版本发行版,请使用stdeb 0.8.x)

  • 如果您的setup.py使用setuptools功能 setup_requiresinstall_requires,则在运行任何stdeb命令之前,您必须运行 apt-file update

待办事项

  • 输出满足 Debian Python策略 规范或 新的python策略。这包括许多事情,其中包括

    • 能够将项目提供的文档作为 -doc 软件包包含在内

    • 能够将项目提供的示例、测试和数据作为单独的软件包包含在内

    • 更多未列出的内容

  • 创建(更好的)文档

  • 使用标准的distutils机制记录输出

  • 重构源代码以具有更简单、更合理的结构

许可协议

MIT风格许可。版权(c)2006-2019 stdeb 作者。

有关详细信息,请参阅源分发中提供的LICENSE.txt文件。

作者

额外感谢

  • Zooko O’Whielacronx为autofind-depends补丁。

  • Brett(姓氏未知)为–ignore-install-requires补丁。

  • 罗敏 Luo为错误修复。

  • Alexander D. Sedov为错误修复和建议。

  • Michele Mattioni为错误修复。

  • Alexander V. Nikolaev为debhelper构建系统规范。

  • Roland Sommer为描述字段错误修复。

  • Barry Warsaw建议debianize命令。

  • Asheesh Laroia更新PyPI URL。

  • Piotr Ożarowski实现dh_python2支持。

  • Nikita Burtsev为Unicode测试和修复。

  • Mikołaj Siedlarek为错误修复。

  • Dirk Thomas为–force-x-python3-version和X-Python3-Version。

  • Louis为Recommends3、Suggests3、Provides3和Replaces3支持。

  • kzwin为与virtualenv的互操作性。

  • GitHub为托管服务。

  • WebFaction(又名 python-hosting)为之前的托管服务。

  • TravisCI为持续集成。

项目详情


下载文件

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

源分发

stdeb3-0.9.0.post2.tar.gz (68.2 kB 查看哈希值)

上传于 源代码

构建版本

stdeb3-0.9.0.post2-py3-none-any.whl (51.5 kB 查看哈希值)

上传于 Python 3

由以下支持