如何调用多个文件夹中的python文件?

像这样:

-- src
    |-- mod1
    |   `-- m1.py
    |-- mod2
    |   `-- m2.py
    |-- mod3
    |   `-- m3.py
    |-- mod4
    |   `-- m4.py

我在执行 m4.py 时需要导入 mod2 文件夹下的 mod2.py 以及 mod3 文件夹下的 mod3.py, 每个小文件夹里都建了 __init__.py 文件。

开始我用 from mod2 import m2 ,from mod3 import m3 来导入,但报错,说没有 mod2 这个 module,然后我在网上查了,改成用

import sys
sys.path.append('F:\\xxx\\mod2')
import m2

这样可以导入
但是我不止导入一个,所以我在下面跟着写了:

import sys
sys.path.append('F:\\xxx\\mod3')
import m3

结果报错说没有 module named m3
我就不知道怎么搞了,importfrom import 的解释 看来看去我都晕了

请大神不吝赐教!!!

阅读 5.6k
3 个回答

在src目录下,写一个__init__.py内容如下

from .mod1 import m1
from .mod2 import m2
from .mod3 import m3
from .mod4 import m4

如果你的文件夹不打包的话,m4.py添加两行代码就行,如下

import sys
sys.path.append('../../')
from src import m2
from src import m3

如果打包发布,就不需要前两行代码了,当让src要跟你的包名还有你的根文件名一致

先回答题主代码中的2个问题:

  1. import引入的是包(package),而不是文件夹,Python中如果一个文件夹内存在__init__.py文件时,这个文件夹会被当成是一个包,而非普通的文件夹。
  2. sys.path.append的意思是将这个路径添加到Python解释器的查询路径之中,可以认为是另一种import,但这种方式不如上一种方式来的直接。

综上,建议楼主为每个文件夹添加__init__.py文件,有时间再仔细阅读一遍基础文档。

试一下:在Python安装目录下创建一个.pth文件,名字叫什么无所谓,比如叫src.pth。在这个文件中加入你的src目录,比如是F:\pythonProject\src。Python会按照这个文件中的路径来搜索你的自定义模块。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题