导入后python模块为空

时间:2013-03-01 16:02:30

标签: python python-import

当我尝试以不同的方式导入名为rmod2的python模块时,我注意到了一些看似奇怪的行为。如果我从 rmod2.py 文件所在的目录启动python,它可以正常工作。但是,如果我将文件移动到其他模块所在的另一个文件夹,它将不再按预期工作。 module / package文件夹是 /usr/lib/pymodules/python2.7 ,它也包含在 sys.path 中。所以我创建了文件夹 /usr/lib/pymodules/python2.7/rmod2 并放置一个空的 __ init __。py rmod2.py __ init __。py 我得到:

>>> import rmod2
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ImportError: No module named rmod2

使用 __ init __。py 文件,导入似乎有效,但包是空的:

>>> import rmod2
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'rmod2']
>>> dir(rmod2)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
>>> rmod2.__path__
['/usr/lib/pymodules/python2.7/rmod2']
>>> rmod2.__file__
'/usr/lib/pymodules/python2.7/rmod2/__init__.py'

有人可以告诉我发生了什么,以及如何修复它以便在导入时实际加载模块内容?

2 个答案:

答案 0 :(得分:1)

您希望将模块所在目录的路径添加到sys.path variable,而不是直接添加rmod.py模块 到路径上的目录(而不是在子目录中)。

通过将__init__.py添加到目录,您将其转换为python包,使其成为可导入的。如果这是你的意图,那么你移动了rmod - rmod - 包中的模块,你可以通过该命名空间导入它:

from rmod2 import rmod2

答案 1 :(得分:0)

一旦发生在我身上,包的模块无法从包中访问,但直接导入时,它可以正常工作。可能在包__all__

中缺少__init__.py

这不起作用:

import mypkg
obj = mypkg.mymodule.MyClass()

这有效:

import mypkg.mymodule
obj = mypkg.mymodule.MyClass()