首页 > 解决方案 > 从另一个导入的文件导入文件

问题描述

我有以下目录结构:

base_folder
    methods_folder
        method_1.py
        method_2.py
        .
        .
        .
        method_n.py
        class_methods.py
    top_class.py
    

class_methods.py导入同一目录中的其他文件,如下所示:

from method_1 import method_1
from method_2 import method_2
.
.
.
from method_n import method_n

(obs:这些methods文件有一个方法,里面有自己的文件名)

如果我class_methods.py自己跑,没问题。但是,如果我尝试运行top_class.py导入class_methods.py,则会收到错误消息no module named method_1

因此,在执行时top_class.py,它看不到methods_folder/. 为什么?

标签: pythonrelative-import

解决方案


运行 python 脚本的推荐方法是使用-m根包父级的开关 - 所以在你的情况下:

$ cd base_folder
$ python -m top_class

Python 会自动将 base_folder 添加到它的 sys.path 中,你不需要做任何 sys.path/PYTHOPATH 黑客攻击——这些黑客攻击会用样板文件使代码膨胀,并且会在最意想不到的时候崩溃。

现在运行 class_methods 的正确方法也是

$ cd base_folder
$ python -m methods_folder.class_methods

但随后的导入class_methods应修改为绝对值:

from methods_folder.method1 import method1
...

或亲戚:

from .method1 import method1
...

推荐阅读