国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Python 的 import 是怎么工作的?

開發 前端
本文分享了什么是模塊(module),什么是包(package),import 的搜索路徑,也分享了相對導入和絕對導入的區別,最后舉了一個非常實用的 import 例子,方便你構建自己的包。

你好,我是 somenzz,可以叫我征哥。

Python 的 import 是非常直觀的,但即使這樣,有時候你會發現,明明包就在那里,我們仍會遇到 ModuleNotFoundError,明明相對路徑非常正確,就是報錯

ImportError: attempted relative import with no known parent package

導入同一個目錄的模塊和不同的目錄的模塊是完全不同的,本文通過分析使用 import 經常遇到的一些問題,來幫助你輕松搞定 import ,據此,你可以輕松創建屬于自己的包。

1.什么是模塊(module),什么是包(package)

模塊(module)

模塊與包的關系,可以類比文件和目錄,模塊就是文件。

Python 文檔中這樣描述,一個 Python 文件就是一個模塊,Python 的文件名(不帶后綴.py)就是模塊名。

一個 module 可以包含變量、函數和類,它們是該 module 定義的命名空間的一部分,因此變量的命名問題不是問題,因為兩個不同的模塊可以有同名的變量、函數和類。

包(package)

模塊與包的關系,可以類比文件和目錄,包就是目錄。

package 里面可以有 module,也可以有子包(sub-package)。一個模塊定義一個命名空間,以便變量、函數和類可以在兩個不同的模塊中具有相同的名稱,同樣的,一個包對其組成的包和模塊做同樣的事情,可以通過點號訪問主包中的模塊和包。

一個基本的 package 可以包含 sub-package、modules、__init__.py(Python 3.3 之后非必需)、setup.py。一個可能的 package 結構如下所示:

而 setup.py 存在于你的 package 所在的主目錄中,包含配置信息,如所需的依賴項、腳本和子包。你還可以指定有關 package 的元數據,例如 package 的名稱、作者、描述等。

setup.py 是 pip 用來安裝你的包的文件。

2.import 時發生了什么

先舉一個簡單的例子,比如說同一個目錄有兩個文件,file1.py 和 file2.py,內容很簡單,就打印各自的文件名,不同的是 file2.py 里面 import 了 file1:

#file1.py
print("This is file1.py")
#file2.py
print("This is file2.py")
import file1

運行 file2.py 可以得到下面的結果:

? python file2.py
This is file2.py
This is file1.py

可以看出:

  • import 很直觀,用誰就 import 誰。
  • import 語句就是一個普通的語句,可以放在任何位置。
  • 一個文件被 import 的時候,就會被執行,其內部的類或對象將添加到其命名空間。

我們還要知道 import 的搜索順序,只需要記住一點,那就是 import 會去 sys.path 里面搜索。

比如我在 file2.py 的末尾添加一行代碼:import sys; print(sys.path) 就可以打印 import 的搜索路徑:

可以看出 sys.path 的順序:

  • 會先搜索執行腳本所在的路徑
  • 標準庫
  • 第三方庫 site-packages

關于 sys.path 需要你注意的是:

  • 在解釋器環境下,sys.path[0] 就是解釋器啟動時所在的路徑 ''
  • sys.path 并不會依賴當前程序的工作路徑 - os.getcwd(),僅僅依賴第一個腳本所在的路徑:

  • 如果一個模塊導入另一個模塊,而后者又導入另一個模塊,則第一個模塊的 sys.path 是解釋器搜索第二個導入語句的位置。

一旦模塊或包被找到,就會執行該模塊或包。如果包里面有初始化文件 __init__.py,導入的時候,會先執行 __init__.py。

然后要導入的項目就添加到了其命名空間內,我們可以通過 xx.yy 的方式來使用。

3.什么時候用相對導入,什么時候用絕對導入

先看看什么是絕對導入,所謂絕對導入就是這樣的形式:

import aa
import aa.bb
from aa import bb

這樣的方式很直觀, import 會去 sys.path 查找就行了,如果遇到了 ModuleNotFoundError,思考一下為什么 sys.path 沒有我們要導入的包,或者手動把這個包的路徑插入到 sys.path 中去。

再看看什么是相對導入,所謂相對導入就是這樣的形式:

from . import aa
from .aa import bb
from .. import yy

也就是說相對路徑中有個 . 號,用來表明要導入的模塊或當前的包的相對位置。

舉個例子,我們 pythonimportexample 目錄下新建一個目錄 subpackage1,在 subpackage1 內新建兩個文件 file3.py、file4.py。

內容如下:

file3.py :

print("This is file3.py")

file4.py:

from . import file3
print("This is file4.py")

