1

我知道已经发布了很多关于包内导入的问题。我想知道以下是否也是 Python 2.7 的方式。

Source/
anomalyCheck/
    __init__.py
    DLthput.py
    ULPowerStats.py
    ULThput.py
config/
    __init__.py
    configure.py
parserTools/
    __init__.py
    logParser.py
utilities/
    __init__.py
    plotLogResults.py
__init__.py
lteDebugger.py

---- lteDebugger.py----

import parserTools.logParser
import anomalyCheck.DLthput
import utilities.plotLogResults
import configuration.TDDFDDconfiguration
import anomalyCheck.ULthput
### Work done after here ####

------DLThput.py------

from ..utilities.plotLogResults import *
from ..parserTools.logParser import *
### Work done after here ####

------ULThput.py-----

from ..parserTools.logParser import *
from ..utilities.plotLogResults import *

错误 :

运行 lteDebugger.py 文件时,错误是

ValueError:尝试相对导入超出顶级包

文件“C:\Users\manojtut\Desktop\Project_LTE_SVN\Source\lteDebugger.py”,第 2 行,在
  导入 anomalyChecker.DLthput
文件“C:\Users\manojtut\Desktop\Project_LTE_SVN\Source\anomalyChecker\DLthput.py”,第 1 行,在

我已经阅读了几乎所有可用的文档和 Guido 的包内导入指南。另外,我想我的一切都在正确的地方。我在这里错过了什么吗?请指出。提前非常感谢。:) :)

编辑 1:Amber 的回答解决了提到的问题。因此, lteDebugger.py 通过导入所有其他模块可以正常工作。现在,另一个问题是,我无法解决的是......当我想编译/解释(无论你想调用什么) DLThput.py/ULthput.py 时,它显示与上面相同的错误...... . ValueError: 尝试相对导入超出顶级包。我还有其他添加路径到 sys hacks 的解决方案吗?我真的不想这样做,除非这是唯一要做的事情。那么,我该如何躲避呢?

4

1 回答 1

2

您正在运行lteDebugger.py,这意味着任何“包”必须在目录树中至少低一级 - 它们需要包含在一个文件夹中,以便 Python 将它们识别为包而不是模块(从而使相对导入工作)。

anomalyCheck被识别为一个包,但它的父目录不是(因为那lteDebugger.py是),因此您不允许使用相对导入来访问该父目录。

解决此问题的一种方法是将所有内容移动lteDebugger.py到子目录中,例如:

Source/
    debugger/
        anomalyCheck/
            __init__.py
            DLthput.py
            ULPowerStats.py
            ULThput.py
        config/
            __init__.py
            configure.py
        parserTools/
            __init__.py
            logParser.py
        utilities/
            __init__.py
            plotLogResults.py
        __init__.py
    lteDebugger.py

然后lteDebugger.py会做类似的事情import debugger.anomalyCheck.DLthput.py

于 2012-05-29T05:22:02.773 回答