使用共享包组织Python项目

时间:2009-11-07 00:52:45

标签: python svn version-control code-organization

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

我们的存储库中有许多程序都使用存储在同一存储库中的相同库。换句话说,像

这样的布局
trunk
    libs
        python
        utilities
    projects
        projA
        projB

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

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

我目前的解决方法是,如有必要,请查看另一个主干副本到另一个位置,并在那里运行。但后来我需要记住改变我的PYTHONPATH指向第二个版本的lib / python,而不是第一个树中的那个版本。

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

我们是否应该使用subversion关键字来存储修订号,这将允许数据用户导出文件?我们应该使用virtualenv吗?我们是否应该更多地采用包装和安装机制? Setuptools是标准,但我已经阅读了有关它的混合内容,它似乎是为非开发人员最终用户设计的(我们没有)。

2 个答案:

答案 0 :(得分:2)

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

为每个项目使用一个存储库,为共享库使用externals

利用共享库存储库中的标记,因此消费者项目可能会完全使用其外部所需的版本。

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

答案 1 :(得分:1)

如果我正确理解你的问题,那么你肯定想要virtualenv。添加一些virtualenvwrapper的好处,使它更好。