![](/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.