国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python導入模塊時遇到的錯誤分析

2020-02-16 02:11:32
字體:
來源:轉載
供稿:網友

當遇到無法導入某個python模塊時,可能會是沒有安裝某個模塊,也有可能是某模塊在加載過程中失敗,也有可能是陷入了循環導入的問題。本文詳細解釋了這個問題。

1. 模塊未安裝或者路徑不對

ImportError: No mudule named myModule

有兩種可能,一是該模塊沒有安裝,一般可以用

pip install %module_name%

來解決。注意有時候模塊安裝包名并不等于要導入的模塊名。這種情況下可以通過pip search | list命令來嘗試找到正確的包。

另一種情況就是包雖然安裝了,但當前運行的程序加載的路徑有錯。python運行時將從以下位置嘗試加載python modules:

* 當前目錄

* 環境變量$PYTHONPATH所指示的值,這是一個由“:”分隔的字符串,各個子字符串都是文件系統的一個路徑。

* 標準庫目錄,如dist-site-packages下的模塊。

* 在.pth文件中指定的路徑,如果存在.pth文件的話。

可以使用以下方式來查看python運行時的包含路徑:

import sysprint(sys.path)

在運行出錯的腳本裝頭部加上這一段代碼,然后在控制臺中查看打印出來的python類庫路徑,檢查安裝包是否已包含在上述路徑中。

***可以通過下面的方式將未包含在路徑中的模塊臨時包含進來:***

sys.path.append("path/to/module")

另外,還可以在shell窗口中查看當前的python包含路徑:

echo $PYTHONPATH

2. 無法導入已存在的模塊

如果要導入的模塊包含了native代碼,并且native代碼加載(初始化)失敗時,就會導致這種錯誤。使用ssl, gevent等涉及native的模塊時,如果對應的native程序并未安裝,則會出現這樣的錯誤。

另一種錯誤情況是,使用相對路徑導入時,父模塊還未導入成功。見下面的代碼:

main.pymypackage/  __init__.pymymodule.pymyothermodule.py

mymodule.py如下所示:

#!/usr/bin/env python3# Exported functiondef as_int(a):  return int(a)# Test function for module def _test():  assert as_int('1') == 1if __name__ == '__main__':  _test()

以及myothermodule代碼如下所示:

#!/usr/bin/env python3from .mymodule import as_int# Exported functiondef add(a, b):  return as_int(a) + as_int(b)# Test function for module def _test():  assert add('1', '1') == 2if __name__ == '__main__':  _test()

如果執行mypackage/myothermodule,則會報以下錯誤:

Traceback (most recent call last):
 File "myothermodule.py", line 3, in <module>
   from .mymodule import as_int
SystemError: Parent module '' not loaded, cannot perform relative import
[這篇文章](#Relative imports in Python 3)給出了更詳細的解答。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 惠来县| 惠州市| 江口县| 洛南县| 宝兴县| 蒲江县| 南昌县| 礼泉县| 扶绥县| 哈密市| 禹州市| 宁国市| 牙克石市| 津南区| 八宿县| 和林格尔县| 江北区| 延庆县| 博兴县| 章丘市| 保山市| 惠东县| 炉霍县| 鄂州市| 郁南县| 府谷县| 盐亭县| 雷波县| 什邡市| 邵武市| 永吉县| 山西省| 青州市| 布尔津县| 金山区| 永顺县| 临洮县| 浑源县| 寿光市| 新巴尔虎右旗| 炉霍县|