兩種方式啟動:
python ***.py -----直接執行的方式啟動(此時指令碼__name__為"__main__")
python -m ***.py ------以模組的方式啟動(此時指令碼的__name__屬性值依然不再是"__main__"而是"***")
不同的載入py檔案的方式,主要是影響——sys.path 這個屬性。sys.path 就相當於liunx中的path
列表裡的''表示當前目錄,命令執行的目錄
直接啟動是把run.py檔案,所在的目錄放到了sys.path屬性中。
模組啟動是把你輸入命令的目錄(也就是當前路徑),放到了sys.path屬性中
# 目錄結構如下
package/
__init__.py
mod1.py
package2/
__init__.py
run.py
檔案內容如下
# run.py 內容如下
import sys
from package import mod1
print(sys.path)
結果如下
# 直接啟動(失敗)
➜ test_import_project git:(master) ✗ python package2/run.py
traceback (most recent call last):
file "package2/run.py", line 2, in from package import mod1
importerror: no module named package
# 以模組方式啟動(成功)
➜ test_import_project git:(master) ✗ python -m package2.run
['',
'/usr/local/cellar/python/2.7.11/frameworks/python.framework/versions/2.7/lib/python27.zip',
...]
python m引發的對模組的認識
python m 以模組的方式執行 在檔案內部,我們一般通過下面的 來區分當前指令碼,是作為模組匯入,還是作為指令碼直接執行。if name main print 模組直接執行 當檔案作為指令碼直接執行時,這段 會產生 輸出字串 模組直接執行 當檔案作為模組被匯入時,不會產生 不輸出字串 模組直接執...
python模組匯入與模組包匯入
main.py程式第一次匯入指定檔案mod.py時,執行 找到模組檔案mod.py 編譯成位元組碼 可選 執行.pyc位元組碼,建立mod.py中定義的物件。匯入模組後,模組物件會被儲存在sys.modules的表中。每次匯入時,若此表中已存在相關模組,以上3步會被跳過。1.搜尋模組檔案 按順序 程...
python 匯入模組
最近開始學習python,遇到一些匯入模組的問題,花了幾分鐘終於琢磨明白了,給初學者介紹幾種型別 一 test sys test1 nv1.py nv2.py nv1.py 如下 classdog defadd self a,b self.a a self.b b c self.a self.b r...