我不会在这里讨论许可问题,但通常会在包源代码的根目录中包含 LICENSE 文件,以及其他常见的东西,如 README 等。
我通常以安装在目标系统上的相同方式组织包。标准包布局约定在这里解释。
例如,如果我的包是“torrent”并且它有几个子包,例如“tests”和“util”,那么源代码树如下所示:
工作区/torrent/setup.py
工作区/torrent/torrent/__init__.py
工作区/torrent/torrent/foo.py
工作区/torrent/torrent/bar.py
工作区/洪流/洪流/...
工作区/torrent/torrent/tests/__init__.py
工作区/torrent/torrent/tests/test.py
工作区/洪流/洪流/测试/...
工作区/torrent/torrent/util/__init__.py
工作区/torrent/torrent/util/helper1.py
工作区/torrent/torrent/util/...
这个“torrent/torrent”位似乎是多余的,但这是这个标准约定和 Python 导入如何工作的副作用。
这是极简主义setup.py
(有关如何编写设置脚本的更多信息):
#!/usr/bin/env python
from distutils.core import setup
setup(name='torrent',
version='0.1',
description='would be nice',
packages=['torrent', 'torrent.tests', 'torrent.util']
)
要获得源发行版,我会这样做:
$ cd 工作区/种子
$ ./setup.py sdist
该发行版 ( dist/torrent-0.1.tar.gz
) 可以单独使用,只需解压并运行setup.py install
或使用工具包即可easy_install
。setuptools
而且您不必为每个受支持的 Python 版本制作多个“彩蛋”。
setuptools
如果你真的需要一个 egg,你需要在你的 中添加一个依赖setup.py
,这将引入一个额外的子命令bdist_egg
来生成鸡蛋。
但是setuptools
除了它的产蛋质量之外还有另一个优点,它消除了setup.py
使用一个很好的辅助函数枚举你的包的需要find_packages
:
#!/usr/bin/env python
from setuptools import setup, find_packages
setup(name='torrent',
version='0.1',
description='would be nice',
packages=find_packages()
)
然后,为了获得一个“鸡蛋”,我会这样做:
$ cd 工作区
$ ./setup.py bdist_egg
...它会给我鸡蛋文件:dist/torrent-0.1-py2.6.egg
注意py2.6
后缀,这是因为在我的机器上我有 Python 2.6。如果你想取悦很多人,你需要为每个主要的 Python 版本发布一个 egg。您不希望成群结队的 Python 2.5 人在家门口拿着斧头和长矛,对吗?
但是您不必构建一个鸡蛋,您仍然可以使用sdist
子命令。
更新:这是Python 文档中另一个有用的页面Distutils
,从用户的角度介绍。