7

我已经阅读了这个问题,我认为这是一个很好的开始,但我正在寻找更多的见解。

我使用 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 是一种可行的内容分发解决方案。我也有兴趣听听。

4

5 回答 5

5

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

  • 使用系统路径玩得很好
  • 玩得好系统设施
  • 处理翻译
  • 随机化密钥

我必须解决打包Transifex的这些问题,我建议您调查已放置的各种位以使其工作:

  • 安装在/usr/share/<projectname>
  • 用于execfile()/etc/<projectname>
  • 巨大的翻译处理问题
  • 在安装后脚本中替换密钥
  • 所有其他需要的血腥变化和软糖
于 2010-07-14T05:15:22.597 回答
3

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

您可以阅读的一个很好的资源是Deploying with Distribute。它专注于 Flask(另一个 Web 框架),但只需将“Flask”替换为“Django”就可以了:)

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

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

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

于 2010-07-19T19:20:07.560 回答
3

请参阅Python 文档的第 5 章。它将展示如何处理bdist Python 实用程序。有了它,您将能够生成包括 RPM 在内的多种类型的包(或者,它所说的“内置发行版”)。

于 2012-05-07T17:13:54.047 回答
2

已经有python 2.6django的 RPM可用 - 所以这些至少(相对)容易通过 RPM 获取和安装。为了为您的项目创建 RPM,有一篇关于使用Distutils的一些细节的文章,其中详细介绍了您在规范文件中需要什么以及您调用什么来实现它。

在创建 Python RPM的 StackOverflow 上还有一个关于从 python 创建 RPM 的说明,其中也有一些细节。

根据经验,将 python 本身打包为 RPM 是最棘手的小动物,因此我绝对推荐利用已有的东西。对于我见过的一些程序,我们有一个 Makefile(是的,老派)在持续集成服务器上运行 setup.py bdist_rpm 命令,使 RPM 作为构建的结果可用,并立即在CI服务器。

于 2010-07-14T04:57:00.940 回答
2

我写了一篇关于如何使用 setuptools 的博客文章,它是 bdist_rpm命令为您创建 rpm。因此,确实,使用 setuptools,但实际上,将您的应用程序作为 rpm 分发。在 setuptools 中记录的内容下有一些问题和奇怪的东西,您可以使用它们最终获得一个不错的工作流程。

关键是您需要一个安装后脚本来运行您的迁移并收集您的静态文件,该脚本在安装 rpm 后运行

export DJANGO_SETTINGS_MODULE=accountpage.settings
mkdir -p /var/www/django/static && chown apache:apache /var/www/django/static
runuser -m apache -c 'echo "yes" | django-admin collectstatic'
django-admin migrate
service httpd restart

您可以告诉 setuptools 在创建 rpm 之前将其添加到规范文件中,方法是在 setup 调用中提供此选项:

options = {'bdist_rpm':{'post_install' : 'bdist_rpm_post_install.sh'}},

请参阅上面的链接以获取完整的 setup.py 脚本、安装后挂钩和一个可以python setup.py test在本地安装所有依赖项并运行 django 测试的测试套件。

要让 rpm 也自动安装它的依赖项,请创建一个setup.cfg文件来告诉 bdist_rpm 它的依赖项

[bdist_rpm]
requires = python >= 2.7
           django >= 1.8
           httpd
           Django-Select2 >= 4.3.1
           django-easy-select2
           django-model-utils
           pytz
           django-oauth-toolkit
于 2016-05-18T11:56:42.223 回答