从包的{in,out}侧导入

时间:2009-11-23 15:48:28

标签: python import

我有一个项目,我建立在一个我并行构建的库上。结构如下:

project/
  main.py
  MyLibrary/
    __init__.py --> empty
      Module1.py --> contain the class Class1
      Module2.py --> contain the class Class2
      Module3.py --> contain the class Class3
      ...

我需要将Class2类导入Class1.py,如果我这样做

from Module1 import Class1

没关系。但是在project / main.py中我做了

from MyLibrary import Module1

我得到了ImportError:没有模块名称Module1

我可以通过替换:

解决问题
from Module1 import Class1

通过

from .Module1 import Class1

但是后来我再也无法运行Module1.py了(Python抱怨我试图对非包装产生相对影响......)。我需要进行测试。

我如何才能在两种情况下都能导入?

感谢您的关注!

编辑:第一个描述的解决方案似乎适用于我的Linux桌面,但不适用于我的Windows Xp powerred笔记本电脑。这很奇怪......

1 个答案:

答案 0 :(得分:1)

您遇到的行为(导入在一台计算机上而不是另一台计算机上正常运行)通常会发生,因为您在一个系统上有多个名为MyLibrary的程序包,而您的PYTHONPATH未列出“。”第一

要测试这是否是问题,请在项目目录中运行Python并执行

>>> import MyLibrary
>>> print MyLibrary

并查看MyLibrary的路径是否符合您的期望。如果没有,请调整您的PYTHONPATH和/或删除包的过期版本。

避免此类问题的常用方法是使用virtualenv创建一个独立的Python环境。