有关管理大型,多方位企业Python代码库的信息?

Ste*_*eve 5 python enterprise devtools maven

我用谷歌搜索和谷歌搜索,但在Python中管理大型企业代码库的讨论或最佳实践几乎没有发现任何问题.在这里,我只是征求任何和所有指向这些信息的指针.这里有一些背景知识和一些我想回答的问题.

我们是长期的Java开发人员,他们使用完善的Java最佳实践以及Maven,Ant和Sonotype Nexus repo解决了下面提到的类似问题.

我这里只谈内部软件.我们不打算分发任何基于Python的东西.我们有多个使用Python的开发组,每个开发组都使用纯Python开发可共享的实用程序代码库,最终的Web应用程序和独立的工具.每个组都有自己的Github源代码库.

我们如何在组内和组内管理可共享代码?我们是否创建了鸡蛋(或类似的东西)并将它们分发并安装到Python系统中?如果是这样,我们会将它们存储在我们的Nexus repo中,就像我们的Java jar一样,或者如果内部包分发,是否有更多特定于Python的方法?或者,我们只是共享原始代码,从多个Github存储库中检出来源吗?

如果我们共享原始代码,那么当我们将来自多个存储库的代码汇集在一起​​时,我们如何正确管理Python搜索路径?

当我们希望所有包都存在于com.ourcompany基本命名空间中时,我们如何管理包命名空间?当您将具有重叠命名空间的源代码树汇集在一起​​时,似乎python并不太高兴.

我们如何管理第三方软件包版本控制?我从未见过easy_install或pip传递了版本号.我们如何锁定第三方软件包版本?

是否存在有助于Python代码评审,CI,回归测试等的工具?

我们是Python代码的相对新手,因此其中一些问题可能有相当明显的答案.尽管如此,我发现令人惊讶的是我无法找到有关管理更大的Python代码库的更多信息.

我们会遇到什么问题,我还没有想过询问,或者还不知道甚至不知道要问什么?

任何有价值的指针将不胜感激.

dec*_*ion 0

好吧,我什至不会尝试回答所有这些(优秀的)问题,但这里有一些固执己见的建议,希望能有所帮助(作为一个在两个世界工作的人,尽管更多的是 Java)。

包装

如果是这样,我们是否会将它们存储在我们的 Nexus 存储库中,就像我们的 Java jar 一样,或者如果内部包分发,是否有更特定于 Python 的方法?或者,我们是否只是共享原始代码,检查多个 Github 存储库的源代码?

恕我直言,Python 中的打包历来有点混乱,尽管感觉它正在改进。Distutils是这里的主要/本地工具 - 我没有经常使用它,在某些地方感觉有点可怕。一般来说,还要检查推荐的工具

Pip几乎赢得了这场思想占有率之战,尤其是在安装第 3 方库时。我自己还没有解决本地库问题(也许其他人读过),但如果我解决了,我可能会选择带有本地/网络磁盘存储库的 Pip,例如通过从wheels 安装

另一种选择(这本身可能会导致各种麻烦)是在操作系统的本机打包程序中进行打包,无论是 Debian 风格的apt还是通过创建 RPM等。当然,Windows 则不然。

版本控制等

我们如何管理第三方包版本控制?我从未见过 easy_install 或 pip 传递了版本号。

Pip 绝对支持版本说明符。事实证明Easy Install 也是如此。我想很多人/较小的项目都会选择最新最好的,这当然在企业中并不总是“合适”......

虚拟环境

任何关于版本控制和 Python 的讨论都不会错过 Python2/3 参考,但我确信您已经了解了这一切。

那么更重要的是提到virtualenv。它真正将您从测试多个版本时可能陷入的混乱中解放出来,特别要记住您的 (*NIX) 操作系统通常严重依赖 Python 本身。这是一个很大的主题,所以请查看文档。

开发者工具

是否有工具可以帮助进行 Python 代码审查、CI、回归测试等?

代码审查

非常如此。大多数代码审查工具都是多语言的(这实际上只是一个格式问题),因此只需选择您最喜欢的企业友好型工具即可,无论是Crucible、Github 的工具(Barkeep?)、Gerrit或其他工具。

CI

对于 CI,你几乎又拥有同样多的选择。运行 Python 应用程序通常比 Java 应用程序涉及的更少,因此大多数 CI 系统虽然通常以 Java 为中心,但都支持 Python。(FWIW,我们使用Drone.io进行Quod Libet)。Jenkins 这样做应该没有问题,而且似乎人们已经使用 TeamCity 这样做了

然而,“最初的”或“最Pythonic的”可能是Buildbot,但我个人没有使用过它。看起来比我记忆中的要新很多,并且我认为它在 Python 社区中得到了相当多的支持......

测试

对于测试,虽然不如JUnit / TestNG那么成熟,但请查看事实上的/类似 JUnit 的单元测试unittest,但也可以查看(更好的?)替代品,例如noose.py

对于更高级别 (BDD) 测试,请尝试像Lettuce之类的东西- 正如其名称暗示深受 Cucumber 或Behave的启发。我没有尝试过它们,但普遍的看法是它们不如 Cucumber / JBehave / Concordion / Rspec 等成熟。