从 _json 导入... - python
我正在查看Python 3.1的JSON模块,现在在文件夹/Lib/json/scanner.py里。在这个文件的顶部,有这么一行:
from _json import make_scanner as c_make_scanner
这个模块的目录里有五个.py文件:__init__
(前后都有两个下划线,这个是加粗的格式),还有decoder、encoder、scanner和tool。这里面没有叫“json”的文件。
我想问的是:在导入的时候,“make_scanner”到底是从哪里来的呢?
是的,我对Python非常陌生!
2 个回答
6
这个内容是关于一个用C语言编译的文件,叫做_json.pyd
(在不同的平台上可能是_json.so
等)。这个文件存放在sys.path
的其他地方。你可以通过自己导入这个模块,查看它的__file__
来找到具体位置,比如:
>>> import _json
>>> _json.__file__
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/_json.so'
就像你看到的,在我使用的Python 2.6版本中,_json
来自于lib/python2.6/lib-dynload
这个子目录,而在这个平台上使用的扩展名是.so
。
1
这可能是来自一个文件,也可能是内置的。在Windows系统上,它似乎是内置的。
Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import _json
>>> _json.__file__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '__file__'
而且没有看到 _json.pyd
或 _json.dll
这样的文件。
如果你想查看源代码,你电脑上有没有这个二进制文件都没关系——你需要使用SVN浏览器。