`from six.moves import urllib`在Python中做什么?

Dim*_*ims 22 python

我在Python代码中找到了以下行:

from six.moves import urllib
Run Code Online (Sandbox Code Playgroud)

同时,我可以在urllib.py任何地方找到.我发现six.py包root 中有一个文件,里面有文件class Module_six_moves_urllib(types.ModuleType):.

是这个吗?这是如何定义的?

UPDATE

对不起,我是Python新手,问题是Python语法.我了解到,之后的import是没有py扩展名的Python文件名.那么,在这种情况下这个文件在哪里?

kar*_*son 45

six是一个有助于编写与Python 2和Python 3兼容的代码的包.

开发人员在为Python2和3编写代码时遇到的一个问题是标准库中的几个模块的名称已经改变,即使功能保持不变.

six.moves模块以Python2和3的通用名称提供这些模块(主要通过以Python 3模块的名称提供Python2模块).

所以你的路线

from six.moves import urllib
Run Code Online (Sandbox Code Playgroud)

进口urllib时Python3运行和进口的混合物urllib,urllib2urlparse用Python2,模仿Python3的结构urllib.另见这里.

编辑以解决问题的更新:

TLDR; urllib在这种情况下,导入的模块与文件系统上的文件之间不一定存在直接关系.相关文件正是six.__file__指向的内容.

第三方模块在列出的文件/目录中定义sys.path.大多数情况下,您可以通过检查__file__相关模块的属性来找到导入模块的文件的名称,例如six.__file__.然而,six.moves事情并不那么简单,正是因为暴露的模块实际上可能不会将一对一映射到实际的Python模块,而是黑客的版本.