簡體   English   中英

如何通過RPM分發Python / Django App

[英]How to distribute Python/Django App via RPM

我已經閱讀了這個問題 ,我認為這是一個很好的開始,但我正在尋找更多的洞察力。

我使用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代碼時遇到的所有常見問題,Django項目還有一些其他問題需要處理:

  • 與系統路徑玩得很好
  • 與系統設施配合使用
  • 處理翻譯
  • 隨機化密鑰

我必須解決這些包裝Transifex的問題,我建議你研究一下為使其工作而設置的各種問題:

  • /usr/share/<projectname>下安裝
  • 使用execfile()/etc/<projectname>加載設置
  • 巨大的翻譯處理周期
  • 替換安裝后腳本中的密鑰
  • 所有其他所需的血腥變化和軟糖

請參閱Python文檔的第5章 它將展示如何處理bdist Python實用程序。 有了它,您將能夠生成幾種類型的包(或者,如何說,“構建分發”),包括RPM。

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進行部署

此外,我還建議您在githubbitbucket上發布您的存儲庫(或鏡像現有存儲庫),以便那些想要手動獲取最新資源並隨后使用python setup.py install應用程序的人員。 setup.py安裝腳本是我之前提到的分發的一部分。

已有RPM的python 2.6django可用 - 所以至少(相對)容易通過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腳本,安裝后掛鈎以及與python setup.py test一起使用的testsuite,它將在本地安裝所有依賴項,並運行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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM