Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 使用子模块时,模块是否可以与包本身同名?_Python 2.7_Packages_Python Module_Package Structuring - Fatal编程技术网

Python 2.7 使用子模块时,模块是否可以与包本身同名?

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

很抱歉,如果标题令人困惑,我将尝试在这里用更详细的描述来解释这个问题

目前,我有一个包名,比如说DummyPackage。DummyPackage包含三个具有函数、类等的模块。因此目录结构如下所示:

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文件)