有没有办法解决 __init__.py 的导入问题?

Is there a way to solve import issues with __init__.py?

我有一个具有这种结构的包

framework/
    __init__.py
    file0.py
    file1.py
    file2.py
    file3.py

我希望能够将其导入为 import framework,但我无法那样做,只有 from framework import * 有效,而且没有自动完成功能。 file0.pyfile1.py是类,其他只有函数。 但是,当我在外部目录中对我正在处理的文件手动执行此操作时,自动完成工作

from framework import file0
from file0 import *
# and so on for the others

这是我的__init.py__

from framework.file0 import file0
from framework.file1 import file1
from framework.file2 import *
from framework.file3 import *

我试过

from framework import file0
from file0 import *
# and so on for the others

__init.py__ 但它没有解决问题,自动完成仍然不起作用,除非我将它们放在另一个目录中我正在处理的实际文件中。我希望它能够在 import framework
上工作 有办法吗?
提前致谢。我是新手,所以任何建议都将不胜感激。

__init__.py 想要的是 from .file0 import file0,或者您想要从 file0.py 导入的任何内容。

请参阅 Python 文档中的 Package relative imports

但是,我认为将包中的所有内容导入 __init__.py 是不明智的。如果你这样做,每次你试图从那个包中导入任何东西时,它都会被加载到 python 中。假设您想将 from framework.file0 import SomeClass 放入其他包中,而 class 就是您需要的 framework。如果您导入 __init__py 中的所有内容,您将在每次触摸该包时加载所有内容,因为访问该包时总是加载 __init__.py

如果您想要一种从包中导入所有内容的方法,也许您应该将其放入另一个文件中,例如 all.py,然后执行 from framework import all as framework?

按照惯例,__init__.py留空。

然后在需要导入完整包(包含所有文件)的脚本文件中,将其放在顶部,这样就可以了。

import framework

如果你出于某种原因只想导入一个模块,比如说framework.file0,你可以使用

import framework.file0

就自动完成而言,这种方法对我有用,在 JupyterLab 笔记本和控制台中。