在项目中包含库。最佳实践

时间:2010-03-31 18:18:14

标签: python distribution

我正在编写一个Python开源应用程序。我的应用程序使用一些开源Python库。这些库反过来使用其他开源库。

我打算在Sourceforge或Google Code上发布我的代码,但是我是否需要包含其他库的来源?这是一个好习惯吗? ...或者我应该简单地将此信息写入README文件中,以告知其他所需库的使用。

我已将所有这些库放入源目录中的libs子文件夹中。当我将代码检入SVN时,我应该使用一个名为svn:externals的东西链接到其他来源吗?

有没有办法动态地将我的库更新到最新版本,或者这是我在发布新版本时必须手动完成的事情。

如果我的问题听起来含糊不清,我最诚挚的道歉,但我在这件事上很遗憾,我不知道谷歌会做些什么。

谢谢大家。

5 个答案:

答案 0 :(得分:3)

使用pip requirements文本文件。

只需命名包[和可选版本]

要求用户在README中执行以下命令。 (如果您提供安装脚本,那么您应该在其中调用;在这种情况下,您还应该使用Virtualenv

pip install -r requirements.txt

并且您在要求中包含的所有库都将安装在该环境中。

您还可以在点数要求中包含svn path,git path,mercurial path或bzr path。

请参阅文档:http://pip.openplans.org/requirement-format.html

如果所有库都可以从svn获得,并且所有包用户都从svn安装它,你也可以使用svn externals;但是pip更清洁了。

答案 1 :(得分:3)

正如其他人所说,不要包含库,在文档中说明要求。这样,您的项目就可以使用用户已有的库,有时由其操作系统分发提供。

但是,请记住那些可能存在于不同版本甚至配置中的外部依赖项。尽可能选择库的稳定分支(不是前沿开发快照)。当您真正需要库的特定快照时,将其包含在您的包中可能是更好的选择,然后强制用户在其系统中安装非标准的东西。

答案 2 :(得分:1)

通常,您只需将库包含在最终发布的版本中,但不一定将它们包含在源版本中。

答案 3 :(得分:1)

我认为最常见的做法是告知您的用户您的代码使用哪些库和版本号,例如README.txt文件。您可以为代码创建一个Python Egg包,其中包含库依赖项(如果它们也有鸡蛋),可以在安装时使用您的包下载。使用setuptools包创建python eggs。

答案 4 :(得分:1)

一般情况下(对于Python):不要在代码中提供您依赖的其他库的源代码。

只需在网站上和源附带的说明中说明所需的依赖关系(包括最低要求的版本,安装说明等)。