python中的包管理與匯入

2021-09-24 15:21:18 字數 2154 閱讀 2297

衝擊年薪50w,助你高階python工程師》

包中的__init__.py檔案

1、python的每個模組的包中,包含乙個__init__.py檔案,有了這個檔案,才能匯入目錄下的module。

2、__init__.py為空時,使用from *** import *從該包匯入時,雖然正常工作,但是沒有匯入任何內容。

3、可以在__init__.py中匯入其它包或模組,這樣當引入該包時,__init__.py執行,自動匯入這些模組。

如__init__.py內容為:

import aa

import bb

使用時,from *** import *,將自動匯入aa和bb。

4、__init__.py中有乙個特殊變數__all__,定義乙個列表,當使用from *** import *時,將自動匯入所有__all__中列出的子包或子模組。

如:__all__ = ['cc','dd']

from *** import *將自動匯入cc和dd。

import格式

1、import *** /import packagename.*** /import package1.package2.***

每級package目錄中都需要__init__.py。

3、from packagename import ***/from package1.package2 import ***

4、from packagename import */from package1.package2 import *

*只用放在有from的匯入的import後面。

import */from package1 import package2.*,格式都是不正確的。

絕對路徑與相對路徑

1、absolute import

相對於sys.path中定義的路徑。

2、relative import

import ***/import package1.***

從語句上,看不出來是sys.path下的模組,還是當前包下的模組。relative import不建議使用。

可以在檔案中加入from __future__ import absolute_import禁止relative import。這樣會認為import ***/import package1.***都是absolute import,相對於sys.path中的路徑。

3、explicit relative import

from . import ***/from .package1 import ***/from ..package1 import ***

用乙個點表示當前package中進行查詢,兩個點表示上一層package中進行查詢。

注意事項:

python中只能在模組中使用relative import,而不能在應用程式中使用relative import。應用程式必需使用absolute import,而package中可以使用相對匯入。

explicit relative import 使用模組的名字確定模組在包中的位置,入口檔案模組名字總是__main__。在package中使用relative import時,一定不能引用到入口檔案所在的那一層目錄。

如:main.py

|___________core

|                  |____________sunny.py

|                  |____________ __init__.py

|___________effect

|                  |____________windy.py

|                  |____________ __init__.py

|________________________ __init__.py  

在sunny.py中使用from ..effect import windy,因為 .. 運算子進入上一層的package, 然後發現入口檔案就在這一層,所以不會把這一層當作乙個package, 這樣就會出現 下面的錯誤:

valueerror: attempted relative import beyond toplevel package。

python包管理 關於python包管理

有著41個物件 檔案或者資料夾 1 其中linester 1.0.0 py2.7.egg info檔案 是安裝mynester跟yournester的資訊總結,他們使用了python setup.py install 的安裝方式。學會使用distutils發布包,見文章 但是在linester 1....

GO中的包管理

我們知道,程式是可以通過封裝來提高 的復用性。那麼go就是可以通過包管理的機制來管理 go modules於go語言1.11版本時引入,在1.12版本正式支援,是由go語言官方提供的包管理解決方案。modules是相關go包的集合,是源 交換和版本控制的單元。go命令直接支援使用modules,包括...

python的包管理方式

模組包 包通常總是乙個目錄,目錄下為首的乙個檔案便是 init py。然後是一些模組檔案和子目錄,假如子目錄中也有 init py 那麼它就是這個包的子包了。差不多就像這樣吧 假定我們的包的例子有如下的目錄結構 phone init py common util.py voicedta init p...