我想看看在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()
.
任何使用当前目录的解决方案都将失败,根据调用脚本的方式或者可以在运行的脚本中更改它,可能会有所不同.
我正在玩Python的导入系统,以便更好地理解它是如何工作的,我遇到了另一个问题.我有以下结构
pkg/
__init__.py
c.py
d.py
subpkg/
__init__.py
a.py
b.py
Run Code Online (Sandbox Code Playgroud)
在里面a.py
我有以下代码:
from . import b
from .. import d
Run Code Online (Sandbox Code Playgroud)
在里面c.py
我有以下内容:
import subpkg.a
Run Code Online (Sandbox Code Playgroud)
现在我收到以下错误:
ValueError:尝试相对导入超出顶级包
但为什么呢?我该如何解决?我c.py
从IDLE 运行,pkg
应该被认为是一个包,因为它有__init__.py
文件.
第一个导入工作正常,但它是以下不起作用:
from .. import d
Run Code Online (Sandbox Code Playgroud)
因为我试图从父包中导入一些东西,但显然我不能,因为一些奇怪的原因.