我试图使用
module_1
文件将一些功能(module_2
,MyProject
,...)打包到一个大包(__init__.py
)中。问题是,我无法使用具有依赖项的函数(从同一文件夹内的其他 python 脚本导入的函数)。
这是我的目录结构的示例:
+MyProject
|-__init__.py
|-run_everything.py
|
|-+ module_1
| |-__init__.py
| |-run_module.py
| |-script_1.py
| |-script_2.py
|
|-+ module_2
| |-....
|
|-+ module_3
| |-....
run_module.py
仅导入同一目录/模块中 script_1.py
、script_2.py
中的函数。
只要我分别从每个
run_module.py
运行 module_1, 2,...
,它们就可以正常工作。但是,如果我尝试将“run_module”导入到run_everything.py
中,我将从子模块内导入的模块中获得ModuleNotFoundError
。
我已经查看了堆栈(而且不仅仅是),据我了解,我应该使用以下方法之一,但在我的情况下不起作用:
1.
__init__.py
里面module_1
:
import script_1
import script_2
内部进口
run_everything.py
:
import module_1
import module_2
...
我得到:
import script_1.py
ModuleNotFoundError: No module named 'script_1.py'
据我了解,显式导入 module_1 中
__init__.py
内的所有脚本应该使它们可用,那么为什么会出现错误?
2. 如果我使用干净的
__init__.py
文件,但在我的 run_everything.py
文件中添加点符号,也会发生同样的错误:
import module_1.script_1
import module_1.script_2
...
我知道这还应该导入 script_1、script_2... 中导入的所有内容?
3. 我也尝试使用:
from module_1.run_module import function()
有同样的错误,但由于它依赖于其他函数,这并不奇怪。
我想要实现的是使用
run_module.py
中的函数start(),如下所示:
import module_1
...
module_1.run_module.start()
此功能正在使用同一文件夹内
script_1
、script_2
中的其他功能。
我知道我可以通过操作系统路径进行导入,但由于
__init__.py
存在,我想使用它。
您需要将 script_1 和 script_2 中的函数导入到
run_module.py
,并用点
示例
# run_module.py
from .script_1 import func1
from .script_2 import func2
def start ():
func1()
func2()
然后在
__init__.py
里面module_1
:
from .run_module import start
终于到了
run_everything.py
:
from module_1 import start
start()
并且:
python3 run_everything.py