Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过RPM分发Python/Django应用程序_Python_Django_Rpm_Esx - Fatal编程技术网

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

如何通过RPM分发Python/Django应用程序,python,django,rpm,esx,Python,Django,Rpm,Esx,我已经读了一遍,我认为这是一个很好的开始,但我正在寻找更多的洞察力 我已经使用Python2.6和Django 1.2.1编写了一个应用程序。 我想在没有安装Python2.6或Django的系统上部署这个应用程序。系统本身没有安装很多东西——sqlite3、pysqlite2、gcc等等。但是,系统有Python2.4.3 创建Python2.6、Django和我的应用程序本身(一个标准的Django应用程序)的RPM的最明智的方法是什么,这样每个RPM都可以单独安装,以允许升级不同的组件 我

我已经读了一遍,我认为这是一个很好的开始,但我正在寻找更多的洞察力

我已经使用Python2.6和Django 1.2.1编写了一个应用程序。 我想在没有安装Python2.6或Django的系统上部署这个应用程序。系统本身没有安装很多东西——sqlite3、pysqlite2、gcc等等。但是,系统有Python2.4.3

创建Python2.6、Django和我的应用程序本身(一个标准的Django应用程序)的RPM的最明智的方法是什么,这样每个RPM都可以单独安装,以允许升级不同的组件

我不太了解如何创建源RPM,但我怀疑这是现成的信息。如果有任何特别好的资源来创建源RPM,我也会非常感激

如果有必要,系统是ESX 4 Update 1

谢谢

更新:
我也从来没有想到分发Python鸡蛋,甚至使用setup.py是内容分发的可行解决方案。我也有兴趣听到这方面的消息。

已经有了RPM的,并且可以使用,所以这些至少(相对而言)很容易通过RPM抓取和安装。为了为您的项目创建一个RPM,有一个关于使用的一些详细信息的总结,它涉及到您在spec文件中需要什么以及您调用什么来实现它的详细信息

还有一个关于在StackOverflow上从python创建RPM的注释,其中也有一些细节

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

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

  • 善用系统路径
  • 善用系统设施
  • 处理翻译
  • 将密钥随机化
我必须为包装解决这些问题,我建议您调查已到位的各种位,以使其工作:

  • 安装在
    /usr/share/
  • 使用
    execfile()
    /etc/
  • 巨大的翻译处理狭条排印
  • 在安装后脚本中替换密钥
  • 所有其他需要的血腥变化和软糖

Python软件包通常随一起分发。通常,您可以使用
easy\u install
(可选使用特定版本号)安装每个python包(及其依赖项)。我建议您使用setuptools作为我们的主要分发方法,因为:

  • 它适用于所有平台
  • 一般来说,是Python包的首选方式
  • .rpm或.deb安装脚本也可以重用其中的一部分
  • 您可以在中安装此软件包,而无需root权限,与服务器上其他已安装的web应用程序没有冲突
一个很好的阅读资源是。它主要关注Flask(另一个web框架),但简单地用“Django”替换“Flask”就可以了:)

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

本文可能会帮助您开始了解Fabric:

此外,我还建议您将您的存储库(或镜像现有的存储库)发布到那些希望手动获取最新源代码并在之后使用
python setup.py install安装应用程序的人身上或为他们发布。setup.py安装脚本是我前面提到的distribute的一部分。

请参阅。它将展示如何处理bdistpython实用程序。有了它,您将能够生成多种类型的包(或者,它是这样说的,“内置分发版”),包括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在spec文件创建rpm之前将其添加到spec文件中:

options={'bdist\u rpm':{'post\u install':'bdist\u rpm\u post\u install.sh'},

有关完整的工作setup.py脚本、安装后钩子以及与
python setup.py test
一起工作的testsuite,请参见上面的链接,该testsuite将在本地安装所有依赖项,并运行django测试

要让rpm也自动安装其依赖项,请创建一个
setup.cfg
文件,该文件告诉bdist\U 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

我不会在系统路径下安装web应用程序,因为不同版本同时运行可能会遇到问题,或者依赖项冲突。此外,应在配置过程中而不是在安装过程中随机分配密钥(对集群中运行的多台服务器进行映像…)。如果您有一个集群,则无论如何都要使用puppet等工具进行部署,因此它们最终将使用相同的密钥。在系统路径下是很好的,因为