从cli我通过python
进入python shell。
然后,我会查看我的导入搜索路径:
import sys
print '\n'.join(sys.path)
/path/to/a/package/foo.bar
/other paths...
所以我知道foo.bar
在我的python搜索路径中。
在python shell中继续:
import imp
imp.find_module('foo.bar')
ImportError: No module named foo.bar
嗯,sys.path
告诉我foo.bar
在python搜索路径上,但imp
模块似乎无法找到它。
在python shell中继续进一步:
from foo.bar import baz
baz
<module 'foo.bar.baz' from '/path/to/a/package/foo.bar/foo/bar/baz.pyc'>
是的,我的主目录foo
下有目录bar
和foo.bar
。为什么imp.find_module
无法找到我的包裹?
答案 0 :(得分:1)
imp.find_module
不处理带点的名称。来自documentation:
此功能不处理分层模块名称(包含点的名称)。
它还指出了一个解决方案:
为了找到PM,即包P的子模块M,使用find_module()和load_module()来查找和加载包P,然后使用find_module()并将path参数设置为
P.__path__
。当P本身有一个带点名称时,递归应用此配方。
答案 1 :(得分:0)
.
。__init__.py
个文件。酒吧文件夹。这是python将其视为包sys.path