做用是:把xxx.py文件當作模塊啓動
可是我一直不明白當作模塊啓動到底有什麼用。python xxx.py和python -m xxx.py有什麼區別!html
自問自答:python
這是兩種加載py文件的方式:
1叫作直接運行
2至關於import,叫作當作模塊來啓動git
下面來看一下sys.pathshell
>>> import sys >>> sys.path ['', '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', ...]
上面的內容我只截取了一段。此爲當前python解釋器運行的環境,python解釋器會在這些目錄下去尋找依賴的庫!
註解一點:' '爲當前目錄
***ruby
下面有兩個例子,經過不一樣方式啓動同一文件,sys.path屬性的值有何不一樣。bash
# run.py 內容以下 import sys print(sys.path)
# 直接啓動:python run.py test_import_project git:(master) ✗ python run.py ['/Users/sx/Documents/note/test_py/test_import_project', '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', ...]
# 以模塊方式啓動:python -m run.py test_import_project git:(master) ✗ python -m run.py ['', '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
*** 細心的同窗會發現,區別就是在第一行。
直接啓動是把run.py文件,所在的目錄放到了sys.path屬性中。
模塊啓動是把你輸入命令的目錄(也就是當前路徑),放到了sys.path屬性中***ide
# 目錄結構以下 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 <module> 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', ...]
當須要啓動的py文件引用了一個模塊。你須要注意:在啓動的時候須要考慮sys.path中有沒有你import的模塊的路徑!
這個時候,究竟是使用直接啓動,仍是以模塊的啓動?目的就是把import的那個模塊的路徑放到sys.path中。你是否是明白了呢?ui
摘自:http://www.cnblogs.com/softidea/p/5119923.htmlidea