我在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中导入urlliburllib2urlparse的混合物,从而模仿Python3的urllib的结构。另请参见here

编辑以解决问题的更新:

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

第三方模块在以下文件/目录中定义:
sys.path 中列出。大多数时候,您可以通过检查相关模块的__file__属性来找到从中导入模块的文件的名称,例如six.__file__。但是,使用six.moves并没有那么简单,恰恰是因为公开的模块实际上可能不是一对一地映射到实际的Python模块,而是被黑化的模块。

关于python - `from six.moves import urllib`在Python中做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34989206/

10-12 19:46