Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
发布python包-是否应该包含文档和测试?_Python_Packaging - Fatal编程技术网

发布python包-是否应该包含文档和测试?

发布python包-是否应该包含文档和测试?,python,packaging,Python,Packaging,所以,我在pypi上发布了一个小库,更多的是作为一个练习(看看它是如何完成的),而不是其他任何东西 我已经在readthedocs上上传了文档,我的git repo中有一个测试套件 由于我认为任何对运行测试感兴趣的人都可能只克隆repo,并且文档已经在线可用,所以我决定不在发布的包中包含文档和测试目录,我只是想知道这样做是否“正确” 我知道这个问题的答案是相当主观的,但我觉得这是一个很好的提问的地方,以便了解社区认为什么是最佳实践。这不是必需的,但建议在包中包括文档以及单元测试 关于文档: 老式

所以,我在pypi上发布了一个小库,更多的是作为一个练习(看看它是如何完成的),而不是其他任何东西

我已经在readthedocs上上传了文档,我的git repo中有一个测试套件

由于我认为任何对运行测试感兴趣的人都可能只克隆repo,并且文档已经在线可用,所以我决定不在发布的包中包含文档和测试目录,我只是想知道这样做是否“正确”


我知道这个问题的答案是相当主观的,但我觉得这是一个很好的提问的地方,以便了解社区认为什么是最佳实践。

这不是必需的,但建议在包中包括文档以及单元测试

关于文档:

老式或更好的说法是,开放源码软件的旧式源代码版本包含文档,这是一个(事实上?)标准(例如,看看GNU软件)。文档是代码的一部分,应该是版本的一部分,因为一旦下载了源代码版本,您就独立了。您是否曾经在某个地方坐过火车,需要快速查看模块X的文档,但无法访问互联网?然后你轻松地意识到这些文档已经在本地存在了

这方面的另一个重要点是,与代码捆绑在一起的文档肯定适用于代码版本。代码和文档是同步的

关于Python还有一件事:您可以使用Sphinx编写文档,然后在安装包的过程中基于文档源构建漂亮的HTML输出。我见过各种各样的Python软件包正是这样做的

关于测试:


假设测试捆绑在源代码版本中,并且用户可以轻松运行(您应该记录如何执行此操作)。然后,如果用户发现您的代码有一个不太容易跟踪的问题,他可以在他的环境中运行单元测试,看看是否至少通过了这些测试。如果没有,那么在指定代码的行为时,您可能做出了错误的假设,了解这一点很好。我想说的是:如果您让用户执行单元测试变得非常简单,这对您作为一名开发人员来说是非常好的。

我找不到任何PEP或Setuptools文档中真正提到测试和文档的部分,但是我看到的一般模式是打包测试而不打包文档。我有点期待相反的结果-虽然我可以看到包含文档的价值,因为它可以离线查阅,但在我看来,大多数普通用户(即,只安装lib并使用它的人,假设它正常工作,而不是有兴趣破解你的东西的人)可能永远不会运行包含的测试,因此,捆绑它们对我来说似乎是一种(可以忽略,但仍然是)浪费。无论如何,感谢您的回答:)这些包的文档是从源代码生成的,所以您只需执行
help(function)
,相同的文档是从方法或模块的docstring中提取的。我已经使用sphinx作为文档并将其托管在readthedocs上,这就是为什么我认为我可以跳过那个。但是你的观点很有道理,我想我已经习惯了谷歌的存在。我当然也同意将其与代码一起进行版本化,尽管我在保持更新方面做得不太好。。。见鬼,谢谢你的意见,我想从现在开始我会把这两个都包括进去;)