【发布时间】:2011-04-12 17:32:39
【问题描述】:
我想看看在 Python 中确定当前脚本目录的最佳方法是什么。
我发现,由于调用Python代码的方式很多,很难找到一个好的解决方案。
这里有一些问题:
-
如果使用
exec、execfile执行脚本,则未定义__file__ -
__module__仅在模块中定义
用例:
./myfile.pypython myfile.py./somedir/myfile.pypython somedir/myfile.py-
execfile('myfile.py')(来自另一个脚本,可以位于另一个目录中,并且可以有另一个当前目录。
我知道没有完美的解决方案,但我正在寻找解决大多数情况的最佳方法。
最常用的方法是os.path.dirname(os.path.abspath(__file__)),但如果您从另一个使用exec() 的脚本执行脚本,这真的不起作用。
警告
任何使用当前目录的解决方案都会失败,这可能会根据调用脚本的方式而有所不同,也可以在运行脚本中进行更改。
【问题讨论】:
-
您能否更具体地了解您需要知道文件的来源? - 在导入文件的代码中(包含感知主机)还是在导入的文件中? (有自我意识的奴隶)
-
如果您使用的是 python 3.4 或更高版本,请参阅 Ron Kalian 的
pathlib解决方案:stackoverflow.com/a/48931294/1011724 -
所以解决方案不是在代码中使用任何当前目录,而是使用一些配置文件?
-
有趣的发现,我刚刚做了:当从 shell 执行
python myfile.py时,它可以工作,但在 vim 中的:!python %和:!python myfile.py都失败了 系统找不到指定的路径。这很烦人。任何人都可以评论这背后的原因和潜在的解决方法吗?
标签: python pythonpath dirname