使用子模块时,模块可以与包本身具有相同的名称吗?

普罗旺斯

抱歉,标题令人困惑,我将在这里尝试使用更详细的说明来解释该问题。

目前,我有一个包名称,例如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

非常感谢你的帮助。

塔德格·麦克唐纳(Tadhg McDonald-Jensen)

把我的三个评论放在一个答案中:

首先,让我解释一下使用现有模块的相对导入,如果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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

模块和接口可以具有相同的名称吗?

Laravel 中可以有子模块吗?

Git:可以在多个项目中使用相同的子模块工作副本吗?

Git:自动提交具有相同消息的子模块

多个模块可以具有相同的模块类型吗?如何组织它们及其接口文件?

有什么方法可以使用python脚本安装所有以与任何特定模块名称相关的相同名称开头的模块吗?

必须的angular模块具有与angularJS本身相同的版本

导入名称与包相同的模块

使用“ git submodule foreach”可以跳过子模块列表吗?

python如何处理具有相同名称的模块和包?

Sonarqube:“代码”部分中(多模块项目的)所有子模块的名称相同

从包中导入只有一个公共成员的子模块时,避免名称重复

循环遍历所有子模块列表时避免使用子模块

回购可以递归子模块吗?

带有子模块导入的名称空间

如何对git子模块使用相同的协议?

如何区分具有相同名称的类型和模块?

具有相同名称的 Angular 延迟加载模块组件

具有相同名称的模块和类

Python:导入具有相同名称的不同模块

属性和功能具有相同名称的模块声明

Python:具有相同名称的模块和文件

Haskell中是否可以有子模块?

有效地从包的许多子模块中导入名称

具有子模块和功能的Python模块

为什么带有子模块的模块和具有冲突名称的功能为何起作用?

带有内置库名称的子模块是一种好的样式吗?

导入名称空间和子模块都有不利之处吗?例如import React,{Component} from ...

签出分支时可以使git自动更新子模块吗?