Python 如何导入uu init uu';内部模块中的s方法?

Python 如何导入uu init uu';内部模块中的s方法?,python,import,Python,Import,我的文件结构是 foo/ __init__.py bar.py 文件uuu init_uuuu.py def abc(): print 'ABC' 文件bar.py from foo import abc 我犯了这个错误 Traceback (most recent call last): File "foo/bar.py", line 1, in <module> from foo import abc ImportError: No modu

我的文件结构是

foo/
   __init__.py
   bar.py
文件uuu init_uuuu.py

def abc():
    print 'ABC'
文件bar.py

from foo import abc
我犯了这个错误

Traceback (most recent call last):
   File "foo/bar.py", line 1, in <module>
   from foo import abc
ImportError: No module named foo
回溯(最近一次呼叫最后一次):
文件“foo/bar.py”,第1行,在
从foo进口abc
ImportError:没有名为foo的模块

像这样导入
foo
应该可以,但是您需要确保
foo
上面的目录位于Python路径上。您可以通过打印
sys.path
来检查路径上的内容

如果您提供有关如何运行代码的更多详细信息,包括对错误的完整回溯,我可以提供更多帮助,但基本建议是检查Python路径是否正确。

使用相对导入(需要Python 2.6或更高版本):


导入包时,Python在
sys.path
上的目录中搜索包子目录。这意味着
foo
必须是
sys.path
列表中某个目录的子目录。由于
bar.py
本身位于
foo
目录中,因此可以实现这一点的一种方法是将其父文件夹添加到
sys.path
中,如下所示(假设执行时
foo
是当前工作目录):


即使是在
\uuu init\uuuu.py
中导入了
bar.py,这一个对我来说仍然有效:

from .__init__ import abc

不过,这有一个小小的缺点。当提示类型为
abc
时,它将在帮助中被标注为
foo.\uuu init\uuu.abc
,而不是
foo.abc
。作为一种解决方法,本例使用字符串类型提示,如
def somefunc()->“foo.abc”:

如果我从uuu init_uuuy.py import abc
编写
,那么它的工作正常吗?您不应该将
abc
用作用户模块名,因为它已经作为标准python模块存在。这会产生以下结果:
ValueError:尝试在非包中进行相对导入。
\uuuu init\uuuuu.py
文件未保存到磁盘。使用相对导入是在包中进行内部导入的最佳方法。在Python3.5中,它给出了
SystemError:未加载父模块“”,无法执行相对导入
@MnemonicFlow:这相当于旧的“
ValueError:尝试在非包中进行相对导入
”。您只能在包内使用它,例如此问题的
foo/bar.py
,而不能在顶层使用。
import sys
sys.path.append('..')  # add parent folder

from foo import abc
from .__init__ import abc