[英]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作為我們的主要分發方法,因為:
您可以閱讀的一個很好的資源是Deploying with Distribute 。 它專注於Flask(另一個Web框架),但只需將“Flask”替換為“Django”就可以了
另一個非常適合分發和部署東西的python工具是fabric ,你可以使用它除了分發(或者沒有它,你想要的)。 使用結構,您可以立即在N個服務器上引導和安裝應用程序(包含依賴項),管理多個開發,測試和生產服務器,並使用單個命令同時更新它們。
本文可能會幫助您開始使用Fabric: 使用Fabric進行部署
此外,我還建議您在github或bitbucket上發布您的存儲庫(或鏡像現有存儲庫),以便那些想要手動獲取最新資源並隨后使用python setup.py install
應用程序的人員。 setup.py安裝腳本是我之前提到的分發的一部分。
已有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腳本,安裝后掛鈎以及與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.