导入后python模块为空

python module empty after import

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

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

对于uuu init_uuuy文件,导入似乎可以工作,但包是空的:

1
2
3
4
5
6
7
8
9
>>> 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'

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


您要将模块所在目录的路径添加到您的sys.path变量中,或者直接将rmod.py模块添加到路径上的目录(而不是子目录中)。

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

1
from rmod2 import rmod2


有一次我偶然发现一个包的模块不能从包中访问,但是当直接导入时,它就工作了。包的__init__.py中可能缺少__all__

这不起作用:

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

这起作用了:

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