【问题标题】:Importing a module from an upper directory within a package when the package is imported from another place从其他地方导入包时,从包内的上层目录导入模块
【发布时间】:2011-11-17 17:18:19
【问题描述】:

我有一个项目遇到问题。

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 包,它的init 文件位于/kreveik/kreveik/__init__.py 那里,它开始导入包中需要的其他工具,并在包classes,我导入了我最常用的类,梦想着我能够通过它们在层次结构中相对于文件夹/kreveik/kreveik/的位置来访问它们,但是在文件/kreveik/kreveik/classes/network.py中调用包classes 失败,好像它不在项目目录的最顶层。等级制度。我计划联系我所有的班级,将它们称为classes.baseclasses.SomeClass(),与我在项目中的位置无关。我哪里做错了?

谢谢 PS。我知道有类似的条目解决了这个问题,但我找不到可以帮助我的条目。

【问题讨论】:

    标签: python packaging


    【解决方案1】:

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

    在本例中,在 network.py 中,使用

    from kreivik.classes import *
    

    【讨论】:

    • 这行得通,但 PyDev (Eclipse) 认为这是非法的。
    • 我没有使用PyDev,所以看不到问题。如果指定import kreivik.classes会怎样?
    猜你喜欢
    • 2017-10-05
    • 2015-12-22
    • 2018-04-05
    • 1970-01-01
    • 2016-01-15
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    相关资源
    最近更新 更多