在另一个子包中的模块内导入模块的Python方法

3

我遇到了一个问题,无法从另一个模块中导入模块。我知道这句话可能令人困惑,所以我的问题和情况与此处建议的一样:Python相对导入script两级目录

假设我的目录结构如下:

main_package
 |
 | __init__.py
 | folder_1
 |  | __init__.py
 |  | folder_2
 |  |  | __init__.py
 |  |  | script_a.py
 |  |  | script_b.py
 |
 | folder_3
 |  | __init__.py
 |  | script_c.py

我希望能够从script_a.py访问script_b.py和script_c.py中的代码。

我已经按照答案所建议的使用绝对导入方式进行了操作。

我在script_a.py中包含了以下代码:

from main_package.folder_3 import script_c
from main_package.folder1.folder2 import script_b

当我运行script_a.py时,出现以下错误:
ModuleNotFoundError: No module named 'main_package'

这里我做错了什么?
1个回答

3
这是因为python不知道在script_a.py中如何找到main_package。有几种方法可以让python找到main_package
  1. run script_a.py from main_package's parent directory (say packages). Python will look for it in the current directory (packages), which contains main_package:

    python main_package/folder_1/folder_2/script_a.py
    
  2. add main_package's parent directory (packages) to your PYTHONPATH:

    export PYTHONPATH="$PYTHONPATH:/path/to/packages"; python script_a.py
    
  3. add main_package's parent directory (packages) to sys.path in script_a.py

    In your script_a.py, add the following at the top:

    import sys
    sys.path.append('/path/to/packages')
    

方法python main_package/folder_1/folder_2/script_a.py不会将main_package的父目录添加到sys.path中,因此它无法正常工作,您将会得到ModuleNotFoundError错误。一个更好的替代方法是使用:python -m main_package.folder_1.folder_2.script_a - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接