按照官方的解釋,加-m選項(xiàng)是以模塊的方式執(zhí)行拟烫,那么到底是什么意思呢弥鹦?
首先我們來看下這段簡單的測試代碼:
#!/usr/bin/python
import sys
print sys.path
我們把這個(gè)文件放在/home/hank/下面疆前,然后在根目錄下分別執(zhí)行:
hank@ubuntu:/$ pwd
/
hank@ubuntu:/$ python /home/hank/test.py
['/home/hank', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
hank@ubuntu:/$ python -m /home/hank/test.py
/usr/bin/python: Import by filename is not supported.
hank@ubuntu:/$ python -m /home/hank/test
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
注意寒跳,當(dāng)我們使用-m選項(xiàng)的時(shí)候,一般使用模塊名即可竹椒,系統(tǒng)自動(dòng)在后面補(bǔ)齊*.py的后綴童太。另外,注意sys.path的輸出,在加了“-m”選項(xiàng)之后书释,sys.path包含了當(dāng)前目錄翘贮。那么這會(huì)帶來什么樣的效果呢鞠眉,且看下面的代碼:
package1/__init__.py
? ? ? ? ? ? ? mod1.py
package2/__init__.py
? ? ? ? ? ? ? ?run.py
run.py的代碼如下:
#!/usr/bin/python
import sys
from package1 import mod1
print sys.path
分別帶“-m”執(zhí)行和不帶“-m”執(zhí)行run.py腳本士葫,結(jié)果如下:
hank@ubuntu:~$ python -m package2/run['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
hank@ubuntu:~$ python? package2/run.py? Traceback (most recent call last):? File "package2/run.py", line 3, infrom package1 import mod1
ImportError: No module named package1
可以看到不帶“-m”選項(xiàng)執(zhí)行時(shí),由于sys.path不包含當(dāng)前目錄箩退,所以當(dāng)執(zhí)行from package1 import mod1會(huì)搜不到package1這個(gè)包扯再。