只要我們直接運行 file4.py,那是一定會報錯的:

Python 提示我們:

ImportError: attempted relative import with no known parent package

也就是說相對導入不知道父包是誰,換句話說,這是一個子包,必須讓父包來調用它,直接運行這個文件是不行的,即使你在 file4.py 的目錄 subpackage1 同級的目錄執行該文件也是不行的,見上圖。

但是在 file4.py 的目錄 subpackage1 同級的目錄作為一個 module 來執行是可以的,如下圖:

換句話說,我們把 subpackage1 作為一個包來讓別人用,相對導入是可以的,比如說我們在目錄 subpackage1 同級的目錄新建一個 file5.py 的文件,內容如下:

file5.py:

from subpackage1 import file4。

然后,執行 python file5.py 可以看出,相對導入已經正常工作:

結論

  • 如果是當做腳本文件直接運行的,使用絕對導入。
  • 如果是當做模塊供其他文件導入,使用相對導入。

4.一個自定義包的例子

先上一個圖來看下目錄及引用結構,方塊的是目錄,橢圓的是文件,曲線是引用:

其中 import_example 目錄下有 setup.py 和 run.py

run.py 導入了 file4、file5、file6。

file4 導入了 file3,file5 導入了 file3。

file6 導入了 file2,file2 導入了 file1。

現在我們來執行一下 run.py 看下效果:

可以看出所有相對導入都已正常工作,雖然 file3 被導入了兩次,但只執行了一次,說明 Python 內部已經考慮了同一個包的多重導入問題。

自定義包就是讓其他文件導入使用的,因此 pythonimportexample目錄下都使用相對導入,源代碼見:

https://gitee.com/somenzz/code-example/tree/master/import_example

點閱讀原文也可以直接訪問。

這里還有一些自定義包的例子:

  • dbinterface[1]
  • transferfile[2]

最后的話

本文分享了什么是模塊(module),什么是包(package),import 的搜索路徑,也分享了相對導入和絕對導入的區別,最后舉了一個非常實用的 import 例子,方便你構建自己的包。

責任編輯:武曉燕 來源: Python七號
相關推薦

2024-08-20 16:27:54

2024-03-07 09:20:16

2024-12-25 15:42:39

視頻數據實時直播

2018-09-13 13:52:08

2024-02-19 00:00:00

Docker輕量級容器

2025-01-14 08:13:11

2024-12-04 08:40:19

2011-02-18 09:56:42

Facebook人才FaceBook

2011-08-08 13:45:58

jQuery

2021-05-10 17:20:55

AIOps開發人員人工智能

2021-09-28 08:31:22

Flex:1 CSSflex屬性

2024-06-24 00:07:00

開源es搜索引擎

2018-09-05 08:59:51

服務器DNS網絡

2021-02-02 10:53:16

Python編程開發

2023-03-06 00:27:02

Kubernetesscheduler系統

2023-03-03 11:12:34

Kubernetes控制器后端

2024-05-28 09:49:42

Python對象函數

2010-08-02 16:56:03

ICMP協議

2023-04-18 14:53:48

2023-04-18 15:09:50

點贊
收藏

51CTO技術棧公眾號

