2016-03-02 85 views
1

如果标题混乱,我很抱歉,我会尽力在这里解释一下更详细的描述。使用子模块时,模块是否与包装本身具有相同的名称?

目前,我有一个包名称让我们说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/dir和DummyPackage/dir,但都不起作用。

是因为名称冲突吗?有没有可能有这样的代码?

import DummyPackage 
from DummyPackage.Module1.module_x import method_x 

DummyPackage.new_method 
method_x 

非常感谢您的帮助。

+0

如果您将'DummyProject.py'添加到'DummyPackage'文件夹中,那么您将使用'import DummyPackage.DummyProject'来导入它吗? –

+0

或者如果您是从'module_x.py'内导入它的,您可以使用'from..DummyProject import new_method'参见[文档](https://docs.python.org/2/tutorial/modules.html#intra -package-references)的细节。 –

+0

或者如果你想'new_method'是一个包级变量,你只需要[添加一些代码到你的'__init __。py'](http://stackoverflow.com/a/18979314/5827215) –

回答

0

把我的三点意见在回答中:

首先让我使用你已经拥有的这些模块解释relative imports,如果你想导入module_xmodule_y你可以这样做:

module_y.py

from .module_x import method_x 

或类似地在module_z.py

from ..Module1.module_x import method_x 

所以根据你的位置DummyProject在包Intra-package References可能是你所需要的。

至于第二部分是有可能有(可运行)这样的代码:

import DummyPackage 
from DummyPackage.Module1.module_x import method_x 

DummyPackage.new_method 
method_x 
在这种情况下,它看起来像你想 new_method是在封装级变量

。引述this great answer

除了标注目录作为一个Python包和定义__all____init__.py让你在包级别定义的任何变量。

我强烈建议考虑看看的源代码json/__init__.py标准库,如果你想要一个真实的例子。

或作为您的设置为例,能够导入method_x直接从你只需要把它添加到顶层__init__.py包:

from .Module1.module_x import method_x 

然后从任意文件中导入包你可以做到这一点:

import DummyPackage 

DummyPackage.method_x 

(虽然很明显,你会根据你的地方 DummyProjectnew_method做到这一点) 0
+0

我试图添加导入到DummyPackage/__ init__.py,它的工作原理如下,非常感谢您的答案! :) – jprochaz

+0

[应该有一个 - 并且最好只有一个 - 明显的方式来做到这一点。](https://www.python.org/dev/peps/pep-0020/)虽然这只是一次明显的理解'import DummyPackage'确实导入了'DummyPackage/__ init __。py' –

+0

'import json;打印(JSON .__文件__)' –

相关问题