如何将代码打包成 egg 格式并上传到 pypi

66 阅读4分钟

这是一位用户的问题,他写了一些代码,想将其打包成 egg 格式并上传到 pypi。他的代码目录结构如下:

src/
src/tests
src/tests/test.py # 包含用于电影名称解析的多个测试
src/torrent
src/torrent/__init__.py
src/torrent/movienameparser
src/torrent/movienameparser/__init__.py # 包含代码

他希望将此目录结构打包成 egg 格式,并包含测试文件。他想了解在 setup.py 文件中应该包含什么内容,以便能够支持任意数量的命名空间和测试。

另外,他还询问了有关代码许可证的问题。他希望使用一种许可证,允许用户对代码做任何他们想做的事情,并且没有重新分发、修改的限制。他计划更新这个 egg,但不想对任何事情负责(例如向用户提供支持)。他还询问了是否需要提供许可证副本,以及在哪里可以找到副本。

2、解决方案

代码许可证

对于代码许可证的问题,答案是提供了有关许可证的建议。建议使用 MIT 或 3-clause BSD 许可证,因为它们是两个最受欢迎的选择,并且包含免责声明。只需要在归档文件中包含主许可证即可,通常是“License.txt”或类似的文件。还可以选择在每个源文件中添加一个小版权声明,以使即使没有整个存档,每个文件的状态也是显而易见的。

以下是 BSD 许可证的示例:

版权所有 (c) <>, <版权所有者>
保留所有权利。

在满足以下条件的情况下,允许重新分发和使用源代码和二进制形式,无论是否经过修改:
* 重新分发的源代码必须保留上述版权声明、本条件列表和以下免责声明。
* 重新分发以二进制形式必须在文档和/或与分发一起提供的其他材料中复制上述版权声明、本条件列表和以下免责声明。
* 未经事先明确书面许可,不得使用<组织>的名称或其贡献者的名称来为由此软件衍生的产品背书或推广。

此软件由<版权所有者>'按原样'提供,并且对任何明示或暗示的担保,包括但不限于对适销性和适用于特定用途的担保,概不负责。在任何情况下,<版权所有者>都不对任何直接、间接、偶发、特殊、惩戒性或后果性损害(包括但不限于采购替代品或服务;使用、数据或利润损失;或业务中断)负责,无论原因如何,无论是在合同诉讼中、严格责任中,还是侵权行为(包括过失或其他)中,因使用本软件而引起的任何方式,即使已告知此类损害的可能性。

打包代码

对于如何将代码打包成 egg 格式的问题,答案提供了一个非常详细的解决方案。建议以 tarball (.tar.gz) 的格式分发代码,而不是 egg。原因是 egg 主要用于二进制分发,例如在使用编译的 C 扩展时。在仅源代码的分发中,它们只是不必要的复杂性。

如果只是想将代码发布到世界上,建议使用 MIT 或 3-clause BSD 许可证。这两个许可证都包含免责声明。只需要在归档文件中包含主许可证即可,通常是“License.txt”或类似的文件。还可以选择在每个源文件中添加一个小版权声明,以使即使没有整个存档,每个文件的状态也是显而易见的。

要将代码打包成 tarball 格式,可以按照以下步骤操作:

  1. 确保已经安装了 Distutils。这是 Python 的标准库,用于创建和安装软件包。
  2. 在代码目录中创建一个名为 setup.py 的文件。
  3. 在 setup.py 文件中添加以下内容:
from distutils.core import setup

setup(name='<包名>',
      version='<版本号>',
      description='<描述>',
      packages=['<包名>']
)
  1. 运行以下命令来创建 tarball 文件:
python setup.py sdist
  1. 在创建的 dist 目录中找到 tarball 文件,通常是“<包名>-<版本号>.tar.gz”。

这样就生成了一个包含代码的 tarball 文件,可以将其上传到 pypi 或其他代码共享平台。