庄稼人不是專職python開發的道友。盡管與python相識已多年,可惜相識不相知,僅僅是偶爾借助pydev寫一些簡單的小工具。
多年來。一直困惑於這樣一個問題:相同的project。相同的代碼,使用pydev能夠執行隨意一個python腳本,而使用命令行執行卻不行?命令行下(或者雙擊執行)總是提示“ImportError: No module named xxx”?pydev到底做了什么魔術呢?
長話短說,以上面project為例,假設是在命令行中直接執行 python c.py , 都會提示"ImportError: No module named xx_package.b".可是pydev中能夠直接執行。
比較兩者的包查找路徑,也就是sys.path。
pythondev:
['F:\\Archive\\workspace-java\\PyExperiment\\xx_package', 'F:\\Archive\\workspace-java\\PyExperiment', 'F:\\Archive\\workspace-java\\PyExperiment\\xx_folder' 。。
。。]
命令行:
['F:\\Archive\\workspace-java\\PyExperiment\\xx_package', 。。。]
什么都不用說了,明眼人一看就明確了。pydev在執行時會把當前project的全部文件夾路徑都作為包的搜索路徑,而命令行默認僅僅是搜索當前路徑。也於是乎。xx_package也就不可能會被找到。由於它是在上一級文件夾中。
明確了這一點,剩下的就非常easy了,要在命令行中運行c.py, 或者改動sys.path, 將上一級文件夾也包括進去。只是個人不喜歡。
比較簡單的方式還是統一腳本的運行路徑是project的根文件夾,即每次都在project根文件夾下新建一個腳本,比方叫main.py。
它什么也不做,僅僅是將c.py導入進來。僅此而已。
main.py
import xx_package.c
試試,這樣就能夠正常在命令行中執行了,當然雙擊腳本也是也一樣的
另外。補充兩點。
1. 與shell等腳本不同。 python的搜索路徑。是第一個運行的腳本所在的路徑。而不是當前命令行窗體中提示的路徑
PyExperiment \ xx_package >python c.py,
PyExperiment > pthon xx_package/c.py
對python來說,搜索路徑都是c.py所在的路徑PyExperiment \ xx_package
2. 假設某個目錄是純粹的目錄。不是python意義上的包。如上面實例project中的xx_folder,
那么能夠直接在命令行中執行c.py. 由於導入b.py時不須要指出查找xx_folder, 詳細能夠參看久遠前的一篇文章