python模块相对路径引用错误处理

python模块相对路径引用错误处理

python的相对地址导入包一直是个让人头疼的事。

比如你想从process.py里导入父文件夹里的setting.py

1
2
3
4
5
├─ settings.py
│ __init__.py

├─analysis
│ process.py

不就from .. import settings吗,结果就报了奇怪的错

1
2
3
4
>>> from .. import settings
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: attempted relative import beyond top-level package

参考了StackOverflow上的高赞回答,其实解决方法也很简单,在import之前加上这两句:

1
2
3
import sys
sys.path.append("..")
import setting # 直接导入父目录下的模块

意思是,把父目录添加到环境变量中,就可以直接import模块了。

不过有时候启动的位置不是当前文件的同级目录,可能还会报错,那就需要再加上这两句设置运行目录为当前文件所在的目录。

1
2
import os
os.chdir(os.path.dirname(__file__))

因此导入模块最万无一失的方法就是:

1
2
3
4
5
import os
import sys
os.chdir(os.path.dirname(__file__))
sys.path.append("..")
import settings

python模块相对路径引用错误处理

https://blog.luzy.top/posts/3276205951/

作者

江风引雨

发布于

2020-09-04

更新于

2020-09-08

许可协议

CC BY 4.0

评论