1. 問題
在pycharm里面編寫python代碼,引用了自己的模塊。在pycharm里面沒顯示異常,但在終端(命令行)執行時顯示no module named xxx(引用的自己的模塊)
為什么在pychrarm里就沒問題,到終端就找不到了呢?
ImportError: No module named 'xxx'
2. 解決思路
-
當解釋器遇到 import 語句,如果模塊在當前的搜索路徑就會被導入。搜索路徑是一個解釋器會先進行搜索的所有目錄的列表。
-
當你導入一個模塊,Python 解析器對模塊位置的搜索順序是:
-
當前目錄
-
如果不在當前目錄,Python 則搜索在 shell 變量 PYTHONPATH 下的每個目錄。
-
如果都找不到,Python會察看默認路徑。
模塊搜索路徑存儲在 system 模塊的 sys.path 變量中。變量里包含當前目錄,PYTHONPATH和由安裝過程決定的默認目錄。
-
-
可以想到pycharm的sys.path和系統默認的是不是有什么區別?
-
查看系統的sys.path(在Python Console輸入)
import sys print(sys.path)
-
查看pycharm的sys.path(在pycharm中新建py文件並執行)
import sys print(sys.path)
-
比較兩者的輸出可以發現:
Pycharm的默認路徑包含 Project 目錄,而終端的輸出不包含。也就解釋了為什么在 pycharm 里面可以執行,在 terminal 終端里面就會出現 no module name xxx的錯誤。
-
3. 解決方案一(永久)
-
在 site-packages 文件中增加 Pycharm 文件路徑。(windows)
cd C:\Users\UserName\AppData\Local\Programs\Python\Python38\Lib\site-packages
-
修改(或新建)pycharm.pth
C:\Users\UserName\PycharmProjects // 在里面加上你的項目目錄
4. 解決方案二(暫時)
- 在引用你的模塊的時候在前面添加
import sys sys.path.append('你的項目名稱')
5. 測試
我反正測試成功,能在終端正常執行了。-_-