所以我想知道,此时我正在读一本关于Python的书。这本书解释了以下内容:
导入算法
要真正了解命名空间包,我们有 深入了解
import
操作在3.3中是如何工作的。 在导入期间,Python仍然遍历每个目录 模块搜索路径sys.path
,与3.2及更早版本一样。
我的问题是:当未导入sys时,python如何能够遍历sys.path
。另外,如果python能够在没有导入的情况下看到sys
来迭代sys.path
,为什么我们需要在代码中导入sys
?
>>> sys
NameError: name 'sys' is not defined.
>>> import sys
>>> sys
<module 'sys' (built-in)>
答案 0 :(得分:1)
没有矛盾。 Python的sys
模块公开将import
的行为修改为Python端的搜索路径配置,但即使不在Python代码中导入sys
,解释器也是如此了解自己的配置。
在以下CPython source code中,评论为
/* _PyMem_SetDefaultAllocator() is needed to get a known memory allocator,
since Py_SetPath(), Py_SetPythonHome() and Py_SetProgramName() can be
called before Py_Initialize() which can changes the memory allocator. */
这意味着负责设置模块搜索路径的Py_SetPath()
可以在任何Python代码被解释之前很早就执行(例如,import
语句),在解释器自己的内存分配器接管之前,它需要自己的内存分配器。
当Python解释器的main()
函数运行时,it can already read使用Py_GetPath()
的路径配置,如果需要调用内部函数_PyPathConfig_Init()
,这是安全的在解释器准备好执行Python代码之前。