Django APP打包重用


引言

有時候,我們需要將自己寫的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部署 ]
 
        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM