3

组织和开发由许多共享一个(或多个)较大 Python 库的小脚本组成的项目的最佳方法是什么?

我们的存储库中有一堆程序,它们都使用存储在同一个存储库中的相同库。所以换句话说,布局像

trunk
    libs
        python
        utilities
    projects
        projA
        projB

当我们的程序正式运行完成后,我们要记录使用的代码版本。对于我们的 C++ 可执行文件,事情很简单,因为只要工作副本在编译时是干净的,一切都很好。(而且由于我们以编程方式获取版本号,因此它必须是工作副本,而不是导出。)对于 Python 脚本,事情要复杂得多。

问题是,通常会运行一个项目(例如 projA),而 projB 需要更新。这可能会导致工作副本修订在运行时与 projA 混合出现。(代码需要数小时才能运行,并且可以用作需要数天才能运行的流程的输入,因此具有强大的可追溯性目标。)

我目前的解决方法是,如有必要,将主干的另一个副本检查到不同的位置,然后从那里跑掉。但是我需要记住将我的 PYTHONPATH 更改为指向 lib/python 的第二个版本,而不是第一个树中的那个。

不可能有一个完美的答案。但必须有更好的方法。

我们是否应该使用颠覆关键字来存储修订号,从而允许数据用户导出文件?我们应该使用 virtualenv 吗?我们是否应该更倾向于打包和安装机制?Setuptools 是标准,但我读过关于它的混合内容,它似乎是为非开发人员最终用户设计的(我们没有)。

4

2 回答 2

2

更好的解决方案是不要将所有项目及其共享依赖项存储在同一个存储库中。

每个项目使用一个存储库,共享库使用外部存储库。

在共享库存储库中使用标签,因此消费者项目可以在其外部使用他们需要的版本。

编辑:(只是从我的评论中复制)如果您需要为同一服务器上的不同应用程序提供隔离的运行时环境,请使用virtualenv 。然后每个环境都可以包含它需要的库的唯一版本。

于 2009-11-07T01:04:00.103 回答
1

如果我正确理解了您的问题,那么您肯定想要 virtualenv。添加一些 virtualenvwrapper 的优点,让它变得更好。

于 2009-11-07T01:25:17.050 回答