Skip to content

[Python] 套件(package)和模組(module)之間的差別

我們也許在和資訊背景的朋友們聊天時,會聽見他們說:「這個時候就該使用 A 套件!」、「或許我們該考慮引進一下 B 模組……」那麼,究竟什麼是套件package)?什麼是模組module)?他們之間又有什麼差別呢?

這個問題在我剛開始學習時也困擾了很久,隨著寫過越來越多的程式,雖然沒有特別去查詢定義,但也多多少少更加明白這兩者之間的差別了。

本篇文章,就是為了前幾年的自己而寫下的。希望能給和曾經的我一樣困擾的人們一些參考。


套件(package)和模組(module)

任何的 Python 文件(使用 .py 作為副檔名),都可以被視為是一個模組,模組的名稱通常也就是文件的名稱。

而一個套件(package),或是你習慣稱之為『軟體包』,通常含有一個額外的 Python 模組目錄文件 __init__.py

所以套件和模組之間的區別只存在於系統級別,或者說是架構規模不同。但無論你在程式中導入套件或是模組,使用 type() 函式判斷物件型態時結果始終為 module

以下是個範例程式,my_module.py 是一份我自己寫的程式。

import csv
import my_module

# Type
print(type(csv))
print(type(my_module))


Output:

<class 'module'>
<class 'module'>


這就是為什麼會有一些程式開發者宣稱,套件也是模組的一種,並認為這是一個重要的觀念。

而根據 Python 官方的解釋(https://docs.python.org/3/glossary.html#term-package),套件(package)的定義為:

A Python module which can contain submodules or recursively, subpackages. Technically, a package is a Python module with an __path__ attribute.

套件含子模組或遞迴子模組的 Python 模組。以技術的角度來看,只要擁有 __path__ 屬性的 Python 模組即為套件。

這是一個很清楚的定義,我們也可以認為套件比模組擁有更複雜的功能,並時常包含著眾多的模組。


References


Read More

Tags:

Leave a Reply