Python从模块子目录导入所有内容

2 投票
3 回答
5545 浏览
提问于 2025-04-17 10:45

我想从一个子目录中导入所有文件,所以我想在那个子目录里写一个 __init__.py 文件来导入这些文件。但是,当我这么做的时候,似乎什么都没有被导入。

文件结构:

prog.py
module/
    __init__.py
    code.py

prog.py 的代码: pass

__init__.py 的代码: import code

code.py 的代码: print('hello')

当我运行 prog.py 的时候,什么都没有发生。为什么没有打印出 hello,有没有更好的方法可以轻松导入子目录中的所有内容?

3 个回答

2

假设你有这样的文件结构:

prog.py
module/
    __init__.py
    code.py

那么使用 import module 这个命令会导入 module/__init__.py 里的代码。而如果你使用 import module.code 或者 from module import code,那么就会导入 module/code.py 里的代码,并且在本地会用 "module.code" 或者 "code" 这个名字来引用它。

4

如果你有以下这种结构:

package
  __init__.py
  module.py

__init__.py 文件里,你可以尝试这样做:

import package.module

或者这样做:

from . import module

这样一来,如果 package 在你的 PYTHONPATH 里,你就能得到预期的效果:

>>> import package
hello
3

把这个放在 prog.py 文件里:

import module

Python 只会加载那些你已经导入的包或模块。

要让它正常工作,你可能还需要参考 jcollado 的回答。

撰写回答