![](/img/trans.png)
[英]from six.moves import urllib ImportError: No module named six.moves
[英]What does `from six.moves import urllib` do in Python?
我在 Python 代碼中發現了以下行:
from six.moves import urllib
同時,我可以在任何地方找到urllib.py
。 我發現包根目錄下有一個文件six.py
,里面有class Module_six_moves_urllib(types.ModuleType):
是這個嗎? 這是如何定義的?
更新
抱歉,我是 Python 新手,問題是關於 Python 語法的。 我了解到, import
之后是沒有py
擴展名的 Python 文件名。 那么,在這種情況下,這個文件在哪里?
six是一個有助於編寫與 Python 2 和 Python 3 兼容的代碼的包。
開發人員在為 Python2 和 3 編寫代碼時面臨的問題之一是標准庫中的幾個模塊的名稱發生了變化,盡管功能保持不變。
six.moves
模塊以 Python2 和 3 的通用名稱提供這些模塊(主要是通過在 Python 3 模塊的名稱下提供 Python2 模塊)。
所以你的線
from six.moves import urllib
使用 Python3 運行時導入urllib
並使用 Python2 導入urllib
、 urllib2
和urlparse
的混合,模仿 Python3 的urllib
的結構。 另見此處。
編輯以解決問題的更新:
TLDR; 在這種情況下,導入的模塊urllib
和文件系統上的文件之間不一定有直接關系。 相關文件正是six.__file__
指向的內容。
第三方模塊在sys.path
中列出的文件/目錄中定義。 大多數情況下,您可以通過檢查相關模塊的__file__
屬性找到導入模塊的文件名,例如six.__file__
。 然而,對於six.moves
,事情並不那么簡單,正是因為暴露的模塊實際上可能不會一對一地映射到實際的 Python 模塊,而是這些模塊的黑客版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.