假设我有这个目录结构
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中寻找了这么多解决方案,也许我错过了一些东西,因为似乎没有什么工作可以用于
答案 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)