1. 程式人生 > >python學習的第十八天模塊之包、相對搜索路徑和絕對搜索路徑

python學習的第十八天模塊之包、相對搜索路徑和絕對搜索路徑

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學習的第十八天模塊之包、相對搜索路徑和絕對搜索路徑