Python 导入错误:无法导入名称
我遇到了一个奇怪的问题,虽然我对Python还很陌生。这个问题看起来和很多论坛上说的有点不同。
Directory structure:
Project_Folder
-- Folder A
-- SubFolder A1
-- Subfolder A2
-- Subfolder A3
-- Folder A3-1
-- XYZ.py
-- Subfolder A4 ( this contains utility classes)
-- A4-1.py
-- A4-2.py
注意:所有文件夹里都有一个叫__init__.py
的文件,而且PYTHON PATH里包含了所有需要的目录。
脚本XYZ.py依赖于下面两个工具类。脚本一开始会把子文件夹A4添加到sys.path中,所以理论上不需要用A4.A4-1.py来导入,直接用A4-1就应该可以了。像这样: from A4-1.py import sub-methods from A4-2.py import sub-methods
但是这样会出现问题,正如标题所说的那样。不过,如果我用A4.A4-1.py就没问题。
奇怪的是,同样的脚本在项目已经设置好的服务器上可以正常工作。
作为一个Python新手,我想弄明白如何在本地机器上执行这个脚本。(不改变或使用模块名来导入)
另外,我使用的是IDE IntelliJ,我已经把A4添加为项目的依赖项。编译器能够解析它,但执行时却抛出了导入错误……
任何帮助都非常感谢。
2 个回答
这些文件真的叫 A4-1.py
吗?因为这样会让我遇到语法错误,而不是导入错误;看起来在模块名称中是不允许使用 -
符号的。这是有道理的,因为它表示减号。
如果你是在同一个项目中导入,我个人觉得大多数情况下,像这样导入
from A4.A4_1 import submethods
比把 A4 加到你的路径中,然后直接从 A4_1
导入要好。
编辑
你能试试看如果解决了 ..
后你的路径是否有效吗?
import sys,os,time,datetime
testdir = os.path.dirname(os.path.abspath(__file__))
newdir = os.path.abspath(os.path.join(testdir, '../../utilities'))
sys.path.append(newdir)
如果不行,你能确认一下使用
print sys.path
是否包含了正确的绝对路径吗?
编辑2
如果你在检查 sys.path
,也要确保没有其他目录与导入的开头部分匹配,但没有包含后面的部分(例如 submethods
)。如果有另一个目录叫 A4
,可能 Python 用的是错误的那个。
还要确保这个名字不是一个已经存在的 Python 模块。(例如,如果你重命名你的模块,导入的第一部分仍然可以正常工作)。
这个问题现在解决了,原因是PYTHONPATH中有一些相似的文件夹发生了冲突。有一个路径是存在的,但是里面没有任何文件……在我把那个路径删掉之后,它就开始在正确的路径上寻找工具文件了……