我想看看在 Python 中确定当前脚本目录的最佳方法是什么。
我发现,由于调用Python代码的方式很多,很难找到一个好的解决方案。
这里有一些问题:
__file__
如果使用 exec
执行脚本,则未定义 execfile
__module__
仅在模块中定义用例:
./myfile.py
python myfile.py
./somedir/myfile.py
python somedir/myfile.py
execfile('myfile.py')
(来自另一个脚本,可以位于另一个目录中,并且可以有另一个当前目录。我知道没有完美的解决方案,但我正在寻找解决大多数情况的最佳方法。
最常用的方法是 os.path.dirname(os.path.abspath(__file__))
但是如果你用 exec 从另一个执行脚本,这真的不起作用()
.
任何使用当前目录的解决方案都会失败,这可能会根据调用脚本的方式而有所不同,也可以在正在运行的脚本中进行更改。
最佳答案
os.path.dirname(os.path.abspath(__file__))
确实是你能得到的最好的。
使用 exec
/execfile
执行脚本并不常见;通常你应该使用模块基础设施来加载脚本。如果您必须使用这些方法,我建议在您传递给脚本的 globals
中设置 __file__
以便它可以读取该文件名。
没有其他方法可以在执行代码中获取文件名:正如您所注意到的,CWD 可能位于完全不同的位置。
https://stackoverflow.com/questions/3718657/