将Python模块提升到包命名空间中

7 投票
1 回答
587 浏览
提问于 2025-04-16 09:33

如果我有这样的文件夹结构:

package/
    __init__.py
    functions.py      #contains do()
    classes.py        #contains class A()

我想要能够调用

import package as p

我该如何让functionsclasses里的内容可以像这样访问:

p.do()
p.A()

而不是:

p.functions.do()
p.classes.A()

把文件分开只是为了方便(让合作更简单),但我更希望所有内容都在同一个命名空间里。

1 个回答

15

你可以在 __init__.py 文件里这样做(因为当你使用 import package 时,就是在导入这个文件):

from package.functions import *
from package.classes import *

不过,import * 几乎总是个坏主意,这并不是个例外。相反,很多包会明确导入一些常用的名字,比如:

from package.functions import do
from package.classes import A

这样也可以直接使用 doA,但这样做不容易出现名字冲突和其他使用 import * 时可能遇到的问题。

撰写回答