从其他位置导入包时,从包中的上层目录导入模块

时间:2011-11-17 17:18:20

标签: python packaging

我有一个项目,我遇到了问题。

kreveik.
|-- classes
|   |-- baseclasses.py
|   |-- family.py
|   |-- __init__.py
|   `-- network.py
|-- family
|   |-- __init__.py
|   `-- killer.py
`-- genetic
    `-- __init__.py

这是该项目的相关部分。回溯向我解释了我在代码中尝试做的事情。

/home/mali/workspace/kreveik/<ipython-input-7-ec5770ffbdf2> in <module>()
----> 1 import kreveik

/home/mali/workspace/kreveik/kreveik/__init__.py in <module>()
----> 1 import classes
      2 import numpy as num
      3 import matplotlib.pyplot as plt
      4 import network
      5 import probes

/home/mali/workspace/kreveik/kreveik/classes/__init__.py in <module>()
      9 import copy
     10 from baseclasses import ProbeableObj,Ensemble,Element
---> 11 from network import TopologicalNetwork,Motif,Network
     12 from family import Family
     13 

/home/mali/workspace/kreveik/kreveik/classes/network.py in <module>()
      3 """
      4 
----> 5 import classes
      6 import numpy as num
      7 import matplotlib.pyplot as plt

ImportError: No module named classes

我在目录/kreveik中打开一个交互式python会话,然后我尝试导入kreveik包,它的初始文件位于/kreveik/kreveik/__init__.py那里,它开始导入包中需要的其他工具,在包classes中,我导入了我最常用的类,梦想着我能够通过它们在层次结构中相对于文件夹/kreveik/kreveik/的位置来访问它们。文件/kreveik/kreveik/classes/network.py对包classes的调用失败,就好像它不在项目目录的最顶层。层次结构。我打算将我的所有课程称为classes.baseclasses.SomeClass(),而不管我在项目中所称的位置。我哪里做错了?

由于 PS。我知道帽子有类似的条目解决这个问题,但我找不到可以帮助我的那个。

1 个答案:

答案 0 :(得分:1)

从子包导入时,您还必须引用封闭包。

在此示例中,在network.py中,使用

from kreivik.classes import *