如何通过RPM分发Python/Django App

Nic*_*sta 7 python django esx rpm

我已经阅读了这个问题,我认为这是一个很好的开始,但我正在寻找更多的洞察力.

我使用Python 2.6和Django 1.2.1编写了一个应用程序.我想在没有安装Python 2.6或Django的系统上部署此应用程序.系统本身并没有安装很多东西 - sqlite3,pysqlite2,gcc等.但系统确实有Python 2.4.3.

什么是创建Python 2.6,Django和我的应用程序本身(一个标准的Django应用程序)的RPM最理智的方式,以便每个可以单独安装,以允许升级不同的组件?

我不太了解创建源RPM,但我怀疑这是可用的信息.如果有任何特别好的资源来创建源RPM,我也会很感激.

如果重要,系统是ESX 4 Update 1.

谢谢!

更新: 我从未想过,分发Python鸡蛋甚至使用setup.py是内容分发的可行解决方案.我也有兴趣听到这个消息.

Ign*_*ams 5

除了打包Python代码时遇到的所有常规问题之外,Django项目还有一些其他问题需要处理:

  • 与系统路径配合使用
  • 与系统设施一起玩
  • 处理翻译
  • 随机密钥

在包装Transifex时,我不得不解决这些问题,建议您调查一下为了使之正常工作而设置的各个位:

  • 在下安装 /usr/share/<projectname>
  • 用于execfile()从中加载设置/etc/<projectname>
  • 巨大的翻译处理方法
  • 替换安装后脚本中的密钥
  • 所有其他需要的血腥变化和软糖


tux*_*21b 3

Python 包通常使用setuptools/distribute进行分发。easy_install <package_name>通常,您可以使用(可选地使用特定版本号)安装每个 python 包(及其依赖项) 。我建议您使用 setuptools 作为我们的主要分发方法,因为:

  • 它适用于所有平台
  • 一般来说,Python 包的首选方式
  • .rpm 或 .deb 安装脚本也可以重用其中的一部分
  • 您可以在virtualenv中安装此软件包,无需 root 权限,与服务器上已安装的其余 Web 应用程序无冲突

值得您阅读的一个很好的资源是Deploying with Distribute。它专注于 Flask(另一个 Web 框架),但只需将“Flask”替换为“Django”即可解决问题:)

另一个非常适合分发和部署东西的Python工具是fabric,除了分发之外你还可以使用它(或者不使用它,只要你愿意)。例如,使用 Fabric,您可以同时在 N 个服务器上引导和安装应用程序(包含依赖项),管理多个开发、测试和生产服务器,并使用单个命令同时更新它们。

本文可能会帮助您开始使用 Fabric:使用 Fabric 进行部署

此外,我还建议您在githubbitbucket上发布您的存储库(或镜像现有的存储库),以便那些想要手动获取最新源并python setup.py install随后安装应用程序的人。setup.py 安装脚本是我之前提到的分发的一部分。