尝试导入导入子模块的子模块时出现导入错误
Import Error on trying to import a submodule that imports a submodule
我觉得我缺少一些简单和基本的东西。这是一个玩具设置
PythonProject/
main.py
x/
a.py
y/
b.py
b.py 有一个没有依赖关系的函数 foo
def foo():
print("Hello World")
a.py 需要来自 b.py 的 foo 才能工作并直接导入它
import y.b
def bar():
#Do some stuff
y.b.foo()
main.py 需要 a.py
的栏
import x.a
x.a.bar()
现在,运行ning a.py 工作正常,它成功导入 b 并找到 foo。
尝试 运行 main.py 但是会因导入错误而中断:特别是 "import b" 在 "import a"
期间失败
我的印象是需要发生的事情是 b
需要通过 a/
中的 __init__.py
公开,但我不确定这样做的 pythonic 方式是什么会的。
导入模块 (a) 的首选解决方案是什么,该模块导入另一个模块 (b) 最好不要将 PythonProject 意识引入 a?
来自Importing files from different folder in Python:
main.py
import sys
sys.path.insert(0, 'C:/path/x')
import a
a.bar()
a.py
import sys
sys.path.insert(0, 'C:/path/x/y')
import b
def bar():
#Do some stuff
b.foo()
b.py
def foo():
print("Hello World")
即使 Paul H 提到了答案,也从未得到正确回答。
很简单,提到但没有直接说明here。
如果你有这样的目录:
sound/ Top-level package
__init__.py Initialize the sound package
formats/ Subpackage for file format conversions
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
...
filters/ Subpackage for filters
__init__.py
equalizer.py
vocoder.py
karaoke.py
...
(例如"effects")中的__init__.py
文件需要包含
import effects.echo
import effects.surround
import effects.reverse
要从子模块内部调用子模块,例如,echo 调用 surround,则需要将 surround 导入 echo 使用
import effects.surround as surround
我觉得我缺少一些简单和基本的东西。这是一个玩具设置
PythonProject/
main.py
x/
a.py
y/
b.py
b.py 有一个没有依赖关系的函数 foo
def foo():
print("Hello World")
a.py 需要来自 b.py 的 foo 才能工作并直接导入它
import y.b
def bar():
#Do some stuff
y.b.foo()
main.py 需要 a.py
的栏import x.a
x.a.bar()
现在,运行ning a.py 工作正常,它成功导入 b 并找到 foo。 尝试 运行 main.py 但是会因导入错误而中断:特别是 "import b" 在 "import a"
期间失败我的印象是需要发生的事情是 b
需要通过 a/
中的 __init__.py
公开,但我不确定这样做的 pythonic 方式是什么会的。
导入模块 (a) 的首选解决方案是什么,该模块导入另一个模块 (b) 最好不要将 PythonProject 意识引入 a?
来自Importing files from different folder in Python:
main.py
import sys
sys.path.insert(0, 'C:/path/x')
import a
a.bar()
a.py
import sys
sys.path.insert(0, 'C:/path/x/y')
import b
def bar():
#Do some stuff
b.foo()
b.py
def foo():
print("Hello World")
即使 Paul H 提到了答案,也从未得到正确回答。
很简单,提到但没有直接说明here。
如果你有这样的目录:
sound/ Top-level package
__init__.py Initialize the sound package
formats/ Subpackage for file format conversions
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
...
filters/ Subpackage for filters
__init__.py
equalizer.py
vocoder.py
karaoke.py
...
(例如"effects")中的__init__.py
文件需要包含
import effects.echo
import effects.surround
import effects.reverse
要从子模块内部调用子模块,例如,echo 调用 surround,则需要将 surround 导入 echo 使用
import effects.surround as surround