2010-07-12 34 views
7

我已阅读this question,我认为这是一个很好的开始,但我在寻找更多的见解。如何通过RPM分发Python/Django应用程序

我已经使用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是内容分发的可行解决方案。我也会对此感兴趣。

回答

3

Python包通常分配为setuptools/distribute。一般来说,你可以用easy_install <package_name>(可选择使用特定版本号)安装每个python软件包(以及它的依赖关系)。我会建议你使用setuptools的作为我们的首要分配方法,这是因为:

  • 它适用于所有平台
  • 是一般
  • 的.rpm Python包的首选方式或.deb文件安装脚本可以重用它的部分太
  • 你可以安装一个virtualenv这里面的包,而不需要root权限,安装的web应用程序的服务器上,其余的无冲突

一个很好的资源供你阅读是Deploying with Distribute。它专注于Flask(另一个Web框架),但简单地用“Django”替换“Flask”将会实现这个诀窍:)

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

这篇文章可以帮助您开始使用面料:Deploying with Fabric

,另外我还建议你发布你的资料库谁想要获得最新的人github(或镜像现有一个)或bitbucket之后通过手动方式来源并安装python setup.py install。 setup.py安装脚本是我之前提到的分发的一部分。

+0

它将如何运行我的manage.py runserver?我应该在哪里指定它? – 2016-08-01 12:52:09

2

已经有RPM的python 2.6django可用 - 所以这些至少是(相对)容易抓住并通过RPM安装。如果要为您的项目创建一个RPM,可以使用Distutils来详细说明一些详细信息,这些详细信息包括您在spec文件中需要的内容以及您为实现它而调用的内容。

还有一个关于在Python的StackOverflow上创建RPM的注释,Creating Python RPM也有一些细节。

根据经验,将python本身打包成RPM是最棘手的小怪物,所以充分利用已有的东西是我一定会推荐的。对于我已经看到完成的一些程序,我们有一个Makefile(是的,老派)在一个持续集成服务器上运行setup.py bdist_rpm命令,使得该RPM可以作为该构建的结果,并立即在CI服务器。

+0

的问题是如何创建一个Django应用程序的RPM你发展自己,而不是有关创建RPM django – 2014-12-12 15:42:30

4

对的时候遇到包装Python代码,Django的项目有需要处理的几个其他问题全部正常问题顶部:

  • 踢得好看与系统路径
  • 踢得好看带系统设施
  • 处理翻译
  • 随机化密钥

我必须解决这些问题的用于包装Transifex,我建议您调查已落实到位,以便在不同的位,使其工作:

  • /usr/share/<projectname>
  • 使用execfile()安装加载从/etc/<projectname>
  • 巨大的翻译处理操作现场设置
  • 在密钥更换安装后脚本
  • 需要的所有其他血腥变化和诡计
+0

我不会在系统路径下安装Web应用程序,因为您可能会遇到一次运行的不同版本或相互冲突的依赖项的麻烦。此外,应该在配置期间对安全密钥进行随机化,而不是安装(对集群中运行的几台服务器进行映像...)。 – tux21b 2010-07-19 19:50:44

+0

如果你有一个集群,那么你会使用一个工具,比如木偶来部署,所以无论如何他们最终都会得到相同的密钥。在系统路径下是很好的,因为你需要竭尽全力安装一个以上的软件包版本。 – 2010-07-19 20:37:34

3

参照chapter 5 of the Python documentation。它将演示如何处理Python实用程序bdist。有了它,您将能够生成包括RPM在内的多种类型的软件包(或者它的说法,“构建分发”)。

2

I've written up a blog post on how to use setuptools and it's 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之前:

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

参见上面的链接,一个完整的工作setup.py脚本,安装后的挂钩,以及与工作的测试套件将在本地安装所有依赖关系,并运行django测试。

要让转速也会自动安装它的依赖,创造一个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 
+0

博客文章的链接已死亡。 – kkurian 2017-10-11 20:33:20