这似乎是一个新手问题,但事实并非如此。一些常见的方法并不适用于所有情况:
这意味着使用 path = os.path.abspath(os.path.dirname(sys.argv[0]))
,但是如果您从另一个 Python 脚本运行另一个目录,这可能发生在现实生活中。
这里的意思是使用path = os.path.abspath(os.path.dirname(__file__))
,但是我发现这样不行:
py2exe
没有 __file__
属性,但是有 a workaround execute()
没有 __file__
属性NameError: global name '__file__' is not defined
答案不完整的相关问题:
我正在寻找一种通用解决方案,它适用于上述所有用例。
这是一个测试用例的结果:
python a.py
的输出(在 Windows 上)a.py: __file__= a.py
a.py: os.getcwd()= C:\zzz
b.py: sys.argv[0]= a.py
b.py: __file__= a.py
b.py: os.getcwd()= C:\zzz
#! /usr/bin/env python
import os, sys
print "a.py: sys.argv[0]=", sys.argv[0]
print "a.py: __file__=", __file__
print "a.py: os.getcwd()=", os.getcwd()
print
execfile("subdir/b.py")
#! /usr/bin/env python
import os, sys
print "b.py: sys.argv[0]=", sys.argv[0]
print "b.py: __file__=", __file__
print "b.py: os.getcwd()=", os.getcwd()
print
C:.
| a.py
\---subdir
b.py
最佳答案
首先需要从inspect
和os
from inspect import getsourcefile
from os.path import abspath
接下来,无论您想从哪里找到源文件,只需使用
abspath(getsourcefile(lambda:0))
https://stackoverflow.com/questions/2632199/