子模块上的 ModuleNotFoundError
ModuleNotFoundError on submodule
我意识到像这样的问题已经被问过成千上万次,但我不知道如何成功导入我的 data
子模块。
MCVE
目录结构
┌ dummy
├── setup.py
└─┬ dummy
├── __init__.py
├── foo.py
└─┬ data
├── __init__.py
└── data_bar.py
我的顶级__init__.py
包含
from .foo import *
from .data import *
并且data/__init__.py
为空。
重现问题
我 pip 安装包到一个新的虚拟环境
pip install /path/to/dummy
效果很好。然后在 ipython shell 运行 从一个完整的目录 ,我尝试导入包
H:\Desktop$ ipython
In [1]: import dummy
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-1-cfc16ef2ccc8> in <module>
----> 1 import dummy
C:\Users\rlane\AppData\Local\Continuum\miniconda3\envs\secdetect_test\lib\site-packages\dummy\__init__.py in <module>
1 from .foo import *
----> 2 from .data import *
ModuleNotFoundError: No module named 'dummy.data'
foo.py
导入没有错误,但是在尝试了 from .data import *
的所有可能变体之后,我无法加载 data
子模块中的代码。
我尝试过的事情
顶级内的变化__init__.py
from .data import *
from data import *
from . import data
from .data import data_bar
from .data.data_bar import *
所有这些都导致相同的 ModuleNotFoundError
。
我也试过,但对我有用。
这是我的结构(请注意,所有这些文件都在一个名为 dummy 的文件夹中)。
Python 个文件:
foo.py:
def foo_module():
return 'foo module'
data_bar.py:
def data_bar_module():
return 'Data bar'
test.py:
import dummy
#from dummy.data import data_bar
#print(dummy.foo.foo_module())
#print(data_bar.data_bar_module())
当我执行 python3 test.py
时,它没有给我任何错误,当我取消注释 test.py
文件中的注释行时,它给出:
foo module
Data bar
我不太清楚为什么它会起作用,但尝试像这样导入数据包,它可能会起作用。
from dummy.data import *
希望这对您有所帮助。
问题是 dummy.data
作为包在 setup.py
脚本中丢失。
setup(
name=DISTNAME,
author=MAINTAINER,
...
packages=[
'dummy',
'dummy.data'
],
...
long_description=open('README.md').read(),
)
使用此配置,from .data import *
和顶级 __init__.py
中的 from . import data
都可以工作。
我意识到像这样的问题已经被问过成千上万次,但我不知道如何成功导入我的 data
子模块。
MCVE
目录结构
┌ dummy
├── setup.py
└─┬ dummy
├── __init__.py
├── foo.py
└─┬ data
├── __init__.py
└── data_bar.py
我的顶级__init__.py
包含
from .foo import *
from .data import *
并且data/__init__.py
为空。
重现问题
我 pip 安装包到一个新的虚拟环境
pip install /path/to/dummy
效果很好。然后在 ipython shell 运行 从一个完整的目录 ,我尝试导入包
H:\Desktop$ ipython
In [1]: import dummy
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-1-cfc16ef2ccc8> in <module>
----> 1 import dummy
C:\Users\rlane\AppData\Local\Continuum\miniconda3\envs\secdetect_test\lib\site-packages\dummy\__init__.py in <module>
1 from .foo import *
----> 2 from .data import *
ModuleNotFoundError: No module named 'dummy.data'
foo.py
导入没有错误,但是在尝试了 from .data import *
的所有可能变体之后,我无法加载 data
子模块中的代码。
我尝试过的事情
顶级内的变化__init__.py
from .data import *
from data import *
from . import data
from .data import data_bar
from .data.data_bar import *
所有这些都导致相同的 ModuleNotFoundError
。
我也试过,但对我有用。
这是我的结构(请注意,所有这些文件都在一个名为 dummy 的文件夹中)。
Python 个文件:
foo.py:
def foo_module():
return 'foo module'
data_bar.py:
def data_bar_module():
return 'Data bar'
test.py:
import dummy
#from dummy.data import data_bar
#print(dummy.foo.foo_module())
#print(data_bar.data_bar_module())
当我执行 python3 test.py
时,它没有给我任何错误,当我取消注释 test.py
文件中的注释行时,它给出:
foo module
Data bar
我不太清楚为什么它会起作用,但尝试像这样导入数据包,它可能会起作用。
from dummy.data import *
希望这对您有所帮助。
问题是 dummy.data
作为包在 setup.py
脚本中丢失。
setup(
name=DISTNAME,
author=MAINTAINER,
...
packages=[
'dummy',
'dummy.data'
],
...
long_description=open('README.md').read(),
)
使用此配置,from .data import *
和顶级 __init__.py
中的 from . import data
都可以工作。