Skip to main content
 首页 » 编程设计

导入后python模块为空

2025年05月04日8JeffreyZhao

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

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

请您参考如下方法:

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

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

from rmod2 import rmod2