Python2.7导入时出错
我知道有很多关于包内导入的问题已经发布。我想知道下面是否也是Python2.7的方式Python2.7导入时出错,python,import,importerror,Python,Import,Importerror,我知道有很多关于包内导入的问题已经发布。我想知道下面是否也是Python2.7的方式 Source/ anomalyCheck/ __init__.py DLthput.py ULPowerStats.py ULThput.py config/ __init__.py configure.py parserTools/ __init__.py logParser.py utilities/ __init__.py p
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
----LTE.py----
------DLThput.py------
------ULThput.py-------
错误:
运行lteDebugger.py文件时,错误为
ValueError: Attempted relative import beyond toplevel package
File "C:\Users\manojtut\Desktop\Project_LTE_SVN\Source\lteDebugger.py", line 2, in
import anomalyChecker.DLthput
File "C:\Users\manojtut\Desktop\Project_LTE_SVN\Source\anomalyChecker\DLthput.py", line 1, in
ValueError:尝试在顶级包之外进行相对导入
文件“C:\Users\manojtut\Desktop\Project\u LTE\u SVN\Source\lteDebugger.py”,第2行,在
导入异常检查器.DLthput
文件“C:\Users\manojtut\Desktop\Project\u LTE\u SVN\Source\anomalyChecker\DLthput.py”,第1行,在
我已经阅读了几乎所有可用的文档和Guido的包内导入指南。而且,我想我把所有东西都放在正确的地方了。我是不是遗漏了什么?请指出。事先非常感谢。:)
编辑1:Amber的回答解决了提到的问题。因此,通过导入所有其他模块,lteDebugger.py工作正常。现在,另一个问题是,我无法解决的是。。。当我想编译/解释(不管你想调用什么)DLThput.py/ULthput.py时,它显示了与上面相同的错误。。。ValueError:尝试在顶级包之外进行相对导入。我有没有其他的解决方案来添加系统黑客?我真的不想那样做,除非这是唯一可以做的事。
那么,我怎样才能避开这个呢 您正在运行
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
将在“from..utilities.plotLogResults import*”中执行类似于导入调试器.anomalyCheck.DLthput.py的操作,如导入调试器.anomalyCheck.DLthput.py???我认为您仍然可以使用“from utilities.plotLogResults import*”导入。不,我认为我不能。我会查一下的。谢谢你提前回答。因此,您需要将lteDebugger.py所在目录的路径添加到sys。对吗?让我试试。这是一种选择,但如果你这样做,你就不会想使用相对路径——你会想使用绝对路径。如果您想继续使用相对路径,您应该使用我在我的答案中编辑的方法。lteDebugger.py通过导入所有其他模块工作正常。现在,另一个问题是,我无法解决的是。。。当我想编译/解释(不管你想调用什么)DLThput.py/ULthput.py时,它显示了与上面相同的错误。。。ValueError:尝试在顶级包之外进行相对导入,因此,我如何避免此问题?包的内容不应直接运行。如果您想解释它们,通常只需导入它们。您可以从顶层目录(运行lteDebugger.py
的同一位置)运行Python,然后执行类似于导入调试器.anomalyCheck.DLThput的操作。鉴于您正在尝试执行的操作,我真的建议不要使用相对导入,而只使用绝对导入。这样,您只需向pythonpath添加一个目录,其中的所有内容都可以正常工作。
from ..parserTools.logParser import *
from ..utilities.plotLogResults import *
ValueError: Attempted relative import beyond toplevel package
File "C:\Users\manojtut\Desktop\Project_LTE_SVN\Source\lteDebugger.py", line 2, in
import anomalyChecker.DLthput
File "C:\Users\manojtut\Desktop\Project_LTE_SVN\Source\anomalyChecker\DLthput.py", line 1, in
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