模块不能绝对导入包树中自己的分支?

2024-09-29 02:21:59 发布

您现在位置:Python中文网/ 问答频道 /正文

如果包结构如下:

foldertest/
  __init__.py
  a/
    __init__.py
    asub/
      __init__.py
  b/
    __init__.py

foldertest.__ini__.py

import a

foldertest.a.__init__.py

import foldertest.a.asub
print foldertest.a.asub

如果我从上面的文件夹foldertest/运行python shell并发出import foldertest,我将收到以下错误:

>>> import foldertest
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "foldertest/__init__.py", line 1, in <module>
    import foldertest.a
  File "foldertest/a/__init__.py", line 4, in <module>
    print foldertest.a.asub
AttributeError: 'module' object has no attribute 'a'

然而,如果我将foldertest.a.__init__.py改为导入foldertest.b,并尝试打印,我将收到:

>>> import foldertest
<module 'foldertest.b' from 'foldertest/b/__init__.pyc'>
>>> 

我是否做错了什么,或者无法在包树中使用对包/模块自身分支的绝对引用?(PyDev似乎也不赞成这样写导入)为了保持一致性,我希望有绝对的包引用。此外,我不知道任何“最佳实践”的书面进口声明或结构包,建议反对这一点。你知道吗


Tags: inpyimport文件夹init错误lineshell