python學習的第十八天模塊之包、相對搜索路徑和絕對搜索路徑
阿新 • • 發佈:2018-10-15
main 簡單 pre port 頂級 relative 定性 超出 text
一、包
1、什麽是包
包是一種通過使用‘.模塊名’來組織python模塊名稱空間的方式。具體就是一個包含有__init__.py文件的文件夾,所以其實我們創建包的目的就是為了用文件夾將文件/模塊組織起來
PS:(1)在pyhton3中沒有__init__不會報錯,但在python2會報錯
(2)創建包的目的就是為了導入模塊而不是運行,包的本質是個模塊也是個文件夾
2、為什麽用包
雖然功能越來越多被導入的模塊越多,我們需要把這些模塊統一組織起來方便我們管理,以提高程序的結構性和穩定性
ps:(1)無論portfrom..import導入都要求點的左邊是個包
(2)form...import後面必須是一個明確的名字,不包含點
3、怎麽用包
(1)包之import的使用
#在與glance同級的test.py中 import glance glance.cmd.manage.main() ‘‘‘ 執行結果: AttributeError: module ‘glance‘ has no attribute ‘cmd‘ ‘‘‘
(2)包之from...import的使用
1 from glance.db import models 2 models.register_models(‘mysql‘)
二、絕對路徑和相對路徑(最好用form...import)
ps:包以及包所包含的模塊都是用來被導入的,而不是被直接執行的。而環境變量都是以執行文件為準的
絕對導入與相對導入 # 絕對導入: 以執行文件的sys.path為起始點開始導入,稱之為絕對導入 # 優點: 執行文件與被導入的模塊中都可以使用 # 缺點: 所有導入都是以sys.path為起始點,導入麻煩 # 相對導入: 參照當前所在文件的文件夾為起始開始查找,稱之為相對導入 # 符號: .代表當前所在文件的文件加,..代表上一級文件夾,...代表上一級的上一級文件夾 # 優點: 導入更加簡單 # 缺點: 只能在導入包中的模塊時才能使用 #註意: 1. 相對導入只能用於包內部模塊之間的相互導入,導入者與被導入者都必須存在於一個包內2. attempted relative import beyond top-level package # 試圖在頂級包之外使用相對導入是錯誤的,言外之意,必須在頂級包內使用相對導入,
每增加一個.代表跳到上一級文件夾,而上一級不應該超出頂級包
總的來說:(1)在執行文件導入包用import更簡單,用from ...import 需要手動添加環境變量
(2)在模塊間互相導入,用from...import的相對導入簡單,import需要註意sys環境變量
(3)相對導入和絕對導入只能from...import
python學習的第十八天模塊之包、相對搜索路徑和絕對搜索路徑