从阅读stackoverflow,我发现__file__
是加载模块的文件的路径名,如果它是从文件加载的
这行代码有什么理由吗?
os.path.abspath(__file__)
文档说明
os.path.abspath(path)
Return a normalized absolutized version of the pathname path.
abspath()
在这种情况下会提供任何值吗?
答案 0 :(得分:4)
我确信它会为希望了解代码运行路径,没有符号链接,pathname/../otherpath
奇怪或abspath()
解决的其他问题的人提供价值。另请参阅os.path.normpath()
的文档。可以想象这两者是不同的。
值得注意的是,这可能与os.path.realpath()
不同,后者返回“指定文件名的规范路径,消除了路径中遇到的任何符号链接(如果操作系统支持它们)。”
有趣的结果:在我的OS X系统上,我的~/Dropbox
层次结构中的文件夹(位于我的标准文件系统中)符号链接到~/Library/Application Support
中的另一个文件夹为Sublime Text提供插件文件。当我从Sublime运行测试程序时,我得到以下结果:
__file__ = /Users/MattDMo/Dropbox/Sublime/ST3_Mac/Packages/tk_test.py
abspath(__file__) = /Users/MattDMo/Dropbox/Sublime/ST3_Mac/Packages/tk_test.py
realpath(__file__) = /Users/MattDMo/Library/Application Support/Sublime Text 3/Packages/tk_test.py
但是,从终端(~Library/Application Support/Sublime Text 3/Packages
内)运行会产生:
__file__ = tk_test.py
abspath(__file__) = /Users/MattDMo/Library/Application Support/Sublime Text 3/Packages/tk_test.py
realpath(__file__) = /Users/MattDMo/Library/Application Support/Sublime Text 3/Packages/tk_test.py
将终端中的目录更改为~/Dropbox/Sublime/ST3_Mac/Packages
对结果没有任何影响。很有意思......