在项目中包含库的最佳实践
我正在写一个开源的Python应用程序。我的应用程序使用了一些开源的Python库,而这些库又依赖其他开源库。
我打算把我的代码发布到Sourceforge或Google Code上,但我需要把其他库的源代码也包含进去吗?这样做合适吗?还是说我只需要在README文件里写明这些依赖的库就可以了?
我把所有这些库放在了我的源代码目录下的一个libs子文件夹里。当我把代码提交到SVN时,是否应该使用一个叫做svn:externals的东西来链接其他源代码?
有没有办法动态更新我的库到最新版本,还是说我每次发布新版本时都得手动去做这件事?
如果我的问题听起来有点模糊,我深表歉意,因为我在这方面有点迷茫,不知道该用什么关键词去搜索。
谢谢大家。
5 个回答
通常情况下,你只需要在最终发布的版本中包含这些库,但不一定要在源代码的版本中包含它们。
正如其他人所说,不要把库文件直接包含在项目里,而是把需求写在文档中。这样一来,你的项目就可以使用用户已经安装的库,有时候这些库是他们操作系统自带的。
不过,要记住那些外部依赖可能会有不同的版本或者配置。尽量选择一个稳定的版本(而不是最新的开发版本)来使用这些库。如果你真的需要某个特定版本的库,那么把它包含在你的项目包里,可能比强迫用户在他们的系统上安装一些不标准的东西要好。
使用 pip 的需求文本文件。
只需要列出你需要的包名(可以选择性地加上版本号)。
在 README 文件里告诉用户执行以下命令。(如果你提供了安装脚本,那么应该在脚本里调用这个命令;在这种情况下,你还应该使用 Virtualenv。)
pip install -r requirements.txt
这样,你在需求文件里列出的所有库都会在那个环境中被安装。
你还可以在 pip 的需求文件里包含 svn 路径、git 路径、mercurial 路径或者 bzr 路径。
可以参考文档: http://pip.openplans.org/requirement-format.html
如果你所有的库都可以从 svn 获取,并且所有的用户都是从 svn 安装的,你也可以使用 svn externals;不过使用 pip 会更简洁一些。