如何通过RPM分发Python / Django App

我已经阅读了这个问题,我认为这是一个很好的开始,但我正在寻找更多的洞察力。 我使用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 egg甚至使用setup.py是内容分发的可行解决方案。我也有兴趣听到这个消息。     
已邀请:
Python包通常与setuptools / distribute一起分发。通常,您可以使用
easy_install <package_name>
(可选地使用特定版本号)安装每个python包(以及它的依赖项)。我建议你使用setuptools作为我们的主要分发方法,因为: 它适用于所有平台 一般来说,它是Python包的首选方式 .rpm或.deb安装脚本也可以重用它的一部分 您可以在virtualenv中安装此软件包,而无需root权限,服务器上已安装的其他Web应用程序无冲突 您可以阅读的一个很好的资源是Deploying with Distribute。它专注于Flask(另一个Web框架),但只需将“Flask”替换为“Django”就可以了 另一个非常适合分发和部署东西的python工具是fabric,你可以使用它除了分发(或者没有它,你想要的)。使用结构,您可以立即在N个服务器上引导和安装应用程序(包含依赖项),管理多个开发,测试和生产服务器,并使用单个命令同时更新它们。 本文可能会帮助您开始使用Fabric:使用Fabric进行部署 此外,我还建议您在github或bitbucket上发布您的存储库(或镜像现有的存储库),以便那些想要手动获取最新资源并随后使用
python setup.py install
安装应用程序的人员。 setup.py安装脚本是我之前提到的分发的一部分。     
除了打包Python代码时遇到的所有常见问题,Django项目还有一些其他问题需要处理: 与系统路径玩得很好 与系统设施配合使用 处理翻译 随机化密钥 我不得不解决包装Transifex的这些问题,我建议你研究一下为使其工作而设置的各种问题: 在
/usr/share/<projectname>
下安装 使用
execfile()
/etc/<projectname>
加载设置 巨大的翻译处理周期 替换安装后脚本中的密钥 所有其他所需的血腥变化和软糖     
请参阅Python文档的第5章。它将展示如何处理bdist Python实用程序。有了它,您将能够生成几种类型的包(或者,如何说,“构建分发”),包括RPM。     
已有RPM的python 2.6和django可用 - 所以至少(相对)容易通过RPM获取和安装。为项目创建RPM,有一些使用Distutils的详细信息,详细说明了您在spec文件中需要的内容以及为实现这一目标而调用的内容。 还有一个关于在StackOverflow上创建RPM的注释,在创建Python RPM时也有一些细节。 根据经验,将python本身打包为RPM是最狡猾的小动物,因此利用已有的东西我肯定会推荐。对于我已经看过这个的一些程序,我们有一个Makefile(是的,旧学校)在一个持续集成服务器上运行setup.py bdist_rpm命令,使RPM可用作该构建的结果并立即在CI服务器。     
我写了一篇关于如何使用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
你可以通过在setup调用中给出这个选项,告诉setuptools在创建rpm之前将它添加到spec文件中:
options = {'bdist_rpm':{'post_install' : 'bdist_rpm_post_install.sh'}},
请参阅上面的链接,查看完整的setup.py脚本,安装后挂钩以及与ѭ7一起使用的测试套件,它将在本地安装所有依赖项,并运行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
    

要回复问题请先登录注册