有没有办法解决 __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.py
和file1.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 笔记本和控制台中。
我有一个具有这种结构的包
framework/
__init__.py
file0.py
file1.py
file2.py
file3.py
我希望能够将其导入为 import framework
,但我无法那样做,只有 from framework import *
有效,而且没有自动完成功能。 file0.py
和file1.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 笔记本和控制台中。