2

在尝试以不同方式导入名为 rmod2 的 python 模块时,我注意到一些看似奇怪的行为。如果我从rmod2.py文件所在的目录启动 python,它工作正常。但是,如果我将文件移动到其他模块所在的另一个文件夹,它将不再按预期工作。模块/包文件夹是/usr/lib/pymodules/python2.7它也包含在sys.path中。所以我创建了文件夹/usr/lib/pymodules/python2.7/rmod2并将一个空的__init__.pyrmod2.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'

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

4

2 回答 2

1

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

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

from rmod2 import rmod2
于 2013-03-01T16:06:14.177 回答
0

一旦我碰巧无法从包中访问包的模块,但是直接导入时,它可以工作。__all__可能在包裹中丢失__init__.py

这没有用:

导入 mypkg obj = mypkg.mymodule.MyClass()

这有效:

import mypkg.mymodule
obj = mypkg.mymodule.MyClass()
于 2015-12-09T10:57:34.587 回答