2

我写了一些我想打包成鸡蛋的代码。这是我的目录结构:

源/
源/测试
src/tests/test.py # 这对电影名称解析器有几个测试
源/种子
src/torrent/__init__.py
src/torrent/movienameparser
src/torrent/movienameparser/__init__.py # 这包含代码

我想把这个目录结构打包成一个鸡蛋,并包含测试文件。我应该在setup.py文件中包含什么,以便我可以拥有任意数量的命名空间和任意数量的测试?

这是我想分享的第一个开源代码。尽管可能只有我会觉得这个模块很有用,但我还是想把它上传到pypi. 我可以使用什么许可证来允许用户使用代码做他们想做的事情,对重新分发没有限制,修改?

尽管我打算更新这个 egg,但我不想对任何事情负责(例如为用户提供支持)。我知道这听起来可能很自私,但这是我的第一个开源代码,所以请多多包涵。我需要提供许可证的副本吗?我在哪里可以找到副本?

感谢您阅读所有这些内容。

4

3 回答 3

6

我不会在这里讨论许可问题,但通常会在包源代码的根目录中包含 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_installsetuptools而且您不必为每个受支持的 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,从用户的角度介绍。

于 2009-08-19T21:29:42.057 回答
3

最好将它作为 tarball ( .tar.gz) 分发,而不是作为鸡蛋分发。Eggs 主要用于二进制分发,例如在使用已编译的 C 扩展时。在纯源代码发行版中,它们只是不必要的复杂性。

如果您只是想将您的代码发布到世界上,那么 MIT 或 3-clause BSD 许可证是最受欢迎的选择。两者都包括免责声明。您所要做的就是在 tarball 中包含主许可证;通常为“License.txt”或类似名称。或者,您可以为每个源文件添加一个小的版权通知;我鼓励这样做,因此即使没有整个存档,每个文件的状态也很明显,但有些人认为这太冗长了。这是个人喜好的问题。

BSD 许可证可在Wikipdia上获得,复制如下:

Copyright (c) <year>, <copyright holder>
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of the <organization> nor the
      names of its contributors may be used to endorse or promote products
      derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY <copyright holder> ''AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
于 2009-08-19T21:21:08.937 回答
0

包含来自setuptools 网站的ez_setup 文件,并在 setup.py 顶部包含:

from ez_setup import use_setuptools
use_setuptools()

该脚本是没有安装工具的人的助手。它会在未安装 setuptools 的系统上下载并安装最新版本的 setuptools。

于 2010-08-12T16:04:05.280 回答