编程语言
首页 > 编程语言> > 使用共享软件包组织Python项目

使用共享软件包组织Python项目

作者:互联网

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

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

trunk
    libs
        python
        utilities
    projects
        projA
        projB

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

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

我当前的解决方法是,如有必要,将中继的另一个副本签出到其他位置,然后在该位置运行.但是然后我需要记住将PYTHONPATH更改为指向lib / python的第二个版本,而不是第一棵树中的版本.

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

我们是否应该使用subversion关键字来存储修订号,从而允许数据用户导出文件?我们应该使用virtualenv吗?我们是否应该更趋向于包装和安装机制? Setuptools是标准配置,但我读过一些杂七杂八的东西,它似乎是为非开发人员最终用户设计的(我们没有).

解决方法:

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

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

利用共享库存储库中的标记,以便消费者项目可以在外部使用它们所需的确切版本.

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

标签:svn,code-organization,version-control,python
来源: https://codeday.me/bug/20191210/2101603.html