Pylons应用程序部署与私人开发的依赖项

时间:2010-10-23 16:40:38

标签: python deployment setuptools distutils

在我的组织中,我们有几个内部开发的Python包。例如,我们称之为 Foo Bar 。两者都是在单独的Git存储库中开发的。 Foo 是一个Pylons应用程序,它使用 Bar 中的某些库函数。两者都没有公开发布。

当我们部署 Foo 时,我们通常会从源代码管理中导出最新版本,并在virtualenv中运行setup.py develop。这没关系。

问题是我们需要某种方式为我们部署 Foo 的每个环境分发 Bar 。我们显然不能在setup.py的install_requires中放置'Bar'(因为easy_install无法在任何网站上找到它)。我找不到任何方法来自动获取/安装私人开发的依赖项。

管理这个更容易吗?我觉得我错过了Python打包和分发的重点。

3 个答案:

答案 0 :(得分:2)

您可以创建包存储库。步骤基本上是:

  1. 使用 setup.py bdist_egg
  2. 创建一个鸡蛋
  3. 将创建的鸡蛋从 dist 复制到Apache提供的目录
  4. 使用 -f 开关
  5. 将网址添加到Apache公开的目录中 easy_install 命令

    请注意,Apache不一定是必需的,但它会自动生成easy_install可以处理的目录列表。

    如果你正在使用buildout,有一些配置选项可以和-f做同样的事情,我很确定你也可以在pip中使用它。

答案 1 :(得分:1)

使用setuptools时,在setup.py中,您可以指定easy_install应查找包的HTTP,FTP和SVN位置:

http://peak.telecommunity.com/DevCenter/setuptools#dependencies-that-aren-t-in-pypi

您可以在某个“秘密”位置发布Bar,或者,我没有尝试过,但也许HTTP基本身份验证工作:

setup(
    ...
    dependency_links = [
        "http://user:pass@example.com/private-repository/"
    ],
)

答案 2 :(得分:0)

在我的工作中,我们使用setuptools来创建特定于操作系统的包。我们碰巧使用RedHat,因此我们调用bdist_rpm来创建rpm包。我们发现它比egg更好,因为我们可以在python和非python库的包中进行依赖管理。

我们在持续集成机器上创建rpms并将它们移动到YUM repo,可以通过YUM更新或升级将它们推出。