从文档中:
__file__是从中加载模块的文件的路径名(如果它是从文件加载的)。__file__对于静态链接到解释器的C模块,该属性不存在。对于从共享库动态加载的扩展模块,它是共享库文件的路径名。
从@kindall链接的邮件列表线程中,对该问题进行评论:
我没有尝试对这个特定示例进行复制,但是原因是我们不想在每次导入时都调用getpwd(),也不想拥有某种进程内变量来缓存当前目录。(getpwd()相对较慢,有时可能会完全失败,并且尝试对其进行缓存有一定的错误风险。)
相反,我们要做的是
site.py中的代码,该代码遍历sys.path的元素并将其转换为绝对路径。但是,此代码在将’‘插入sys.path的开头之前运行,因此sys.path的初始值为。
对于其余的内容,请考虑
sys.path不包括’‘。
因此,如果您不在
sys.path包含模块的那一部分内,那么您将获得一条绝对路径。如果您位于sys.path包含模块的那一部分内,则会得到一个相对路径。
如果您在当前目录中加载模块,而当前目录不在中
sys.path,则将获得绝对路径。
如果将模块加载到当前目录中,并且当前目录位于中
sys.path,则将获得相对路径。



