抱歉,标题令人困惑,我将在这里尝试使用更详细的说明来解释该问题。
目前,我有一个包名称,例如DummyPackage。DummyPackage包含具有功能,类等的三个模块。因此目录结构如下所示:
project_dir/
__init__.py
DummyPackage/
__init__.py
Module1/
__init__.py
module_x.py
module_y.py
Module2/
__init__.py
module_z.py
所以从模块导入方法看起来像这样
from DummyPackage.Module1.module_x import method_x
我们正在向项目中添加新内容,我想创建一个名为DummyProject的模块,该模块应该像这样可导入
from DummyProject import new_method
我以为,仅添加文件DummyPackage.py就足够了,但是显然不是。我试图将其添加到project_dir /目录和DummyPackage /目录中,但均不起作用。
是因为名字冲突吗?是否可以有这样的代码?
import DummyPackage
from DummyPackage.Module1.module_x import method_x
DummyPackage.new_method
method_x
非常感谢你的帮助。
把我的三个评论放在一个答案中:
首先,让我解释一下使用现有模块的相对导入,如果module_x
要从中导入,module_y
可以执行以下操作:
module_y.py
from .module_x import method_x
或类似地在module_z.py中
from ..Module1.module_x import method_x
因此,根据您DummyProject
在包装中位置的不同,您可能需要包装内参考。
至于第二部分,可以有这样的(可运行的)代码:
import DummyPackage
from DummyPackage.Module1.module_x import method_x
DummyPackage.new_method
method_x
在这种情况下,您似乎想new_method
成为包级变量。引用这个好答案:
除了将目录标记为Python软件包并定义之外
__all__
,还__init__.py
允许您在软件包级别定义任何变量。
json/__init__.py
如果您想要一个真实的例子,我强烈建议您看一下标准库中的源代码。
或以您可以method_x
直接从包中导入的设置为例,您只需将其添加到顶层__init__.py
:
from .Module1.module_x import method_x
然后从导入包的任何文件中可以执行以下操作:
import DummyPackage
DummyPackage.method_x
(尽管显然您会new_method
根据您放置的位置进行操作DummyProject
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句