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

1 投票
5 回答
809 浏览
提问于 2025-04-15 21:06

我正在写一个开源的Python应用程序。我的应用程序使用了一些开源的Python库,而这些库又依赖其他开源库。

我打算把我的代码发布到Sourceforge或Google Code上,但我需要把其他库的源代码也包含进去吗?这样做合适吗?还是说我只需要在README文件里写明这些依赖的库就可以了?

我把所有这些库放在了我的源代码目录下的一个libs子文件夹里。当我把代码提交到SVN时,是否应该使用一个叫做svn:externals的东西来链接其他源代码?

有没有办法动态更新我的库到最新版本,还是说我每次发布新版本时都得手动去做这件事?

如果我的问题听起来有点模糊,我深表歉意,因为我在这方面有点迷茫,不知道该用什么关键词去搜索。

谢谢大家。

5 个回答

1

通常情况下,你只需要在最终发布的版本中包含这些库,但不一定要在源代码的版本中包含它们。

3

正如其他人所说,不要把库文件直接包含在项目里,而是把需求写在文档中。这样一来,你的项目就可以使用用户已经安装的库,有时候这些库是他们操作系统自带的。

不过,要记住那些外部依赖可能会有不同的版本或者配置。尽量选择一个稳定的版本(而不是最新的开发版本)来使用这些库。如果你真的需要某个特定版本的库,那么把它包含在你的项目包里,可能比强迫用户在他们的系统上安装一些不标准的东西要好。

3

使用 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 会更简洁一些。

撰写回答