在我们公司,我们有一个非常好的系统设置,用于跟踪我们当前桌面应用程序开发 (C++/python) 的修订控制中的外部包依赖关系。我们开始开发一些仅 Python 的 Web 应用程序正在寻找最佳实践的建议,当只涉及 Python 代码并且它来自 easy_install'able 包时。
对于我们的桌面应用程序,我们有这样的东西:
app_svn_root
- trunk
- src
- doc
- deps -> [svn:external to deps repos with rev num set]
deps_svn_root
- trunk
- setup_env.sh/bat [generated automatically
- dep_project_1 [example: boost, libxml, python, etc]
- vendor_base [svn:external to vendor branch or project repository]
- install_linux_gcc43
- bin
- include
- lib
- install_linux_win32_vc90
- ... [whatever directory structure the project build creates]
当团队中的任何开发人员检查应用程序的代码时,他们会自动获取所有依赖项,并使用该代码修订版的正确版本来获取它们。[注意:我省略了几个内部管理脚本等,但这是大体思路]。这对我们很有用。开发人员无需再担心使用正确版本的每个包设置他们的个人计算机,它允许一次签出多个开发副本(例如:版本 1.0、1.1、2.0 等),它允许持续集成系统来打包依赖项并使用正确版本的 deps 运行单元测试。
现在我们开始在一些基于谷歌应用引擎的 python 项目上工作,我们想要类似上面的东西。我们希望保持让开发人员一次检查他们需要的所有内容的能力,并保证每个人都使用相同的依赖项。我们可以继续使用这种精确的结构,但对于纯 python 项目来说它似乎很重。
最初我在想这样的事情:
- trunk
- gae_apps
- gae_sdk [svn:external to the latest stable GAE code]
- deps
- nose
- nosegae
- pylint
- app1
- templates
- tests
- deps
- webapp2
- console
我遇到的问题是我想要使用的所有 python 项目(nose、nosegae 等)都建议使用easy_install
来下载和安装它们。不过,这会将它们安装到主系统目录中。我真正想要的是将代码安装到每个包的特定目录中。(注意:我打算在 main.py 中放置一些代码,以便将 deps 中的所有包正确添加到 sys.path 中)。有没有办法做到这一点?这甚至是个好主意吗?
跟踪纯 Python 应用程序中的依赖项以支持大型团队开发的最佳实践是什么?