我在Python代码中找到了以下行:
from six.moves import urllib
同时,我可以在任何地方找到urllib.py
。我发现包root中有一个文件six.py
,里面有class Module_six_moves_urllib(types.ModuleType):
。
更新
抱歉,我是Python新手,问题是Python语法。我了解到,import
之后的是没有py
扩展名的Python文件名。那么,在这种情况下这个文件在哪里?
答案 0 :(得分:36)
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
的结构。另请参阅here。
编辑以解决问题的更新:
TLDR;在这种情况下,导入的模块urllib
与文件系统上的文件之间不一定存在直接关系。相关文件正是six.__file__
所指向的。
第三方模块在文件/目录中定义
列于sys.path
。大多数情况下,您可以通过检查相关模块的__file__
属性来找到导入模块的文件名,例如: six.__file__
。然而,对于six.moves
而言,事情并不那么简单,正是因为暴露的模块实际上可能不会将一对一映射到实际的Python模块,而是黑客的版本。