从 _json 导入... - python

1 投票
2 回答
1840 浏览
提问于 2025-04-15 21:56

我正在查看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浏览器

撰写回答