--- title: Python Package & Module tags: python, module, package --- [TOC] --- # Module Note Links ## Builtin Module - [Module - ArgParse](https://hackmd.io/OcBCKOFwReyTgALyDFjdRw?view) - [Module - CSV](https://hackmd.io/@YouSheng/Bk8N8B0O_) - [Module - Ftplib](https://hackmd.io/@YouSheng/HJr2WAbCI) - [Module - Hashlib](https://hackmd.io/@YouSheng/BkvOOHAOO) - [Module - JSON](https://hackmd.io/@YouSheng/Bk4eIPBDO) - [Module - Logging](https://hackmd.io/@YouSheng/SyElMHNdO) - [Module - OS](https://hackmd.io/@YouSheng/SkexvBAuO) - [Module - Queue](https://hackmd.io/@YouSheng/S1lsYI7WF) - [Module - Random](https://hackmd.io/@YouSheng/HkBkUrA_u) - [Module - Requests](https://hackmd.io/@YouSheng/S14CMCeY_) - [Module - Socket](https://hackmd.io/@YouSheng/Hyk0nlDID) - [Module - SSL](https://hackmd.io/@YouSheng/ryl1DWWtO) - [Module - SYS](https://hackmd.io/@YouSheng/SkSgwBAud) - [Module - Time & DateTime](https://hackmd.io/@YouSheng/HyU5Ur0dO) - [Module - Tkinter](https://hackmd.io/@YouSheng/H1dlhcsMu) - [Module - Threading](https://hackmd.io/@YouSheng/HJIkx7bF_) - [Module - Unittest](https://hackmd.io/@YouSheng/SJdGtiQ9O) - [Module - Urllib](https://hackmd.io/@YouSheng/SyYVsJf0U) ## Thrid Party Module - [Module - Bs4](https://hackmd.io/@YouSheng/SkTkOkf0L) - [Module - Curses](https://hackmd.io/@YouSheng/Hy8yTH0uu) - [Module - Email & SmtpLib](https://hackmd.io/@YouSheng/Syjj3rROd) - [Module - Numpy](https://hackmd.io/@YouSheng/ryYvfc_n8) - [Module - Openpyxl](https://hackmd.io/@YouSheng/SJ0N1_PpI) - [Module - Pandas](https://hackmd.io/@YouSheng/S14aCvDp8) - [Module - Psutil](https://hackmd.io/@YouSheng/B1BvfSiFu) - [Module - PyperClip](https://hackmd.io/@YouSheng/SJRudBAud) - [Module - PyAutoGUI](https://hackmd.io/@YouSheng/HyU5iSAdu) - [Module - Selenium](https://hackmd.io/@YouSheng/Bk1dhB5Ku) --- # Module Concept :::success C/C++ 編譯過後的 Object Code 也可以當成 Python Module - 兩者使用的方式完全相同 - 若發現使用 Python 撰寫效率很差,可以試著用 C/C++ 改寫 Module ::: ```python= import <module name> <module name>.<class or fun or global value> ``` - 模組名稱就是檔案的主檔名 - 第一次 Import Module 時,若一切正常沒有錯誤,Python 則會將 Source Code 編譯成 Python Byte Code,存放在模組同一資料夾底下,以 `<module name>.pyc` 儲存。 - 之後使用若 Source Code 沒有變更,就會直接執行 `.pyc` 檔,增加執行效率。 ## ReImport Module - import statment 會檢查模組是否已經被載入,所以**重複執行 import 不會再次從檔案 import module** - 若要在程式執行到一半或是在 Interactive Mode 中 ReImport Module,使用 ```python= import importlib, random importlib.reload(random) ``` ## Three Type of Import ```python= # 1. Basic Type import <module name> # 2. Import object repectively from <module name> import object1, object2, ... # 3. Alias import <module name> as <alias> ``` - Import All 好用但不建議用 - 不會 import `_` 開頭的物件 - 若被 import 的模組內有 `__all__` 的 List,在執行 `import *` 就會照 `__all__` 的規則 import 物件 - 在函式內可以使用 import 來匯入模組,但**不能使用 `from <module name> import *`** ```python= from <module name> import * ``` ## Module Search Path - 空字串代表**當前目錄** - 執行 Python 程式時,該程式所在的目錄會被放在 `sys.path` 變數的第一個位置 - 將主程式與模組放在同一個目錄可優先被搜尋到 ```python= import sys sys.path ['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/johnson/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages'] ``` --- # NameSpace ## Three NameSpace 1. builtin 2. global 3. local --- # Package - Package 是一個包含 Python Source Code 的目錄。 - 通常 Package 中包含一組相關的程式檔案 (模組) - 套件的名稱即**最上層目錄的名稱** - `__init__.py` - 當 import package 時會先執行該檔案 - 該檔案通常會針對 package 進行初始化的動作,例如先 import 其他需要的 package
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up