django 打包發佈及安裝

http://python.usyiyi.cn/translate/Django_111/intro/reusable-apps.html
高級教程:如何編寫可重用的應用程序
這個高級教程開始於Tutorial 7停止。 我們將把我們的網頁投票轉換成一個獨立的Python包,這樣你可以在其它項目中重用或者分享給其它人。

如果您最近沒有完成教程1-7,我們建議您查看這些,以使您的示例項目與下面描述的項目相匹配。

Reusability matters

設計、構建、測試和維護一個網頁應用有許多工作要做。 許多Python 和 Django 項目都有常見的共同問題。 可重用將會節省這些重複性工作。

可重用性在Python 中是一種常見的方式。 Python包索引 (PyPI) 具有廣泛的包,你可以在你自己的Python程序中使用。 查閱一下Django Packages中已經存在的可重用的應用,你可以結合它們到你的項目。 Django 自身也只是一個Python 包。 這意味着你可以獲取已經存在的Python包和Django應用並將它們融合到你自己的網頁項目。 你只需要編寫你項目的獨特的部分。

假設您正在開始一個新項目,需要一個像我們一直在進行的投票應用程序。 你如何讓該應用可重用? 幸運的是,你已經在正確的道路上。 在Tutorial 3中,我們看到我們可以如何使用include將投票應用從項目級別的URLconf 解耦。 在本教程中,我們將更進一步,讓你的應用在新的項目中容易地使用並隨時可以發佈給其它人安裝和使用。

包? 應用?
Python package 按照簡單重用的方式,將具有相關性的Python代碼歸爲一組。 一個包包含一個或多個Python文件(也叫做“模塊”)。

包可以通過import foo.bar 或from foo import bar 導入。 如果一個目錄(例如polls)想要形成一個包,它必須包含一個特殊的文件init.py,即使這個文件爲空。

一個Django 應用 只是一個Python包,它特意用於Django項目中。 一個應用可以使用常見的Django 約定,例如具有urls、tests、models和views 子模塊。

後面我們使用打包這個詞來描述將一個Python包變得讓其他人易於安裝的過程。 這可能有點讓人覺得困惑。
您的項目和您的可重用應用程序

經過前面的教程之後,我們的項目應該看上去像這樣:

mysite/
manage.py
mysite/
init.py
settings.py
urls.py
wsgi.py
polls/
init.py
admin.py
migrations/
init.py
0001_initial.py
models.py
static/
polls/
images/
background.gif
style.css
templates/
polls/
detail.html
index.html
results.html
tests.py
urls.py
views.py
templates/
admin/
base_site.html
您在Tutorial 3和Tutorial 7中創建了polls/templates和mysite/templates。 現在你可能更加清晰爲什麼我們爲項目和應用選擇單獨的模板目錄:屬於投票應用的部分全部在polls中。 它使得該應用“自包含(self-contained)”且更加容易丟到一個新的項目中。

現在可以拷貝polls目錄到一個新的Django項目並立即重用。 儘管它還不能充分準備好到可以立即發佈。 所以,我們需要打包這個應用來讓它對其他人易於安裝。

安裝一些先決條件

Python 打包的目前狀態因爲有多種工具而混亂不堪。 對於本教程,我們打算使用setuptools來構建我們的包。 它是推薦的打包工具(已經與distribute 分支合併)。 我們還將使用pip來安裝和卸載它。 現在你應該安裝這兩個包。 如果你需要幫助,你可以參考how to install Django with pip。 你可以使用同樣的方法安裝setuptools。

包裝您的應用程序

Python 打包 會將你的應用預處理成一種特殊的格式, 這樣安裝和使用就會變得簡單。 Django 自己是以非常相似的方式打包起來的。 對於一個像polls這樣的小應用,這個過程不是太難。

首先,在你的Django項目之外,爲polls創建一個父目錄。 稱這個目錄爲django-polls。

