__init__.py 找不到本地模块
__init__.py can't find local modules
借用 http://pythoncentral.io/how-to-create-a-python-package/
中的一个简化示例
我有一个类似的文件结构如下,其中 Mammals.py 和 Birds.py 定义 类 具有相同的名称:
Project/
Animals/
__init__.py
Mammals.py
Birds.py
当 运行 一个 ipython 解释器在 Project/
目录中并且 __init__.py
为空时,以下工作:
from Animals.Mammals import Mammals
x = Mammals()
x.printMammals()
我希望能够写 from Animals import Mammals
而不是 from Animals.Mammals import Mammals
。我相信这样做的方法是使 __init__.py
文件内容如下:
from Mammals import Mammals
from Birds import Birds
但是,完成此操作后,在类似 Project/
来源的 ipython 解释器中,以下输入会产生错误:
In [1]: from Animals import Mammals
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-1-6d651848af9b> in <module>()
----> 1 from Animals import Mammals
/Users/username/Project/Animals/__init__.py in <module>()
----> 1 from Mammals import Mammals
2 from Birds import Birds
ImportError: No module named 'Mammals'
我觉得我犯了一个简单的错误,但找不到。感谢您的帮助!
把下面的代码放在Animals
目录下的__init__.py
里面。
Python 3.x :
from .Mammals import Mammals
from .Birds import Birds
在 2.x:
from __future__ import absolute_import
from .Mammals import Mammals
from .Birds import Birds
解释:
它找不到模块,因为它不知道要搜索什么目录来找到文件 Mammals
和 Birds
。您假设子文件夹 Animals
被添加到 python 搜索路径,但是如果您检查 sys.path
(从 Projects/Animals/__init__.py
执行),您将看到只有路径to Project
在路上。我不确定为什么不搜索包含 Project/Animals/__init__.py
的目录,因为那是正在执行的代码,但错误表明这是原因。
在模块名称前放置 .
告诉 Python 您正在加载的模块位于当前模块的目录中。
(感谢@SeanM的评论解释。)
借用 http://pythoncentral.io/how-to-create-a-python-package/
中的一个简化示例我有一个类似的文件结构如下,其中 Mammals.py 和 Birds.py 定义 类 具有相同的名称:
Project/
Animals/
__init__.py
Mammals.py
Birds.py
当 运行 一个 ipython 解释器在 Project/
目录中并且 __init__.py
为空时,以下工作:
from Animals.Mammals import Mammals
x = Mammals()
x.printMammals()
我希望能够写 from Animals import Mammals
而不是 from Animals.Mammals import Mammals
。我相信这样做的方法是使 __init__.py
文件内容如下:
from Mammals import Mammals
from Birds import Birds
但是,完成此操作后,在类似 Project/
来源的 ipython 解释器中,以下输入会产生错误:
In [1]: from Animals import Mammals
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-1-6d651848af9b> in <module>()
----> 1 from Animals import Mammals
/Users/username/Project/Animals/__init__.py in <module>()
----> 1 from Mammals import Mammals
2 from Birds import Birds
ImportError: No module named 'Mammals'
我觉得我犯了一个简单的错误,但找不到。感谢您的帮助!
把下面的代码放在Animals
目录下的__init__.py
里面。
Python 3.x :
from .Mammals import Mammals
from .Birds import Birds
在 2.x:
from __future__ import absolute_import
from .Mammals import Mammals
from .Birds import Birds
解释:
它找不到模块,因为它不知道要搜索什么目录来找到文件 Mammals
和 Birds
。您假设子文件夹 Animals
被添加到 python 搜索路径,但是如果您检查 sys.path
(从 Projects/Animals/__init__.py
执行),您将看到只有路径to Project
在路上。我不确定为什么不搜索包含 Project/Animals/__init__.py
的目录,因为那是正在执行的代码,但错误表明这是原因。
在模块名称前放置 .
告诉 Python 您正在加载的模块位于当前模块的目录中。
(感谢@SeanM的评论解释。)