我想要一些关于把这个打包成一个鸡蛋并上传到pypi的建议

2024-05-16 23:05:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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。我可以使用什么许可证来允许用户对代码做他们想做的事情,而不受重新分发、修改的限制?在

即使我计划更新这个鸡蛋,我也不想为任何事情负责(比如为用户提供支持)。我知道这听起来可能很自私,但这是我的第一个开源代码,所以请容忍我。我需要提供许可证的副本吗?我在哪能找到一本?在

谢谢你阅读这些。在


Tags: 文件the代码pysrc目录数量源代码
3条回答

包含来自setuptools website的ez\u安装文件,并将其包含在设置.py公司名称:

from ez_setup import use_setuptools
use_setuptools()

这个脚本是一个帮助谁没有设置工具。它下载并在未安装setuptools的系统上安装最新版本的setuptools。在

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

如果你只是想把你的代码扔到世界各地,麻省理工学院或3条款的BSD许可证是最受欢迎的选择。两者都包括免责声明。您只需在tarball中包含主许可证;通常为“最终用户许可协议或类似的。或者,您可以向每个源文件添加一个小的版权通知;我鼓励这样做,因此即使没有整个归档文件,每个文件的状态也很明显,但是有些人认为这太冗长了。这是个人喜好的问题。在

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.

我在这里不讨论许可证问题,但通常在包源代码的根目录中包括许可证文件,以及其他常见的东西,如自述文件等

我通常按照在目标系统上安装的方式来组织软件包。对标准包布局约定进行了解释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)的信息:

^{pr2}$

要获得源发行版,我会执行以下操作:

$ cd workspace/torrent
$ ./setup.py sdist

这个发行版(dist/torrent-0.1.tar.gz)可以单独使用,只需将其解包并运行setup.py install,或者使用setuptools工具箱中的easy_install。而且您不必为每个受支持的Python版本生成几个“鸡蛋”。在

如果您真的需要一个egg,您将需要在您的setuptools上添加一个依赖项,这将引入一个额外的子命令bdist_egg来生成鸡蛋。在

但是setuptools的另一个优点是除了它产生卵子的特性之外,它不需要用一个很好的辅助函数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

。。。它会给我一个egg文件:dist/torrent-0.1-py2.6.egg

注意py2.6后缀,这是因为我的机器上有python2.6。如果你想取悦很多人,你需要为每个主要的Python版本发布一个egg。你不想让一大群拿着斧头和矛的Python2.5人出现在你家门口,是吗?在

但您不必构建egg,仍然可以使用sdist子命令。在

更新:下面是Python文档中的another useful page,从用户的角度介绍了Distutils。在

相关问题 更多 >