我意识到这样的问题已经被问了无数次,但是我无法弄清楚如何成功导入我的data
子模块。
目录结构
┌ 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 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
。
答案 0 :(得分:1)
问题是dummy.data
脚本中缺少setup.py
作为软件包。
setup(
name=DISTNAME,
author=MAINTAINER,
...
packages=[
'dummy',
'dummy.data'
],
...
long_description=open('README.md').read(),
)
使用此配置,顶层from .data import *
中的from . import data
和__init__.py
都可以工作。
答案 1 :(得分:0)
我也尝试过,但是对我有用。
这是我的结构(请注意,所有这些文件都位于一个名为 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 *
希望这会有所帮助。