亚洲一区二区网站| 黄色小视频在线播放| 黄色片在线免费看| 久久九九久久九九| 久久精品国产精品青草色艺 | 国产精品一区二区免费看| 37pao成人国产永久免费视频| 成人高清视频在线观看| 95影院理论片在线观看| 亚洲一区二区三| 4438成人网| 蜜桃av噜噜一区| 免费h在线看| 国产精品免费看久久久无码| 欧美一级一区二区| 久久中文在线| 国产精品高清一区二区| 成年人黄视频网站| 55夜色66夜色国产精品视频 | 日韩av综合网站| 亚洲激情在线激情| 国产精品久久夜| 欧美一区一区| 久久精品国产久精国产一老狼| 四虎5151久久欧美毛片| 99国产在线| 国产乱码字幕精品高清av | 高清久久久久久| 亚洲国产婷婷香蕉久久久久久99| 一本色道久久| 国产毛片久久久久久国产毛片| 国产综合视频| 粉嫩av一区二区三区免费观看| 欧美电影三区| 亚洲精品日韩成人| 国产三级精品在线| 成人av一级片| 国产精品888| 日本a级在线| 国产福利一区视频| 久久免费视频在线| 欧美男男青年gay1069videost| 成人台湾亚洲精品一区二区 | 久热这里只精品99re8久| 亚洲国产成人高清精品| 91免费观看视频| 在线精品福利| 黄在线观看网站| 97久久精品人搡人人玩| 久久久久999| 欧美国产日韩xxxxx| 欧美黑人巨大精品一区二区| 色综合色综合久久综合频道88| 91日韩在线专区| 久久这里都是精品| 26uuu精品一区二区| 欧美在线二区| 9国产精品午夜| 在线精品自拍| www.日韩| 欧美r级在线| 原千岁中文字幕| 导航艳情国产电影| 亚洲视频在线观看一区二区三区| 国产视频精品网| 久久6免费高清热精品| 亚洲国产婷婷综合在线精品| 在线精品一区| 成人永久看片免费视频天堂| 日韩理论片中文av| 欧美精品一区二区三区精品| 国产超碰在线播放| 亚洲成人免费在线视频| 91免费看视频| www.欧美| 九色网友自拍视频手机在线| 亚洲社区在线| 濑亚美莉一二区在线视频 | 天堂资源在线亚洲视频| 色综合中文综合网| jizz性欧美2| 黄动漫在线观看| 欧美亚洲视频一区| 亚洲全黄一级网站| 欧美亚洲一区二区三区四区| 亚洲小说欧美另类婷婷| 西瓜成人精品人成网站| 亚洲在线播放| 国产精品无人区| 亚洲精品不卡在线| 91精品天堂| 四色永久网址| 久久久久久久性潮| 精品在线一区二区三区| 91农村精品一区二区在线| 精品久久久视频| 精品日韩在线观看| 久久久久久中文字幕| 国产99在线免费| 香蕉视频禁止18| 国产精品一国产精品| 国产精品久久久久久久久久久不卡 | 欧美精品在线视频观看| 在线观看国产精品日韩av| 亚洲偷欧美偷国内偷| 久热在线中文字幕色999舞| 久久精品人人做人人爽| 91国语精品自产拍在线观看性色 | 竹内纱里奈兽皇系列在线观看 | 婷婷中文字幕综合| 欧美成人hd| 天天干在线影院| 国产91在线高潮白浆在线观看| 国产99久久精品一区二区永久免费| 日韩美女激情视频| 国产美女精品人人做人人爽| 欧美va亚洲va日韩∨a综合色| 青青草国产成人a∨下载安卓| 国产精品99久久久久久有的能看| 亚洲欧美一区二区三区久本道91| 久久久久久久久久久人体| 91看片淫黄大片91| 蜜桃视频动漫在线播放| 国产高清精品网站| 日韩视频免费观看高清完整版| 国产视频不卡| www555久久| 久久国产福利| 日韩一区二区av| 国产在线制服美女| 亚洲小说欧美另类社区| 欧美日韩亚洲综合在线| 国产精品久久亚洲7777| 看电影就来5566av视频在线播放| 欧美性片在线观看| 久久av最新网址| 欧美日韩亚洲视频| 国产欧美亚洲精品| 成人在线小说| 我不卡伦不卡影院| 美女福利一区二区| 超碰公开在线| 狠狠操综合网| 国产欧美日韩中文久久| 亚洲精品自拍视频| 狠狠综合久久av一区二区蜜桃| 久久影院100000精品| 粉嫩一区二区三区在线看| 欧美人牲a欧美精品| 亚洲一区二区三区xxx视频| 国产小黄视频| 国产一区高清| 日韩成人精品在线| 欧美性猛交xxxx久久久| 国产精品久久久久久久久久| 午夜国产一区二区三区| 国产精品偷伦一区二区 | 日韩av片免费在线观看| 中文字幕中文字幕在线中一区高清| 日本一区二区三区在线观看| 亚洲色欲色欲www| 亚洲a在线视频| 91综合久久| 国产精品资源网站| 中文字幕在线不卡视频| 午夜视频在线观看一区| 制服丝袜激情欧洲亚洲| 国产亚洲精品91在线| 国产精品久久久久久久久久免费| 青青草原国产免费| 国产日韩一区二区三区在线播放| 久久免费国产视频| 自拍偷自拍亚洲精品被多人伦好爽| 国产综合久久久久影院| 日韩午夜小视频| 亚洲一区二区三区视频| 国产精品狼人色视频一区| 亚洲在线免费视频| 91成人伦理在线电影| 国产在线一区二区三区欧美| 欧美视频在线播放一区| 日韩欧美黄色大片| 免费看成年人视频在线观看| 成年人在线免费观看| 欧美国产日韩电影| av亚洲一区| 一本色道久久精品| 国产高清不卡一区| 亚洲最快最全在线视频| 亚洲精品视频二区| 日韩欧美国产电影| 日韩久久免费av| 成人免费在线播放视频| 亚洲第一激情av| 久久香蕉精品香蕉| 欧美mv日韩mv国产网站| 欧美高清激情视频| 日韩wuma| 亚洲**毛片| 日韩中文字幕在线看|