python import匯入模組

2021-09-29 05:30:49 字數 3743 閱讀 9902

常規匯入(regular imports)

使用from語句匯入

相對匯入(relative imports)

可選匯入(optional imports)

本地匯入(local imports)

常規匯入

常規匯入應該是最常使用的匯入方式,大概是這樣的:

import sys
你只需要使用import一詞,然後指定你希望匯入的模組或包即可。通過這種方式匯入的好處是可以一次性匯入多個包或模組:

import os, sys, time
雖然這節省了空間,但是卻違背了python風格指南。python風格指南建議將每個匯入語句單獨成行。

有時在匯入模組時,你想要重新命名這個模組。這個功能很容易實現:

import sys as system
很多時候你只想要匯入乙個模組或庫中的某個部分。我們來看看在python中如何實現這點:

from functools import lru_cache
具體來說,是使用句點來決定如何相對匯入其他包或模組。

這麼做的原因是為了避免偶然情況下匯入標準庫中的模組產生衝突。

my_package/

__init__.py

subpackage1/

__init__.py

module_x.py

module_y.py

subpackage2/

__init__.py

module_z.py

module_a.py

在本地磁碟上找個地方建立上述檔案和資料夾。在頂層的__init__.py檔案中,輸入以下**:

from

.import subpackage1

from

.import subpackage2

from

.import module_x

from

.import module_y

from

.module_y import spam as ham

defmain()

: ham(

)

def

spam()

:print

('spam '*3

)

開啟終端,cdmy_package包所在的資料夾,但不要進入my_package

in [1]

:import my_package

in [2]

: my_package.subpackage1.module_x

out[2]

:from

'my_package/subpackage1/module_x.py'

>

in [3]

: my_package.subpackage1.module_x.main(

)spam spam spam

相對匯入適用於你最終要放入包中的**。如果你編寫了很多相關性強的**,那麼應該採用這種匯入方式。

pypi上有很多流行的包也是採用了相對匯入。

還要注意一點,如果你想要跨越多個檔案層級進行匯入,只需要使用多個句點即可。不過建議相對匯入的層級不要超過兩層

注意事項:

如果你往module_x.py文件中新增了if __name__ == 『__main__』,然後試圖執行這個檔案,你會碰到乙個很難理解的錯誤。

from

. module_y import spam as ham

defmain()

: ham(

)if __name__ ==

'__main__'

:# this won't work!

main(

)

現在從終端進入subpackage1資料夾,執行以下命令:

python module_x.py
如果python 2,有下面的錯誤資訊:

traceback (most recent call last)

: file "module_x.py"

, line 1,in

from

. module_y import spam as ham

valueerror: attempted relative import

in non-package

如果是python 3,錯誤資訊大概是這樣的:

traceback (most recent call last)

: file "module_x.py"

, line 1,in

from

. module_y import spam as ham

systemerror: parent module ''

not loaded, cannot perform relative import

module_x.py是某個包中的乙個模組,而你試圖以指令碼模式執行,但是這種模式不支援相對匯入

如果你想在自己的**中使用這個模組,那麼你必須將其新增至python的匯入檢索路徑(import search path)。最簡單的做法如下:

import sys

'/path/to/folder/containing/my_package'

)import my_package

注意,你需要新增的是my_package的上一層資料夾路徑,而不是my_package本身。原因是my_package就是我們想要使用的包,所以如果你新增它的路徑,那麼將無法使用這個包。

import匯入目錄問題:

import匯入其他模組時,需要匯入的模組資料夾有__init__.py的檔案。

在import的第乙個階段,主要是完成了查詢要引入模組的功能。查詢時首先檢查sys.modules(儲存了之前import的類庫的快取),如果module沒有被找到,則按照下面的搜尋路徑查詢模組

(1).py 所在檔案的目錄

(2)pythonpath 中的目錄

(3)python安裝目錄,unix下,預設路徑一般為/usr/local/lib/python/

(4)3.x 中.pth 檔案內容

參考:

python匯入模組的幾種姿勢;

pep 366 – main module explicit relative imports;

匯入系統;

python筆記03:python中用import匯入包的機制原理是什麼?

Python import 匯入機制

有以下 a.py 和 b.py 兩個模組 a.py print 1 aaa 111 print 2 def a print 3 from b import b print 4 b print 5 aa a print 6 b.py from a import aaa def b print aaa ...

python import匯入現有模組

主要分三種情況 1 主程式與模組程式在同一目錄下 如下面程式結構 src mod1.py test1.py 若在程式test1.py中匯入模組mod1,則直接使用importmod1或from mod1 import 2 主程式所在目錄是模組所在目錄的父 或祖輩 目錄 如下面程式結構 src mod...

Python import 匯入功能詳解

1 import 匯入模組 包 預設從執行的檔案的資料夾下尋找 2 當檔名跟系統內建的模組重名,import還是匯入系統內建的模組 3 import xx檔案,會把xx檔案執行一遍,再把檔案引入。4 可通過 隔開檔案,以通過一行匯入多個檔案。跟通過多行匯入效果一樣 例如 import time,os...