1

假设我有这个目录结构

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 错误和 module not found 错误

我可以在 subpackage1 中轻松做到这一点

from lib.sub_lib import hello_pr

hello_pr() 

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

我错过了什么。我在这个站点和 pydoc 中查看了这么多解决方案,也许我遗漏了一些东西,因为似乎没有任何效果

4

2 回答 2

1

在多次解析和重新解析您的问题后,我决定您要查找的是相对导入

from ..cpackage import somename
于 2013-01-25T07:17:03.847 回答
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)
于 2013-01-25T07:18:18.587 回答