gpt4 book ai didi

python - 使用共享包组织 Python 项目

转载 作者:行者123 更新时间:2023-11-28 16:54:49 25 4
gpt4 key购买 nike

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

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

trunk
libs
python
utilities
projects
projA
projB

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

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

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

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

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

最佳答案

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

为每个项目使用一个存储库,并且 externals对于共享库。

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

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

关于python - 使用共享包组织 Python 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1691495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com