我写了一些我想打包成鸡蛋的代码。这是我的目录结构:
src/ src/tests src/tests/test.py # this has several tests for the movie name parser src/torrent src/torrent/__init__.py src/torrent/movienameparser src/torrent/movienameparser/__init__.py # this contains the code
我想将这个目录结构打包为一个egg,并包含测试文件。我应该在setup.py
文件中包含哪些内容,以便我可以拥有任意数量的命名空间和任意数量的测试?
这是我想分享的第一个开源代码。即使可能,我将是唯一一个会发现此模块有用的人,我想将其上传到pypi
。我可以使用哪种许可证,允许用户使用代码执行他们想要的操作,对重新分发,修改没有限制?
即使我计划更新这个鸡蛋,我也不想对任何事情负责(比如为用户提供支持)。我知道这可能听起来很自私,但这是我的第一个开源代码,所以请耐心等待。我是否需要提供许可证副本?我在哪里可以找到副本?
感谢您阅读所有这些内容。
答案 0 :(得分:6)
我不会在这里进行许可讨论,但通常会在您的软件包源代码的根目录中包含LICENSE文件,以及README等其他常规内容。
我通常以与在目标系统上安装相同的方式组织包。标准包布局约定解释为here.
例如,如果我的包是'torrent'并且它有一些子包,例如'tests'和'util',那么源代码树将是这样的:
workspace/torrent/setup.py workspace/torrent/torrent/__init__.py workspace/torrent/torrent/foo.py workspace/torrent/torrent/bar.py workspace/torrent/torrent/... workspace/torrent/torrent/tests/__init__.py workspace/torrent/torrent/tests/test.py workspace/torrent/torrent/tests/... workspace/torrent/torrent/util/__init__.py workspace/torrent/torrent/util/helper1.py workspace/torrent/torrent/util/...
这个'torrent / torrent'位似乎是多余的,但这是这个标准惯例的副作用以及Python导入的工作方式。
这是极简主义的setup.py
(关于how to write the setup script的更多信息):
#!/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 workspace/torrent $ ./setup.py sdist
此发行版(dist/torrent-0.1.tar.gz
)可单独使用,只需解压缩并运行setup.py install
或使用easy_install
工具包中的setuptools
即可。而且你不必为每个支持的Python版本制作几个“蛋”。
如果你真的需要一个鸡蛋,你需要在setuptools
上添加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 workspace $ ./setup.py bdist_egg
...它会给我一个鸡蛋文件:dist/torrent-0.1-py2.6.egg
注意py2.6
后缀,这是因为在我的机器上我有Python 2.6。如果你想取悦很多人,你需要为每个主要的Python版本发布一个鸡蛋。你不希望成群的Python 2.5人在你家门口就有斧头和长矛,对吗?
但是你不必建立一个鸡蛋,你仍然可以使用sdist
子命令。
已更新:此处为Python文档中的another useful page,从用户的角度介绍了Distutils
。
答案 1 :(得分:3)
最好将其作为tarball(.tar.gz
)分发,而不是作为鸡蛋。鸡蛋主要用于二进制分发,例如使用编译的C扩展时。在仅源代码发行版中,它们只是不必要的复杂性。
如果您只是想将代码扔到世界各地,麻省理工学院或3条款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.
答案 2 :(得分:0)
包含来自setuptools website的ez_setup文件,并在setup.py的顶部包含:
from ez_setup import use_setuptools
use_setuptools()
此脚本是没有setuptools的人的帮手。它在没有安装setuptools的系统上下载并安装最新版本的setuptools。