Python 2.7 使用子模块时,模块是否可以与包本身同名?
很抱歉,如果标题令人困惑,我将尝试在这里用更详细的描述来解释这个问题 目前,我有一个包名,比如说DummyPackage。DummyPackage包含三个具有函数、类等的模块。因此目录结构如下所示:Python 2.7 使用子模块时,模块是否可以与包本身同名?,python-2.7,packages,python-module,package-structuring,Python 2.7,Packages,Python Module,Package Structuring,很抱歉,如果标题令人困惑,我将尝试在这里用更详细的描述来解释这个问题 目前,我有一个包名,比如说DummyPackage。DummyPackage包含三个具有函数、类等的模块。因此目录结构如下所示: project_dir/ __init__.py DummyPackage/ __init__.py Module1/ __init__.py module_x.py module
project_dir/
__init__.py
DummyPackage/
__init__.py
Module1/
__init__.py
module_x.py
module_y.py
Module2/
__init__.py
module_z.py
import DummyPackage
from DummyPackage.Module1.module_x import method_x
DummyPackage.new_method
method_x
因此,从模块导入方法如下所示
from DummyPackage.Module1.module_x import method_x
from DummyProject import new_method
我们正在向项目中添加新内容,我想创建一个名为DummyProject的模块,它应该像这样可导入
from DummyPackage.Module1.module_x import method_x
from DummyProject import new_method
我认为,只添加文件DummyPackage.py就足够了,但显然不行。我试图将它添加到项目_dir/dir和DummyPackage/dir中,但两者都不起作用
是因为名字冲突吗?有可能有这样的代码吗
import DummyPackage
from DummyPackage.Module1.module_x import method_x
DummyPackage.new_method
method_x
非常感谢您的帮助。在回答中加入我的三点意见: 首先让我解释一下如何使用您已有的模块,如果您想从
模块y
导入模块x
,您可以执行以下操作:
模块_y.py
from .module_x import method_x
或者类似地,在模块_z.py中
from ..Module1.module_x import method_x
因此,根据您的DummyProject
在包中的位置,您可能只需要这些
至于第二部分,是的,可以有如下(可运行)代码:
project_dir/
__init__.py
DummyPackage/
__init__.py
Module1/
__init__.py
module_x.py
module_y.py
Module2/
__init__.py
module_z.py
import DummyPackage
from DummyPackage.Module1.module_x import method_x
DummyPackage.new_method
method_x
在本例中,您似乎希望new_method
成为包级别变量。引述:
除了将目录标记为Python包并定义\uuuuu all\uuuuuu
,\uuuu init\uuuuuuuuu.py
允许您在包级别定义任何变量。
如果您想要一个真实的示例,我强烈建议您查看标准库中的json/\uuuu init\uuuu.py
的源代码
或者,作为一个示例,为了能够从软件包中直接导入方法x
,您只需将其添加到顶层\uuuuuuu init\uuuuuuuuuy
:
from .Module1.module_x import method_x
然后,从导入包的任何文件可以执行以下操作:
import DummyPackage
DummyPackage.method_x
(虽然很明显,您会根据您放置
DummyProject
的位置为new\u方法
执行此操作)将我的三条评论放在一个答案中:
首先让我解释一下如何使用您已有的模块,如果您想从模块y
导入模块x
,您可以执行以下操作:
模块_y.py
from .module_x import method_x
或者类似地,在模块_z.py中
from ..Module1.module_x import method_x
因此,根据您的DummyProject
在包中的位置,您可能只需要这些
至于第二部分,是的,可以有如下(可运行)代码:
project_dir/
__init__.py
DummyPackage/
__init__.py
Module1/
__init__.py
module_x.py
module_y.py
Module2/
__init__.py
module_z.py
import DummyPackage
from DummyPackage.Module1.module_x import method_x
DummyPackage.new_method
method_x
在本例中,您似乎希望new_method
成为包级别变量。引述:
除了将目录标记为Python包并定义\uuuuu all\uuuuuu
,\uuuu init\uuuuuuuuu.py
允许您在包级别定义任何变量。
如果您想要一个真实的示例,我强烈建议您查看标准库中的json/\uuuu init\uuuu.py
的源代码
或者,作为一个示例,为了能够从软件包中直接导入方法x
,您只需将其添加到顶层\uuuuuuu init\uuuuuuuuuy
:
from .Module1.module_x import method_x
然后,从导入包的任何文件可以执行以下操作:
import DummyPackage
DummyPackage.method_x
(虽然很明显,您会根据您放置
DummyProject
的位置,为new\u方法
执行此操作)如果您将DummyProject.py
添加到DummyPackage
文件夹中,您将使用import DummyPackage.DummyProject
导入它,您不会吗?或者如果您是从module_x.py
中导入它,您将使用from..DummyProject import new_方法
查看以获取详细信息。或者,如果您愿意的话new_method
要成为包级变量,您只需将DummyProject.py
添加到DummyPackage
文件夹中,就可以使用import DummyPackage.DummyProject
导入它。或者,如果您是从module_x.py
中导入它,您将使用from..DummyProject导入新的\u方法
有关详细信息,请参阅。或者,如果您希望新的\u方法
成为包级别的变量,您只需执行以下操作:我尝试将导入添加到DummyPackage/\uuuuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuy.py,并且它可以按预期工作,非常感谢您虽然这只有在您了解import DummyPackage
真正导入DummyPackage/\uuuu init\uuuuuuuu.py
import json之后才明显;打印(json.\uuuu file\uuuu)
我尝试将导入添加到DummyPackage/\uuuuu init\uuuuuuuuuuuuuuuuu.py中,并按预期工作,非常感谢您的回答!)虽然这只有在您了解import DummyPackage
真正导入DummyPackage/\uuuu init\uuuuuuuu.py
import json之后才明显;打印(json.\uuuuu文件)