我在我的當前目錄C:\test
中有一個python腳本foo.py
。爲什麼使用-m選項調用模塊將sys.path [0]設置爲空字符串?
這是代碼。
import sys
print('sys.path:', sys.path)
print('sys.argv:', sys.argv)
當我將它作爲腳本執行時,我看到了這個輸出。
C:\test>python foo.py
sys.path: ['C:\\test', 'C:\\Windows\\system32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages']
sys.argv: ['foo.py']
但是,當我作爲一個模塊執行它,我看到這個輸出。
C:\test>python -m foo
sys.path: ['', 'C:\\Windows\\system32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages']
sys.argv: ['C:\\test\\foo.py']
爲什麼sys.path[0]
在我作爲模塊執行程序時變成了空字符串?
在http://docs.python.org/3.4/library/sys.html#sys.path的文檔中提到的:
如在程序啓動時,該列表的第一項, 路徑初始化[0],是含有用來 調用的Python腳本的目錄翻譯。如果腳本目錄不是 可用(例如,如果解釋器是交互式調用的,或者 腳本是從標準輸入讀取的),則path [0]是空字符串, 指示Python首先搜索當前目錄中的模塊。
因此,如果腳本目錄不可用,那麼只能假設將sys.path[0]
設置爲''
。但在我的情況下,即使執行python -m foo
,腳本目錄foo
顯然是可用的。所以它不應該根據文檔設置sys.path[0]
到''
。相反,它應該將其設置爲'C:\\test'
。
它是文檔中的錯誤還是Python解釋器中的錯誤或我理解中的錯誤?
你從哪裏看到空串?在這兩種情況下,'sys.path'都有一個*非空*第一個元素。區別在於它是否包含完整或相對路徑。 – Bakuriu
@Bakuriu你在哪裏看到一個非空的第一個元素?您在此輸出中看不到空字符串:'sys.path:['','C:\\ Windows \\ system32 \\ python34.zip','C:\\ Python34 \\ DLLs','C :\\ Python34 \\ lib','C:\\ Python34','C:\\ Python34 \\ lib \\ site-packages']'? –
Touchè。讀取輸出時,我誤讀了'sys.path'的'sys.argv'。 – Bakuriu