我已经阅读了this question,我认为这是一个很好的开始,但我正在寻找更多的洞察力。
我使用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是内容分发的可行解决方案。我也有兴趣听到这个。
答案 0 :(得分:5)
除了在打包Python代码时遇到的所有正常问题之外,Django项目还有一些需要处理的其他问题:
我必须解决这些问题才能打包Transifex,我建议您调查已经落实的各个部分以使其正常工作:
/usr/share/<projectname>
execfile()
加载/etc/<projectname>
答案 1 :(得分:3)
Python包通常与setuptools/distribute一起分发。通常,您可以使用easy_install <package_name>
(可选地使用特定版本号)安装每个python包(以及它的依赖项)。我建议你使用setuptools作为我们的主要分发方法,因为:
您需要阅读的资源是Deploying with Distribute。它侧重于Flask(另一个Web框架),但只需将“Flask”替换为“Django”就可以了:)
另一个非常适合分发和部署内容的python工具是fabric,除了分发之外你可以使用它(或者没有它,无论你想要什么)。使用结构,您可以立即在N个服务器上引导和安装应用程序(包含依赖项),管理多个开发,测试和生产服务器,并使用单个命令同时更新它们。
本文可能会帮助您开始使用Fabric:Deploying with Fabric
此外,我还建议您在github或bitbucket上发布您的存储库(或镜像现有存储库),以便那些想要手动获取最新资源并使用{{安装您的应用程序的人1}}之后。 setup.py安装脚本是我之前提到的分发的一部分。
答案 2 :(得分:3)
请参阅chapter 5 of the Python documentation。它将展示如何处理 bdist Python实用程序。有了它,您将能够生成几种类型的包(或者,如何说,“构建分发”),包括RPM。
答案 3 :(得分:2)
已经有python 2.6和django的RPM可用 - 因此至少(相对)容易通过RPM获取和安装。为您的项目创建一个RPM,有一个使用Distutils写下一些细节的内容,这些内容详细说明了您在spec文件中需要的内容以及为实现它而调用的内容。
还有一个关于在Creating Python RPM的StackOverflow上从python创建RPM的说明,它也有一些细节。
根据经验,将python本身打包为RPM是最狡猾的小动物,因此利用已有的东西我肯定会推荐。对于我已经看过这个的一些程序,我们有一个Makefile(是的,旧学校)在一个持续集成服务器上运行setup.py bdist_rpm命令,使RPM可用作该构建的结果并立即在CI服务器。
答案 4 :(得分: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
你可以通过在setup调用中给出这个选项告诉setuptools在创建rpm之前将它添加到spec文件中:
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