找不到存在的模块

时间:2016-06-22 14:05:35

标签: python python-2.7 shell path

从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下有目录barfoo.bar。为什么imp.find_module无法找到我的包裹?

2 个答案:

答案 0 :(得分:1)

imp.find_module不处理带点的名称。来自documentation

  

此功能不处理分层模块名称(包含点的名称)。

它还指出了一个解决方案:

  

为了找到PM,即包P的子模块M,使用find_module()和load_module()来查找和加载包P,然后使用find_module()并将path参数设置为P.__path__ 。当P本身有一个带点名称时,递归应用此配方。

答案 1 :(得分:0)

  • 文件夹名称中没有.
  • 确保foo&amp;中有一个空__init__.py个文件。酒吧文件夹。这是python将其视为包
  • 所必需的
  • 确保foo文件夹所在的文件夹位于sys.path