4. 创建源分发¶
注解
本文件仅保留至 setuptools https://setuptools.readthedocs.io/en/latest/setuptools.html上的文档独立地涵盖了此处当前包含的所有相关信息。
如第节所示 一个简单的例子 ,您使用 sdist 创建源分发的命令。在最简单的情况下:
python setup.py sdist
(假设您没有指定 sdist 设置脚本或配置文件中的选项)。 sdist 为当前平台创建默认格式的存档。默认格式是gzip'ed tar文件 (.tar.gz )在Unix上,在Windows上是zip文件。
您可以使用 --formats 选项,例如:
python setup.py sdist --formats=gztar,zip
创建gzipped tarball和zip文件。可用的格式有:
格式 |
描述 |
笔记 |
|---|---|---|
|
压缩文件 ( |
(1),(3) |
|
gzip'ed tar文件 ( |
(2) |
|
bzip2'ed tar文件 ( |
|
|
XAR焦油锉 ( |
|
|
压缩tar文件 ( |
(4) |
|
焦油锉 ( |
在 3.5 版更改: 增加了对 xztar 格式。
笔记:
Windows上的默认设置
UNIX上的缺省
需要外部 zip 效用或
zipfile模块(自python 1.6以来标准python库的一部分)需要 compress 程序。请注意,此格式现在正等待取消预测,并将在将来的Python版本中删除。
当使用任何 tar 格式 (gztar , bztar , xztar , ztar 或 tar ,在Unix下,可以指定 owner 和 group 将为存档的每个成员设置的名称。
例如,如果希望存档的所有文件都归根目录所有:
python setup.py sdist --owner=root --group=root
4.1. 指定要分发的文件¶
如果没有提供明确的文件列表(或有关如何生成文件的说明),则 sdist 命令将最小默认集放入源分发:
所有python源文件
py_modules和packages选项中提到的所有C源文件
ext_modules或libraries选项脚本由
scripts选项请参见 正在安装脚本 .任何看起来像测试脚本的内容:
test/test*.py(目前,distuils对测试脚本不做任何操作,除了将它们包含在源代码发行版中之外,但将来将有一个用于测试Python模块发行版的标准)任何标准自述文件 (
README,README.txt或README.rst)setup.py(或您称之为安装脚本的任何内容),以及setup.cfg.与匹配的所有文件
package_data元数据。见 正在安装包数据 .与匹配的所有文件
data_files元数据。见 安装其他文件 .
有时这就足够了,但通常您需要指定要分发的其他文件。典型的方法是写一个 清单模板 ,叫做 MANIFEST.in 默认情况下。清单模板只是如何生成清单文件的指令列表, MANIFEST ,这是要包含在源分发中的文件的确切列表。这个 sdist 命令处理此模板,并根据其指令和在文件系统中找到的内容生成清单。
如果您类似于滚动自己的清单文件,格式很简单:每行一个文件名,常规文件(或指向它们的符号链接)。如果你提供你自己的 MANIFEST ,必须指定所有内容:在这种情况下,上面描述的默认文件集不适用。
在 3.1 版更改: 现有生成的 MANIFEST 将在没有 sdist 将其修改时间与 MANIFEST.in 或 setup.py .
在 3.1.3 版更改: MANIFEST 文件以指示生成它们的注释开始。没有此注释的文件不会被覆盖或删除。
在 3.2.2 版更改: sdist 将阅读 MANIFEST 文件否 MANIFEST.in 存在,就像过去一样。
在 3.7 版更改: README.rst 现在包含在distutils标准自述文件列表中。
清单模板每行有一个命令,其中每个命令指定一组要包含或从源分发中排除的文件。例如,我们再次使用distutils自己的清单模板:
include *.txt
recursive-include examples *.txt *.py
prune examples/sample?/build
其含义应该相当清楚:包括分发根目录匹配中的所有文件 *.txt ,所有文件位于 examples 目录匹配 *.txt 或 *.py ,并排除所有匹配的目录 examples/sample?/build .所有这些都完成了 之后 标准包含集,因此可以使用清单模板中的显式说明从标准集排除文件。(或者,您可以使用 --no-defaults 选项完全禁用标准集。)清单模板迷你语言中还有其他几个命令可用;请参见第节 创建源分发:源分发 sdist 命令 .
清单模板中命令的顺序很重要:最初,我们有如上所述的默认文件列表,模板中的每个命令都添加到该文件列表或从中删除。一旦我们完全处理了清单模板,我们将删除不应包含在源分发中的文件:
distutils“build”树中的所有文件(默认
build/)名为的目录中的所有文件
RCS,CVS,.svn,.hg,.git,.bzr或_darcs
现在我们有了完整的文件列表,这些文件被写入清单以供将来参考,然后用于构建源分发存档。
您可以使用 --no-defaults 选项,您可以禁用标准排除集 --no-prune .
按照distutils自己的清单模板,我们来跟踪 sdist 命令生成要包含在distutils源分发中的文件列表:
在中包含所有python源文件
distutils和distutils/command子目录(因为在packages设置脚本中的选项---请参见第节 编写安装脚本 )包括
README.txt,setup.py和setup.cfg(标准文件)包括
test/test*.py(标准文件)包括
*.txt在分发根目录中(这将找到README.txt第二次,但这样的冗余稍后会被消除)包括任何匹配的内容
*.txt或*.py在下面的子树中examples,从目录匹配开始排除子目录树中的所有文件
examples/sample?/build---这可能会排除前两个步骤包含的文件,因此prune清单模板中的命令出现在recursive-include命令排除整个
build树,以及任何RCS,CVS,.svn,.hg,.git,.bzr和_darcs目录
就像在安装脚本中一样,清单模板中的文件名和目录名应该始终用斜线分隔;distuils将负责将它们转换为平台上的标准表示形式。这样,清单模板就可以跨操作系统进行移植。