我觉得我错过了简单和基本的东西。这是一个玩具设置
PythonProject/
main.py
x/
a.py
y/
b.py
b.py有一个没有依赖关系的函数foo
def foo():
print("Hello World")
a.py需要foo从b.py工作并直接导入
import y.b
def bar():
#Do some stuff
y.b.foo()
main.py需要来自a.py
的栏import x.a
x.a.bar()
现在,运行a.py工作正常,它成功导入b并找到foo。 尝试运行main.py会导致导入错误:具体而言#34; import b"在"导入"
期间失败我认为需要发生的事情是b
需要__init__.py
在a/
中公开,但我不确定pythonic的做法是什么会的。
导入模块的首选解决方案是什么?(a)导入另一个模块(b)最好不要将PythonProject意识带到?
答案 0 :(得分:3)
即使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
...
__init__.py
文件(例如“效果”)需要包含
import effects.echo
import effects.surround
import effects.reverse
要调用子模块中的子模块,如您所要求的那样,例如,回声调用环绕声,那么您需要将环绕声导入到回声中
import effects.surround as surround
答案 1 :(得分:1)
来自Importing files from different folder in Python:
import sys
sys.path.insert(0, 'C:/path/x')
import a
a.bar()
import sys
sys.path.insert(0, 'C:/path/x/y')
import b
def bar():
#Do some stuff
b.foo()
def foo():
print("Hello World")