1

我有一个简单的目录结构,如下所示:

MyProject
--main.py
--lib #that's a directory/package
----__init__.py
----view.py
----common_lib.py
----other irrelevant modules...

在 main.py 中:

from lib import view

导致以下错误:

ImportError: cannot import name view

相反,我会这样写:

from lib.view import *

此导入成功通过,但下一次失败发生在 view.py 中,其中:

from common_lib import Comments, Locations, ScreenData, ProgressSignal

原因:

ImportError: No module named 'common_lib'

而且从目录结构来看,common_lib.py和view.py在同一个目录下,怎么会找不到呢?为什么'from x import y'不起作用,而'from xy import *'起作用?'__init__.py ' 是完全空的顺便说一句。我正在使用 Python 3.3 32 位。

更烦人的是,同样的程序在两天前运行。我在 IDLE 中测试了一些代码,当我认为代码已经准备好包含在项目中时,将其粘贴到 PyDev 中,我被这个错误震惊了。我没有改变我的目录或模块。

此外,更奇怪的是,运行 view.py 和 common_lib.py 作为独立(没有被导入)运行得很好。如果确实存在任何问题,它应该会产生错误。

谢谢。任何建议都将受到高度赞赏。

4

3 回答 3

2

由于main.py仍处于顶层,您需要使用lib.common_lib

from lib.common_lib import Comments, Locations, ScreenData, ProgressSignal

因为上一行from lib import view没有从内部开始寻找模块lib

于 2013-06-17T02:31:39.437 回答
2

鉴于:

+--main.py     # from lib import view
+--lib
   +--__init__.py
   +--common_lib.py # Comments, etc.
   +--view.py       # from .common_lib import Comments, etc.

这有效:

from lib import view

这适用于相对导入以指示在同一个包中view.pycommon_lib

from .common_lib import Comments, Locations, ScreenData, ProgressSignal
于 2013-06-17T02:44:24.493 回答
0

为我工作:

danielallan@MacBook:~$mkdir myproject
danielallan@MacBook:~$cd myproject/
danielallan@MacBook:myproject$mkdir lib
danielallan@MacBook:myproject$cd lib
danielallan@MacBook:lib$touch __init__.py
danielallan@MacBook:lib$touch view.py
danielallan@MacBook:lib$touch common_lib.py
danielallan@MacBook:lib$cd ..

In [1]: from lib import view

In [2]: view
Out[2]: <module 'lib.view' from 'lib/view.pyc'>

当你在你的机器上尝试时会发生什么?您是否位于错误的目录中,或者您的路径未配置为查找这些文件?

于 2013-06-17T01:01:41.223 回答