引言
有時候,我們需要將自己寫的app分發(dist)給同事,分享給朋友,或者在互聯網上發布,這都需要打包、分發我們的app。
Django的子系統重用是基於app級別的。也就是一個項目可以包含多個互相獨立的app,不同項目之間沒有關系。但是,一個app可以屬於多個項目,可以在任何地點、任何時間和任何項目中被重用。你需要將該app運行時所必須的全部文件、資源、配置、數據等等都封裝在一個整體內。
打包工具:setuptools、pip。一般情況下安裝Python時已自帶安裝了它們。
引用官方文檔:https://docs.djangoproject.com/zh-hans/2.0/intro/reusable-apps/
打包APP
打包的本質,就是封裝你的源代碼和文件成為一種新的數據包裝格式,有利於傳輸、分發和安裝。在Django中打包一個app總體上看分三大步:裝包—>編寫setup.py—>打包。細分下面八個步驟:
1. 新建文件夾
在你的Django項目目錄外面,假如為polls應用,准備一個新文件夾,這里取名django-polls
。
額外提醒:
為你的app選擇一個合適的名字:在取名前,去PyPi搜索一下是否有重名或沖突的app(包)已經存在。建議給app的名字加上“django-”的前綴。名字中最后一個圓點的后面部分在INSTALLED_APPS
中一定要獨一無二,不能和任何Django的contrib packages
中的app重名,例如auth、admin、messages等等。
2. 拷貝文件
將polls目錄中的所有內容拷貝到django-polls
新文件夾內。
3. 創建說明文檔
創建一個說明文檔django-polls/README.rst
,寫入下面的內容:
===== Polls ===== Polls is a simple Django app to conduct Web-based polls. For each question, visitors can choose between a fixed number of answers. Detailed documentation is in the "docs" directory. Quick start ----------- 1. Add "polls" to your INSTALLED_APPS setting like this:: INSTALLED_APPS = [ ... 'polls', ] 2. Include the polls URLconf in your project urls.py like this:: url(r'^polls/', include('polls.urls')), 3. Run `python manage.py migrate` to create the polls models. 4. Start the development server and visit http://127.0.0.1:8000/admin/ to create a poll (you'll need the Admin app enabled). 5. Visit http://127.0.0.1:8000/polls/ to participate in the poll.
這其實是一個純文本文件,內容和格式完全自由,但核心要點是注明你的app功能和簡單的使用方法。
4. 添加授權聲明
創建一個django-polls/LICENSE
版權申明文件。大多數Django相關的app都基於BSD版權。
5. 創建MANIFEST文件
默認情況下,只有Python的模塊和包會被打包進我們的app內。為了包含一些其它的文件,比如靜態文件、templates模板等非Python語言編寫的文件,需要創建一個django-polls/MANIFEST.in
文件,並寫入下面的內容:
include LICENSE include README.rst recursive-include polls/static * recursive-include polls/templates *
6. 添加doc目錄(可選)
該步驟可選,但是強烈推薦將詳細的說明文檔一起打包。創建一個空的目錄django-polls/docs
,用於放置app相關的所有文檔。同時不要忘了,在django-polls/MANIFEST.in
文件內加入一行 "recursive-include docs *
"。需要注意的是,如果docs目錄是空的,那么它不會被打包進去。
7. 編寫setup.py腳本
創建一個django-polls/setup.py
文件,包含了編譯和安裝app的配置細節。這種配置腳本的具體語法,請前往setuptools的官方文檔獲取詳細的教程。下面是一個范例,大多數情況下,你在此基礎上改改就可以了:
import os from setuptools import find_packages, setup with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme: README = readme.read() # allow setup.py to be run from any path os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) setup( name='django-polls', version='0.1', packages=find_packages(), include_package_data=True, license='BSD License', # example license description='A simple Django app to conduct Web-based polls.', long_description=README, url='https://www.example.com/', author='Your Name', author_email='yourname@example.com', classifiers=[ 'Environment :: Web Environment', 'Framework :: Django', 'Framework :: Django :: X.Y', # replace "X.Y" as appropriate 'Intended Audience :: Developers', 'License :: OSI Approved :: BSD License', # example license 'Operating System :: OS Independent', 'Programming Language :: Python', # Replace these appropriately if you are stuck on Python 2. 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Topic :: Internet :: WWW/HTTP', 'Topic :: Internet :: WWW/HTTP :: Dynamic Content', ], )
例子中的配置項看起來有點復雜,實際簡單得不要不要的。耐心點,就完全不是問題。
8. 執行打包動作
在django-polls
目錄內,運行 "python setup.py sdist
" 命令。這將會創建一個dist目錄,並生成django-polls-0.1.tar.gz
打包文件。
八個步驟完成了,我們的app也就打包好了。
使用APP包
實際使用時,我們只需要拿着django-polls-0.1.tar.gz
這個文件就可以了。
在安裝包的時候,最好是以個人用戶的身份安裝,而不是全系統范圍的身份。這樣可以有效減少給別的用戶帶去的影響或被別的用戶影響。當然,最好的方式是在virtualenv環境,這種類似隔離的沙盒環境中使用(此時,不需要--user
選項)。
安裝:
pip install --user django-polls-0.1.tar.gz
安裝成功后,在當前Django項目的INSTALLED_APPS
設置中注冊django-polls
,然后啟動服務器,就可以使用這個app了。這個過程中,你可能還需要配置urls、makemigrations、migrate、創建數據實例等動作。
卸載:
pip uninstall django-polls
至此,轉載請注明出處。
[ 本站相關鏈接:>>Django部署 ]
