命令行運行python模塊時提示包找不到的問題


庄稼人不是專職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, 詳細能夠參看久遠前的一篇文章

python最簡單直接的自己定義模塊導入方法




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM