所以我想知道,此时我正在读一本关于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)>发布于 2018-02-23 11:28:13
没有矛盾。Python的sys模块将修改import行为的搜索路径配置公开给Python端,但是即使没有在Python代码中导入sys,解释器也知道自己的配置。
在下面的CPython源代码中,注释如下:
/* _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()函数时,它已经可以读了使用Py_GetPath()进行路径配置,在必要时调用内部函数_PyPathConfig_Init(),在解释器准备好执行Py_GetPath()代码之前就可以安全地执行。
https://stackoverflow.com/questions/48945739
复制相似问题