即使存在__init__.py,python导入也会失败

时间:2013-01-25 07:09:52

标签: python

假设我有这个目录结构

package /
         __init__.py
         cpackage.py

        subpackage1/
                    __init__.py
                    subpack1_call.py

                    /lib
                        __init__.py
                        sub_lib.py
        subpackage2/
                    __init__.py
                    subpack2_call.py

我想在subpackage1和subpackage2中导入cpackage,我无法导入 我得到valuename错误和模块未找到错误

我可以在subpackage1

中轻松完成此操作
from lib.sub_lib import hello_pr

hello_pr() 

这里没有错误,hello_pr打印我在sub_lib中定义的内容 但我无法向上移动目录,在上面的情况下,我可以轻松移动 下目录结构

我错过了什么。我已经在这个网站和pydoc中寻找了这么多解决方案,也许我错过了一些东西,因为似乎没有什么工作可以用于

2 个答案:

答案 0 :(得分:1)

在解析和重新解析您的问题几次后,我已经确定您要找的是relative imports

from ..cpackage import somename

答案 1 :(得分:1)

如果你可以导入lib.sub_lib,这意味着你的PYTHONPATH指向subpackage1。它应该指向包含包的目录,然后你就可以导入package.cpackage,package.subpackage1.lib.sub_lib等。

您也可以将PYTHONPATH指向cpackage,然后删除此目录中的 init .py,因为它没用,您可以导入cpackage,subpackage1.lib.sub_lib等。

基本规则是:如果PYTHONPATH = dir,那么

dir\
  bob.py
  sub\
    __init__.py
    bib.py
    inner\
      __init__.py
      bub.py

import bob
import sub       (will import sub\__init__.py)
import sub.bib   (will import sub\__init__.py then bib.py)
import sub.inner (will import sub\__init__.py then sub\inner\__init__.py)
import sub.inner.bub (will import sub\__init__.py then sub\inner\__init__.py
                      and finally bub.py)