将模块从子文件夹导入到python3x中的其他子文件夹

时间:2020-09-18 11:01:14

标签: python-3.x

我的项目具有以下目录结构:

Project
 |
 +-- __init__.py
 |
 +-- run.py
 |    
 +-- dir1
 |  | 
 |  +-- __init__.py 
 |  +-- module1.py
 |    
 +-- dir2
 |  | 
 |  +-- __init__.py 
 |  +-- module2.py

我想将一些在module1中定义的功能导入到module2中。最终来自module2的功能被导入到主脚本run.py中。

我尝试将以下行放在module2.py中:

from ..module1 import something

然后当我尝试做时:

python3 run.py

python3 -m run.py

我收到此错误:

ValueError: attempted relative import beyond top-level package

所有__init__.py文件均为空

如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您应该尝试这个

from dir1.module1 import your_function
from dir2.module2 import your_second_function

这应该可以完成工作!

答案 1 :(得分:0)

您需要将PYTHONPATH设置为根项目文件夹(在您的示例中为Project)。 这样可以确保无论您在哪里启动python脚本,无论在哪里放置模块,都可以将其作为PYTHONPATH文件夹中的相对路径进行访问。

另一种方法是将项目根目录添加到sys.path中,例如sys.path.insert(0, 'path_to_root'),但这需要在导入所有模块之前在所有脚本中执行此操作。

设置后,您就可以使用任何脚本执行操作(即使它们不在Project的子文件夹中)

from dir1.module1 import *