跳转到主要内容

DRY Python包构建工具

项目描述

Pyron是一个简单的工具,它允许你在避免编写和维护“setup.py”文件复杂性的同时开发和分发Python包。使用Pyron,你正在开发的每个包只需要一个小的pyron.ini文件,其格式旨在帮助你避免重复。

使用Pyron进行开发

要查看Pyron的实际应用,请安装Ian Bicking的virtualenv工具并创建一个虚拟环境作为你的开发环境。在此处安装Pyron包。

$ virtualenv dev
$ cd dev
$ source bin/activate
(dev)$ ls
bin/  include/  lib/
(dev)$ pip install pyron
...
Successfully installed argparse pyron

目前使用Pyron开发的两个包,我们可以将其用作示例,是你在Python包索引上可能看到的一些cursive工具。你可以非常简单地使用Mercurial检查它们的发展树

(dev)$ hg clone http://bitbucket.org/brandon/cursivepymag
(dev)$ hg clone http://bitbucket.org/brandon/cursivetools
(dev)$ ls
bin/  cursivepymag/  cursivetools/  include/  lib/

你可以始终通过顶部级别的pyron.ini文件来识别由Pyron提供支持的开发包。

(dev)$ ls cursivetools
README.txt  __init__.py  cursive.py  entry_points.ini  pyron.ini  wc.py

pyron.ini文件包含有关项目的所有基本元数据,这些元数据不能从其内容中轻松内省

(dev)$ cat cursivetools/pyron.ini
[package]
name = cursive.tools
author = Brandon Craig Rhodes <brandon@rhodesmill.org>
url = http://bitbucket.org/brandon/cursivetools/
requires = docutils

但是,版本直接从包的__init__.py文件中的__version__符号中获取,以避免在两个不同的地方维护相同的版本号。

(dev)$ grep __version__ cursivetools/__init__.py
__version__ = '0.3'

为该软件包在Python软件包索引上放置的描述将从README.txt中直接复制,其应从可用于软件包索引简要描述的标题开始

(dev)$ head -6 cursivetools/README.txt

Tools for authoring restructured text files
===========================================

This package provides a ``cursive`` command that is intended to become
the core of a whole set of tools for working with `reStructured Text`_

通过从软件包的代码和其README.txt中的文档中提取版本信息,Pyron不仅强制执行良好的Python社区习俗,还避免了让开发者重复在不同地方输入相同的信息,或者编写复杂的setup.py代码从其他地方拉取信息。

激活开发包

在开发包时,您不仅需要在硬盘上拥有其文件,还需要Python本身能够看到这个包。这涉及到三个方面

  • Python应该能够导入这个包。

  • 该包的入口点应该可用。

  • 该包声明的任何控制台脚本都应该被安装。

在我们例子中的开发包中,这三个条件都不成立,因为Python还无法看到它们。

(dev)$ python -c 'import cursive.tools'
Traceback (most recent call last):
  ...
ImportError: No module named cursive.tools

为了使该软件包的开发副本“出现在”我们的虚拟环境中,我们必须使用Pyron命令行工具来激活它。您可以使用Pyron的“状态”(缩写为“st”)命令来查看当前虚拟环境中哪些开发包处于活动状态,并使用“添加”(add)命令来激活更多项目

(dev)$ pyron status
No packages are under development in this environment.
(dev)$ pyron add cursivetools
(dev)$ pyron status
/home/brandon/dev/cursivetools
    Package: cursive.tools
    Console-script: cursive (cursive.tools.cursive:console_script_cursive)

如您从“状态”(status)命令中看到的那样,cursive.tools包现在正在积极开发。这意味着Python现在能够导入它!您可以验证Python现在正在从其开发目录直接加载该包

(dev)$ python
>>> import cursive.tools
>>> cursive.tools.__file__
'/home/brandon/dev/cursivetools/__init__.py'
>>> exit()

cursive.tools声明的控制台脚本现在也在虚拟环境中可用。

(dev)$ bin/cursive
Usage: cursive [options] <command> [options]
...
Available Commands:

 wc - Word count

上述输出显示,cursive.tools包现在完全运行,并且其一个内置的入口点(定义了“wc”子命令)也已激活。要添加另一个入口点,我们可以激活之前下载的cursive.pymag

(dev)$ pyron add cursivepymag
(dev)$ pyron st
/home/brandon/dev/cursivetools
    Package: cursive.tools
        Console-script: cursive (cursive.tools.cursive:console_script_cursive)

/home/brandon/dev/cursivepymag
    Package: cursive.pymag

(dev)$ bin/cursive
Usage: cursive [options] <command> [options]
...
Available Commands:

 pymag - Convert an RST document to Python Magazine Ceres markup
 wc    - Word count

您可以看到第二个子命令“pymag”可用,因为cursive.pymag包声明了它的入口点。使用Pyron激活开发项目具有运行带有develop子命令的setup.py的所有旧优势,但还具有以下附加功能:元数据始终从pyron.ini文件实时拉取(而不是复制到egg-info目录中并变得过时),并且您可以轻松地关闭包。您可以使用“移除”(remove)或“rm”子命令通过指定它们的目录名或使用包名称本身来关闭它们

(dev)$ pyron rm ./cursivepymag
(dev)$ pyron rm cursive.tools
(dev)$ pyron st
No packages are under development in this environment.
(dev)$ python -c 'import cursive.tools'
Traceback (most recent call last):
  ...
ImportError: No module named cursive.tools
(dev)$ bin/cursive
zsh: no such file or directory: bin/cursive

这使得在编写和测试代码时可以轻松快速地调整活动开发包的混合。

部署包

与其他人共享Python包通常有两个步骤:首先需要在Python软件包索引上注册该包,以便其名称、描述和其他元数据显示出来,然后您需要提供一个其他人可以下载并使用pip或easy_install安装的.tar.gz文件。这两个步骤使用Pyron很容易完成

(dev)$ pyron register cursivetools
(dev)$ pyron upload cursivetools

对于这两个子命令,实际上对于大多数Pyron命令,您应该跟在命令后面,提供包含Pyron驱动开发包的目录名之一或多个。如果您不提供目录名,则搜索当前目录,因此上述两个命令也可以写成

(dev)$ cd cursivetools
(dev)$ pyron register
(dev)$ pyron upload
(dev)$ cd ..

如果您希望将源分布写入本地文件,而暂时不对全世界公开,请使用“sdist”子命令。它会打印出它创建的文件名。

(dev)$ pyron sdist cursivetools
./cursive.tools-0.3.tar.gz

请注意,当Pyron构建一个.tar.gz分布时,它包含了开发包中的大部分文件,除了Pyron

  • 忽略以点开头的隐藏文件。

  • 忽略以.pyc.pyo结尾的文件。

  • 不包括pyron.ini文件。

  • 不包括entry_points.ini文件(如果有)。

因此,在运行“sdist”或“upload”子命令之前,您应确保开发包目录中没有任何临时数据或其他不必要的文件,否则这些文件将包含在归档中。

请注意,Pyron没有提供构建或分发C语言扩展、共享库或其他必须编译的二进制代码的设置。如果您的包需要编译才能运行,那么您应该使用正常的setup.py机制;这正是它擅长的:在已经复杂的情况下,您需要大量控制复杂的构建过程。相比之下,Pyron仅用于分发纯Python包。

项目详情


下载文件

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

源分布

pyron-0.2.tar.gz (16.7 kB 查看哈希)

上传时间:

支持者: