W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
設(shè)計(jì),構(gòu)建,測(cè)試以及維護(hù)一個(gè) web 應(yīng)用要做很多的工作。很多 Python 以及 Django 項(xiàng)目都有一些常見問題。如果我們能保存并利用這些重復(fù)的工作豈不是更好?
可重用性是 Python 的根本。The Python Package Index (PyPI) 有許多大量的包,都可被用在你自己的 Python 項(xiàng)目中。同樣可以在 Django Packages 中查找已發(fā)布的可重用應(yīng)用,也可將其引入到你的項(xiàng)目中。Django 本身也是一個(gè) Python 包,也就是說你可以將已有的 Python 包或 Django 應(yīng)用并入你的項(xiàng)目。你只需要編寫屬于你的那部分即可。
假設(shè)你現(xiàn)在創(chuàng)建了一個(gè)新的項(xiàng)目,并且需要一個(gè)類似我們之前做的投票應(yīng)用。你該如何復(fù)用這個(gè)應(yīng)用呢?慶幸的是,其實(shí)你已經(jīng)知道了一些。在 教程 1,我們使用過 ?include
?從項(xiàng)目級(jí)別的 URLconf 分割出 polls。在本教程中,我們將進(jìn)一步使這個(gè)應(yīng)用易用于新的項(xiàng)目中,并發(fā)布給其他人安裝使用。
通過前面的教程,我們的工程應(yīng)該看起來像這樣:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
polls/
__init__.py
admin.py
apps.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
你在 教程 7 中創(chuàng)建了 ?mysite/templates
?,在 教程 3 中創(chuàng)建了 ?polls/templates
??,F(xiàn)在也許更清楚為什么我們選擇為項(xiàng)目和應(yīng)用程序設(shè)置單獨(dú)的模板目錄:所有屬于 ?polls
?應(yīng)用程序的部分都在 ?polls
?中。這使得應(yīng)用程序自成一體,更容易放到一個(gè)新項(xiàng)目中。
目錄 ?polls
?現(xiàn)在可以被拷貝至一個(gè)新的 Django 工程,且立刻被復(fù)用。不過現(xiàn)在還不是發(fā)布它的時(shí)候。為了這樣做,我們需要打包這個(gè)應(yīng)用,便于其他人安裝它。
目前,打包 Python 程序需要工具,有許多工具可以完成此項(xiàng)工作。在此教程中,我們將使用 setuptools 來打包我們的程序。這是推薦的打包工具(與 發(fā)布 分支合并)。我們?nèi)耘f使用 pip 來安裝和卸載這個(gè)工具?,F(xiàn)在,你需要安裝這兩個(gè)包。
Python 的 打包 將以一種特殊的格式組織你的應(yīng)用,意在方便安裝和使用這個(gè)應(yīng)用。Django 本身就被打包成類似的形式。對(duì)于一個(gè)小應(yīng)用,例如 ?polls
?,這不會(huì)太難。
1、首先,在你的 Django 項(xiàng)目目錄外創(chuàng)建一個(gè)名為 ?django-polls
? 的文件夾,用于盛放 ?polls
?。
當(dāng)為你的包選一個(gè)名字時(shí),避免使用像 ?PyPI
?這樣已存在的包名,否則會(huì)導(dǎo)致沖突。當(dāng)你創(chuàng)建你的發(fā)布包時(shí),可以在模塊名前增加 ?django-
? 前綴,這是一個(gè)很常用也很有用的避免包名沖突的方法。同時(shí)也有助于他人在尋找 Django 應(yīng)用時(shí)確認(rèn)你的 app 是 Django 獨(dú)有的。
應(yīng)用標(biāo)簽(指用點(diǎn)分隔的包名的最后一部分)在 ?INSTALLED_APPS
?中 必須 是獨(dú)一無二的。避免使用任何與 ?Django contrib packages
? 文檔中相同的標(biāo)簽名,比如 ?auth
?,?admin
?,?messages
?。
2、將 ?polls
目錄移入 ?django-polls
? 目錄。
3、創(chuàng)建一個(gè)名為 ?django-polls/README.rst
? 的文件,包含以下內(nèi)容:
=====
Polls
=====
Polls is a 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::
path('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.
4、創(chuàng)建一個(gè) ?django-polls/LICENSE
? 文件。選擇一個(gè)非本教程使用的授權(quán)協(xié)議,但是要足以說明發(fā)布代碼沒有授權(quán)證書是 不可能的 。Django 和很多兼容 Django 的應(yīng)用是以 ?BSD
授權(quán)協(xié)議發(fā)布的;不過,你可以自己選擇一個(gè)授權(quán)協(xié)議。只要確定你選擇的協(xié)議能夠限制未來會(huì)使用你的代碼的人。
5、接下來我們將創(chuàng)建 ?pyproject.toml
?、?setup.cfg
? 和 ?setup.py
? 文件,詳細(xì)說明如何構(gòu)建和安裝該應(yīng)用程序。對(duì)這些文件的全面解釋超出了本教程的范圍,但 setuptools 文檔 有很好的解釋。創(chuàng)建 ?django-polls/pyproject.toml
?、?django-polls/setup.cfg
? 和 ?django-polls/setup.py
? 文件,內(nèi)容如下:
[build-system]
requires = ['setuptools>=40.8.0', 'wheel']
build-backend = 'setuptools.build_meta:__legacy__'
[metadata]
name = django-polls
version = 0.1
description = A Django app to conduct web-based polls.
long_description = file: README.rst
url = https://www.example.com/
author = Your Name
author_email = yourname@example.com
license = BSD-3-Clause # Example license
classifiers =
Environment :: Web Environment
Framework :: Django
Framework :: Django :: X.Y # Replace "X.Y" as appropriate
Intended Audience :: Developers
License :: OSI Approved :: BSD License
Operating System :: OS Independent
Programming Language :: Python
Programming Language :: Python :: 3
Programming Language :: Python :: 3 :: Only
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Topic :: Internet :: WWW/HTTP
Topic :: Internet :: WWW/HTTP :: Dynamic Content
[options]
include_package_data = true
packages = find:
python_requires = >=3.8
install_requires =
Django >= X.Y # Replace "X.Y" as appropriate
from setuptools import setup
setup()
6、默認(rèn)情況下,包中僅包含 Python 模塊和包。 要包含其他文件,我們需要?jiǎng)?chuàng)建一個(gè) ?MANIFEST.in
? 文件。 上一步中提到的 ?setuptools
?文檔更詳細(xì)地討論了這個(gè)文件。 要包含模板、?README.rst
? 和我們的 ?LICENSE
?文件,創(chuàng)建一個(gè)文件 ?django-polls/MANIFEST.in
? ,其內(nèi)容如下:
include LICENSE
include README.rst
recursive-include polls/static *
recursive-include polls/templates *
7、在應(yīng)用中包含詳細(xì)文檔是可選的,但我們推薦你這樣做。創(chuàng)建一個(gè)空目錄? django-polls/docs
? 用于未來編寫文檔。額外添加一行至 ?django-polls/MANIFEST.in
?
recursive-include docs *
注意,現(xiàn)在 ?docs
?目錄不會(huì)被加入你的應(yīng)用包,除非你往這個(gè)目錄加幾個(gè)文件。許多 Django 應(yīng)用也提供他們的在線文檔通過類似 readthedocs.org 這樣的網(wǎng)站。
8、試著構(gòu)建你自己的應(yīng)用包通過 ?ptyhon setup.py sdist
? (在 ?django-polls``
?目錄內(nèi))。這將創(chuàng)建一個(gè)名為 ?``dist
? 的目錄并構(gòu)建你自己的應(yīng)用包, ?django-polls-0.1.tar.gz
?。
由于我們把 ?polls
目錄移出了項(xiàng)目,所以它無法工作了。我們現(xiàn)在要通過安裝我們的新 ?django-polls
? 應(yīng)用來修復(fù)這個(gè)問題。
以下步驟將 ?django-polls
? 以用戶庫的形式安裝。與安裝整個(gè)系統(tǒng)的軟件包相比,用戶安裝具有許多優(yōu)點(diǎn),例如可在沒有管理員訪問權(quán)的系統(tǒng)上使用,以及防止應(yīng)用包影響系統(tǒng)服務(wù)和其他用戶。
請(qǐng)注意,按用戶安裝仍然會(huì)影響以該用戶身份運(yùn)行的系統(tǒng)工具的行為,因此使用虛擬環(huán)境是更可靠的解決方案(請(qǐng)參見下文)。
1、為了安裝這個(gè)包,使用 pip:
python -m pip install --user django-polls/dist/django-polls-0.1.tar.gz
2、幸運(yùn)的話,你的 Django 項(xiàng)目應(yīng)該再一次正確運(yùn)行。啟動(dòng)服務(wù)器確認(rèn)這一點(diǎn)。
3、通過 pip 卸載包:
python -m pip uninstall django-polls
現(xiàn)在,你已經(jīng)對(duì) ?django-polls
? 完成了打包和測(cè)試,準(zhǔn)備好向世界分享它!如果這不是一個(gè)例子應(yīng)用,你現(xiàn)在就可以這樣做。
the Python Package Index
? (?PyPI
?)。 packaging.python.org 有一個(gè)不錯(cuò)的 教程 說明如何發(fā)布至公共倉庫。早些時(shí)候,我們以用戶庫的形式安裝了投票應(yīng)用。這樣做有一些缺點(diǎn)。
通常,只有在維護(hù)多個(gè) Django 項(xiàng)目時(shí)才會(huì)出現(xiàn)這些情況。當(dāng)這樣做時(shí),最好的解決方法是使用 ?venv
?。使用此工具,你可以維護(hù)多個(gè)隔離的 Python 環(huán)境,每個(gè)環(huán)境都有其自己的庫和包命名空間的副本。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: