模块文件属性是绝对属性还是相对属性?

我在理解\uuuu文件时遇到困难。据我所知,\uuuuuu file\uuuuu返回加载模块的绝对路径

我产生这个问题:我有一个带有一条语句的abc.py,从/d/projects/python abc.py返回abc.py。从/d/运行将返回projects/abc.py。有什么原因吗

从文件中:

\uuuuu file\uuuu是从中加载模块的文件的路径名(如果模块是从文件加载的)。对于静态链接到解释器的C模块,\uuuuuu文件\uuuu属性不存在;对于从共享库动态加载的扩展模块,它是共享库文件的路径名

从邮件列表线程中,通过@kindall链接到问题的注释:

我没有试图重新解释这个例子,但原因是
我们不想在每次导入时都调用getpwd(),我们也不想
希望有某种进程内变量来缓存当前
目录(getpwd()相对较慢,有时会失败
直接的,并且试图缓存它有一定的出错风险。)

相反,我们所做的是site.py中的代码,它遍历
sys.path并将它们转换为绝对路径。但是,此代码可以运行
在将“”插入sys.path的前面之前,使
sys.path的值为“”

对于其余部分,请考虑 sys .PATH >不包括 ' .<

因此,如果您在包含模块的sys.path部分之外,您将获得一个绝对路径。如果您在包含模块的sys.path部分中,您将得到一个相对路径

如果在当前目录中加载模块,而当前目录不在sys.path中,则会得到一个绝对路径

如果在当前目录中加载模块,并且当前目录位于sys.path中,则会得到相对路径

发表评论