尝试导入导入子模块的子模块时导入错误

时间:2016-03-23 23:38:08

标签: python python-import

我觉得我错过了简单和基本的东西。这是一个玩具设置

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__.pya/中公开,但我不确定pythonic的做法是什么会的。

导入模块的首选解决方案是什么?(a)导入另一个模块(b)最好不要将PythonProject意识带到?

2 个答案:

答案 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

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")