如何通过RPM分发Python/Django应用

7 投票
5 回答
7565 浏览
提问于 2025-04-16 01:09

我看过这个问题,觉得这是个不错的开始,但我想要更多的见解。

我用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 eggs或者使用setup.py也是一种可行的内容分发方案。我也很想听听这方面的内容。

5 个回答

3

可以参考Python文档的第5章。这部分内容会教你如何使用bdist这个Python工具。通过这个工具,你可以生成多种类型的包(或者说是“构建的分发版”),包括RPM格式的包。

5

在打包Python代码时,除了遇到一些正常的问题,Django项目还有一些额外的问题需要处理:

  • 与系统路径的兼容性
  • 与系统功能的兼容性
  • 处理翻译问题
  • 随机生成密钥

我在为Transifex打包时遇到了这些问题,建议你了解一下为了解决这些问题而采取的各种措施:

  • 安装在 /usr/share/<项目名称> 目录下
  • 使用 execfile()/etc/<项目名称> 加载设置
  • 处理翻译时的复杂流程
  • 在安装后脚本中替换密钥
  • 所有其他繁琐的修改和调整
3

Python的包通常是通过setuptools/distribute来分发的。一般来说,你可以用easy_install <package_name>来安装任何Python包(包括它的依赖包),你也可以选择安装特定版本。我建议你使用setuptools作为主要的分发方式,原因有以下几点:

  • 它在所有平台上都能使用
  • 这是Python包的推荐安装方式
  • .rpm或.deb安装脚本也可以重用它的一部分
  • 你可以在virtualenv中安装这些包,而不需要管理员权限,这样就不会和服务器上其他已安装的网络应用产生冲突

你可以阅读使用Distribute进行部署这篇文章。虽然它主要讲的是Flask(另一个网络框架),但只要把“Flask”换成“Django”就可以了 :)

另一个很适合分发和部署的Python工具是fabric,你可以把它和distribute一起使用(或者单独使用,随你喜欢)。使用fabric,你可以一次性在多个服务器上启动并安装你的应用(包括依赖包),管理多个开发、测试和生产服务器,并且可以用一个命令同时更新它们。

这篇文章可能会帮助你入门Fabric:使用Fabric进行部署

另外,我还建议你把你的代码库发布到githubbitbucket上,供那些想手动获取最新源代码的人使用,然后可以用python setup.py install来安装你的应用。setup.py安装脚本是我之前提到的distribute的一部分。

撰写回答