我們根據一些標準將大量文件組織在不同的文件夾和子文件夾中,這樣我們就可以輕鬆地找到並管理它們。同樣,Python 中的包將模塊化方法的概念帶到了下一個邏輯層次。眾所周知,一個模塊可以包含多個對象,比如類、函數等。 一個包可以包含一個或多個相關模塊。實際上,包實際上是一個包含一個或多個模塊文件的文件夾。
讓我們使用以下步驟創建一個名為 mypackage 的包:
- 創建一個名為
D:\MyApp的新文件夾。 - 在
MyApp內,創建一個名為『my package』的子文件夾。 - 在 mypackage 文件夾中創建一個空的
__init__.py文件。 - 使用支持 Python 的編輯器,如 IDLE,用以下代碼創建模塊 greet.py 和 functions.py:
greet.py
def SayHello(name):
print("Hello ", name) functions.py
def sum(x,y):
return x+y
def average(x,y):
return (x+y)/2
def power(x,y):
return x**y 就這樣。我們已經創建了名為 mypackage 的包。以下是文件夾結構:
Package Folder Structure
從包中導入模塊
現在,為了測試我們的包,將命令提示符導航到MyApp文件夾,並從那裡調用 Python 提示符。
D:\MyApp>python從 mypackage 包導入函數模塊,並調用其 power()函數。
>>> from mypackage import functions
>>> functions.power(3,2)
9還可以從包中的模塊導入特定功能。
>>> from mypackage.functions import sum
>>> sum(10,20)
30
>>> average(10,12)
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
NameError: name 'average' is not definedinit.py
包文件夾包含一個名為__init__.py的特殊文件,用於存儲包的內容。它有兩個目的:
- Python 解釋器會將包含
__init__.py文件的文件夾識別為包。 __init__.py從要導入的模塊中公開指定的資源。
一個空的__init__.py文件使得當這個包被導入時,上述模塊的所有功能都可用。注意__init__.py對於文件夾被 Python 識別為包是必不可少的。您可以根據需要定義單個模塊中的可用功能。
*Note:*We shall also create another Python script in the MyApp folder and import the mypackage package in it. It should be at the same level of the package to be imported. *__init__.py文件通常保持為空。但是,它也可以用於從包文件夾中的模塊中選擇特定的功能,並使它們可用於導入。如下修改__init__.py:
init.py
from .functions import average, power
from .greet import SayHello 現在可以在解釋器會話或另一個可執行腳本中導入指定的函數。
在MyApp文件夾中創建test.py來測試我的包。
test.py
from mypackage import power, average, SayHello
SayHello()
x=power(3,2)
print("power(3,2) : ", x) 請注意,功能power()和SayHello()是從包中導入的,而不是從它們各自的模塊中導入的,如前所述。上述腳本的輸出是:
D:\MyApp>python test.py
Hello world
power(3,2) : 9全局安裝包
一旦創建了一個包,就可以通過運行安裝腳本來安裝它以供系統範圍使用。腳本從setuptools模塊調用setup()函數。
讓我們通過運行一個安裝腳本來安裝 mypackage,以便在系統範圍內使用。
將以下代碼保存為父文件夾MyApp中的 setup.py。腳本從 setuptools 模塊調用setup()函數。setup()函數接受各種參數,如名稱、版本、作者、依賴列表等。zip_safe參數定義包是以壓縮模式還是常規模式安裝。
Example: setup.py
from setuptools import setup
setup(name='mypackage',
version='0.1',
description='Testing installation of Package',
url='#',
author='auth',
author_email='[[email protected]](/cdn-cgi/l/email-protection)',
license='MIT',
packages=['mypackage'],
zip_safe=False) 現在執行以下命令,使用 pip 實用程序安裝mypackage。 確保命令提示符在父文件夾中,在本例中為D:\MyApp。
D:\MyApp>pip install mypackage
Processing d:\MyApp
Installing collected packages: mypack
Running setup.py install for mypack ... done
Successfully installed mypackage-0.1現在 mypackage 可以在系統範圍內使用,並且可以在任何腳本或解釋器中導入。
D:\>python
>>> import mypackage
>>>mypackage.average(10,20)
15.0
>>>mypackage.power(10,2)
100您可能還想發佈該包供公眾使用。 PyPI (代表 Python 包索引)是 Python 包的存儲庫。 訪問https://packaging.python.org/distributing了解更多關於上傳包到 PyPI 的流程。**
原創文章,作者:BTWKV,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/129446.html
微信掃一掃
支付寶掃一掃