關於Python包和跨模組程式碼呼叫,讓你徹底搞清楚

二哥出品,必是精品。歡迎關注評論和交流。

無論是用Python做自動化測測試還是用Python做開發,都會有自己特定的工程目錄,而在每一個工程目錄下面存放的就是一個個包,包裡面放得就是模組。那麼他們之間如何呼叫才會實現程式碼之間的交流無阻礙呢?

很多朋友可能會說,這無外乎就三種方法嗎?有什麼可以討論的呢。其實,不然。

│ README。md│ requirements。txt│ setup。py│ __init__。py│├─bin│ foo。py│ __init__。py│├─conf│ settings。py│ __init__。py│├─docs│ refer。txt│ __init__。py│└─foo │ main。py │ __init__。py │ └─tests test1。py test_main。py __init__。py

以上圖所示的程式碼結構為例。

test1。py如何呼叫test_main。py的方法呢?foo。py如何呼叫conf。py裡面的方法呢?

同一層級下模組匯入

from test_main import test_fun1from test_main import *import test_main

關於Python包和跨模組程式碼呼叫,讓你徹底搞清楚

關於Python包和跨模組程式碼呼叫,讓你徹底搞清楚

關於Python包和跨模組程式碼呼叫,讓你徹底搞清楚

似乎就是這樣的簡單,這三種方式都是可以的呀!

咳咳。說明一下。

當模組在同一層級目錄下的時候,的確是用這樣的就可以實現的。

比較推薦from test_main import test_fun1的方式,可以同時匯入多個模組或者方法。

但是,當目錄結構比較複雜的時候,就需要考慮更多一些了,下面我們就來看一看。

包(Package)

當你的模組檔案越來越多,就需要對模組檔案進行劃分,比如把負責跟資料庫互動的都放一個資料夾,把與頁面互動相關的放一個資料夾。

像上面這樣,一個Foo下多個模組檔案,這個資料夾就被稱為包。

一個包就是一個資料夾,該資料夾下必須存在__init__檔案,可以為空,標識當前資料夾是一個包。

這個__init__的檔案主要是用來對包進行一些初始化的,噹噹前這個 package被別的程式呼叫時, __init__。py檔案會先執行。

__init__。py一般為空,一些你希望只要 package被呼叫就立刻執行的程式碼可以放在裡面,一會後面會演示。

當在setup。py中import conf的時候,會出現以下結果,即conf的__init__。py被執行了。

關於Python包和跨模組程式碼呼叫,讓你徹底搞清楚

跨模組匯入

接著上面的目錄結構來看,setup。py如何呼叫main。py裡面的配置呢?

根據上面的結構,如何實現在bin下的foo。py中匯入conf。py的資料呢?

直接匯入的話,會報錯,說找到不模組。

關於Python包和跨模組程式碼呼叫,讓你徹底搞清楚

方法一,新增絕對路徑到環境變數中。

問題:多個地方匯入時會很麻煩,同時代碼無法移植,別人在其他電腦上維護程式碼時,沒有相同路徑就會報錯的,所以不推薦。

#!/usr/bin/env pythonimport sysbase_dir = “D:/python/python_210710/Foo”sys。path。append(base_dir)from conf import settingsdef foo_page(): print(“——-foo page————-”) print(settings。data)foo_page()

方法二 ,利用os。path獲取路徑。

#!/usr/bin/env pythonimport sys,osbase_dir = os。path。abspath(os。path。dirname(os。path。dirname(__file__)))sys。path。append(base_dir)from conf import settingsdef foo_page(): print(“——-foo page————-”) print(settings。data)foo_page()

方法三 ,程式入口為setup。py。

1、在setup。py中from bin import foo

2、在bina下的foo。py中from conf import settings

3、程式從setup。py啟動

具體展示

關於Python包和跨模組程式碼呼叫,讓你徹底搞清楚

conf的資料

關於Python包和跨模組程式碼呼叫,讓你徹底搞清楚

foo。py中from conf import settings

關於Python包和跨模組程式碼呼叫,讓你徹底搞清楚

setup。py中from bin import foo

此時,在foo。py中讀取資料的時候,就不需要加環境變量了,這也是官方推薦的一種方法。歡迎嘗試。

關於Python包和跨模組程式碼呼叫,讓你徹底搞清楚