Python发行版有哪些用例?

sca*_*nny 5 python distutils pip setuptools distribute

我正在为我编写的Python包开发发行版,因此可以将其发布在PyPI上。这是我第一次使用distutils,setuptools,distribute,pip,setup.py等,我的学习曲线比我预期的陡峭得多:)

通过data_files在setup.py 的参数中指定我的一些测试数据文件来将它们包含在tarball中,我遇到了一些麻烦,直到我遇到了另一篇文章指出我指向该MANIFEST.in文件。就在那时,我突然想到,您在tarball / zip中包含的内容(使用MANIFEST.in)以及用户进行easy_install或在用户的Python环境中安装的内容(基于您在中指定的内容setup.py)是两件非常不同的东西; 通常,压缩包中的数量远远超过实际安装的数量。

这立即触发了我的代码气味,并意识到发行版必须有多个用例。我被固定在我真正参与过的唯一一个项目上,使用easy_install或pip安装库。然后,我意识到我正在开发工作产品,而我对该开发的最终用户只有部分了解。

所以我的问题是:“除了将Python发行版安装在自己的Python环境中之外,Python发行版还有哪些用例?该发行版我还为谁服务?他们最关心的是什么?”

以下是我尚未弄清楚的一些工作问题,这些问题会影响答案:

  • 在源代码分发中包含源代码控制(git)下的所有内容是否明智?在github时代,有人下载源代码发行版来访问完整的项目源代码吗?还是我应该发布指向我的github存储库的链接?不会将所有内容都夸大发行版,并且使只想安装它的人花更长的时间下载吗?

  • 我将把文档托管在readthedocs.org上。在源代码发行版中包含文档的HTML版本对我来说有意义吗?

  • 有人用来python setup.py test在源分发版上运行测试吗?如果是这样,他们将扮演什么角色,他们处于什么情况?我不知道我是否应该为进行这项工作而烦恼,如果这样做,谁应该为之工作。

Jam*_*dge 4

您可能希望包含在源代码发行版中但可能不安装的一些内容包括:

  • 包的许可证
  • 测试套件
  • 文档(除了源代码之外,还可能是经过处理的表单,例如 HTML)
  • 可能用于构建源代码分发的任何其他脚本

通常,这将是您在版本控制中管理的大部分或全部内容,也可能是一些生成的文件。

当这些文件在线可用或通过版本控制提供时,您要执行此操作的主要原因是让人们知道他们拥有与他们正在运行的代码相匹配的文档或测试版本。

如果您仅在线托管最新版本的文档,那么它们对于因某种原因必须使用旧版本的人来说可能没有用。并且版本控制中提示上的测试套件可能与源代码分发中的代码版本不兼容(例如,如果它测试此后添加的功能)。为了获得正确版本的文档或测试,他们需要梳理版本控制,寻找与源代码分发相对应的标签(假设开发人员费心标记树)。在源代码分发中提供可用文件可以避免此问题。

至于想要运行测试套件的人,我将许多 Python 模块打包在各种 Linux 发行版中,并且偶尔会收到与他们的环境中的测试失败相关的错误报告。当我遇到错误并想检查外部代码在我的环境中是否按照作者的预期运行时,我也使用了其他人模块的测试套件。