爲你的應用選擇一個名字
當爲你的包選擇一個名字時,檢查一下PyPI中的資源以避免與已經存在的包有名字衝突。 當創建一個要發佈的包時,在你的模塊名字前面加上django-通常很有用。 這有助於其他正在查找Django應用的人區分你的應用是專門用於Django的。

應用的標籤(應用的包的點分路徑的最後部分)在INSTALLED_APPS中必須唯一。 避免使用與Django的contrib packages 中任何一個使用相同的標籤,例如admin、auth和messages。
將polls 目錄移動到django-polls目錄中。

創建一個包含以下內容的文件django-polls/README.rst:

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.
    創建一個django-polls/LICENSE文件。 如何選擇License超出本教程的範圍,但值得一說的是, 公開發布的代碼如果沒有License是毫無用處的。 Django和許多Django兼容的應用程序是根據BSD許可證分發的;但是,您可以自由選擇自己的許可證。 只需知道你所選擇的License,將決定誰能使用你的代碼.

下一步我們將創建一個setup.py 文件,它提供如何構建和安裝該應用的詳細信息。 該文件完整的解釋超出本教程的範圍,setuptools 文檔 有很好的解釋。 創建一個文件django-polls/setup.py,其內容如下:

django-polls/setup.py
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',br/>author_email='[email protected]',
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',
],

)
默認只有Python模塊和包會包含進包中。 如果需要包含額外的文件,我們需要創建一個MANIFEST.in文件。 上一步提到的setuptools 文檔對這個文件有更詳細的討論。 如果要包含模板、django-polls/MANIFEST.in和我們的LICENSE 文件,創建一個文件README.rst,其內容如下:

django-polls/MANIFEST.in
include LICENSE
include README.rst
recursive-include polls/static
recursive-include polls/templates

這是可選的,但建議您在應用程序中包含詳細的文檔。 創建一個空目錄django-polls/docs以供將來使用。 向django-polls/MANIFEST.in添加另外一行:

recursive-include docs *
注意docs不會包含進你的包中除非你添加一些文件到它下面。 許多Django應用還通過類似readthedocs.org這樣的站點提供它們的在線文檔.

試着通過python setup.py sdist 構建你的包(從django-polls的內部運行)。 這會創建一個django-polls-0.1.tar.gz目錄並構建一個新包:dist。

更多關於打包的信息,參見Python 的 打包和分發項目的教程。

使用你自己的包

因爲,我們將polls 目錄移到項目的目錄之外,它不再工作了。 我們將通過安裝我們的新的django-polls包來修復它。

安裝成某個用戶的庫
以下的步驟將安裝django-polls 成某個用戶的庫。 用戶級別的安裝比系統級別的安裝有許多優點,例如將包運行在普通用戶級別上不但不會影響系統服務還不會影響其他用戶

注意根據用戶的安裝仍然可以影響以該用戶身份運行的系統工具,所以virtualenv 是更健壯的解決辦法(見下文)。
要安裝軟件包,請使用pip(您已經installed it,對吧?):

pip install --user django-polls/dist/django-polls-0.1.tar.gz
幸運的話,你的Django 項目現在應該又能正常工作了。 請重新運行服務器以證實這點。

若要卸載這個包,使用pip:

pip uninstall django-polls
發佈您的應用程序

既然我們已經打包並測試過django-polls,是時候與世界共享它了! 如果它不僅僅是個例子,你現在可以:

將這個包用郵件發送給朋友。
在您的網站上上傳包。
上傳這個包到一個公開的倉庫,例如Python 包索引 (PyPI)。 packaging.python.org 上面有 很好的教程 講述具體流程。
使用virtualenv

前面,我們將poll 安裝成一個用戶的庫。 它有一些缺點:

修改這個用戶的庫可能影響你的系統上的其它Python 軟件。
你將不可以運行這個包的多個版本(或者具有相同名字的其它包)。
特別是一旦你維護幾個Django項目,這些情況就會出現。 如果確實出現,最好的解決辦法是使用virtualenv。 這個工具允許你維護多個分離的Python環境,每個都具有它自己的庫和包的命名空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章