簡單來講,模組是乙個包含python定義和語句的檔案,包是一種通過用「帶點號的模組名」來構造 python 模組命名空間的方法。
詳細可以參考廖雪峰的:python教程-模組
使用的python版本:3.7.0
平台:win10
假如在main.py中呼叫pack.mod1.py中的函式func1,而func1又呼叫pack2.mod2.py中的func2函式,各個檔案中的**如下:
main.py:
importsysprint("
file:{},sys.path:{}
".format(__file__
, sys.path))
from pack1 import
mod1
if__name__ == "
__main__":
mod1.func1()
pack1/mod1.py:
from pack2 importmod2
deffunc1():
print("
this is pack1.mod1")
mod2.func2()
pack2/mod2.py:
def進入test_mod目錄,執行命令:func2():
print("
this is pack2.mod2
")
python main.py輸出:
file:main.py,sys.path:['d:\\1-work\\python_src\\test_mod
',
'可以看出sys.path中的第乙個元素,就是main.py所在的目錄,因為包pack1和pack2都在這個目錄下,所以它們能夠互相發現。', '
', '',
'', '
', '']
this
ispack1.mod1
this
is pack2.mod2
假如這個時候,你想單獨除錯一下pack1.mod1.func1函式,將mod1.py修改如下:
import sysprint(
"file:{},sys.path:{}
".format(__file__, sys.path))
from pack2 import mod2進入pack1目錄執行:def func1():
print(
"this is pack1.mod1")
mod2.func2()
if __name__ == "
__main__":
func1()
python mod1.py輸出如下:
file:mod1.py,sys.path:['d:\\1-work\\python_src\\test_mod\\pack1
',
'發現sys.path的第乙個路徑已經是test_mod/pack1了,在這個目錄下面直譯器無法找到pack2這個包。', '
', '
', '
', '
', '']
traceback (most recent call last):
file
"mod1.py
", line 3, in
from pack2 import
mod2
modulenotfounderror: no module named
'pack2
'
如果需要發現這個包,按照python搜尋路徑的規則,需要將test_mod這個目錄加入到sys.path中,一般來說可以:
使用最後一種辦法,將pack1.mod1.py修改為:
import結果輸出:sys"d:\\1-work\\python_src\\test_mod"
)print("
file:{},sys.path:{}
".format(__file__
, sys.path))
from pack2 import
mod2
deffunc1():
print("
this is pack1.mod1")
mod2.func2()
if__name__ == "
__main__":
func1()
file:mod1.py,sys.path:['為什麼使用絕對路徑呢,因為如果使用相對路徑的話,當前工作路徑一變就不行了,不信在test_mod目錄執行d:\\1-work\\python_src\\test_mod\\pack1
', '
', '
', '
', '
', '
', '
', '
d:\\1-work\\python_src\\test_mod
']
python pack1/mod1.py或者用vscode等文字編輯器開啟test_mod目錄,然後直接f5執行,工作目錄就是test_mod,而不是pack1,這個時候新增的」../」路徑就會變成目錄python_src。
所以一切的關鍵還是模組搜尋路徑。
回到解決方式上面,或者將專案的路徑加到pythonpath環境變數,或者寫入.pth並放在搜尋路徑中才是一勞永逸的方式。
(1) python3文件-模組
(2) 廖雪峰:python教程-模組
(完)
python跨目錄呼叫
本文介紹pyhton的跨目錄呼叫問題。在python中有時候我們需要呼叫另一.py檔案中的方法或者類。如果該.py檔案與當前檔案位於同一目錄下那麼問題非常容易解決。如果兩個.py檔案位於不同的目錄下就比較麻煩。下面分別介紹如下 1.兩個.py檔案位於同一目錄下 假設兩個.py檔案分別為test1.p...
python 跨目錄呼叫檔案
如果呼叫檔案與被呼叫檔案在同乙個目錄下,則可以非常方便的呼叫。如果呼叫檔案與被呼叫檔案不在同乙個目錄下,如下圖結構所示,應該如何呼叫呢?project1 module1 function1.py test test.py如果test.py想要呼叫function1.py,可以使用絕對路徑。impor...
Python模組 跨目錄 呼叫總結
系統模組呼叫 說到模組呼叫,大家應該都對import有個基本的了解,在專案裡面非常常見的比如import time,from selenium import webdriver等,我們經常在python中通過from import import 的語法可以引用一些系統模組,把系統模組引入後就可以呼叫...