2014-06-09 236 views
1

我面临奇怪的问题,虽然是新的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路径中包含路径中的所有必需的目录。

脚本XYZ.py ...依赖于以下2个实用程序类。 scipts开始在sys.path上追加子文件夹A4,所以理想情况下不需要直接使用A4.A4-1.py A4-1应该在导入时工作。就像从A4-2.py进口子方法

但是,这是给一个问题......从A4-1.py进口子方法 以下 为主题陈述。但是,如果我使用A4.A4-1.py

相同的作品奇怪的部分,是相同的脚本工作在服务器上的项目已经设置。

作为Python的新手,我需要了解如何从本地机器执行此脚本。 (无需更改或使用模块名称导入)

此外,我使用IDE INtelliJ,其中我已将A4作为依赖项添加到我的项目中。编译器能够解决它,但执行是抛出导入错误...

任何帮助表示赞赏。

+0

你可以在'__init __。py'周围加反引号,这样你就不会大胆,人们不会怀疑这是错误。 –

+0

您可以显示将此目录添加到路径的路径和代码吗?另外,您不需要在导入语句中包含'.py'。 – Mark

+0

我没有得到你对不起,请注意,__init__.py已经存在于文件夹中...我认为编辑器已经删除init.py中的下划线...可能是你困惑吗? – nukul

回答

1

现在已解决,问题是PYTHONPATH上类似文件夹的冲突,有一个工具存在的路径,但没有文件存在...删除路径本身后,它在正确路径上搜索util文件...

1

这些文件是否真的命名为A4-1.py etc?因为那给了我一个SyntaxError而不是一个ImportError; (显然)模块名称中不允许使用-符号。这是有道理的,因为它意味着减去。

如果您在同一probject内进口,我个人说,在大多数情况下,进口这样

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 

EDIT2

如果你正在检查sys.path,还要确保有没有另一个目录匹配导入的开始,但不包含其余部分(例如submethods)。如果还有另一个目录A4,也许Python使用了错误的目录。

还要确保名称不是现有的Python模块。 (例如,如果您重命名模块,导入的第一部分仍然有效)。

+0

嗨, A4-1.py只是提供解释,并避免提供真正的项目类文件名....你可以放心地认为事情工作正常,并遵循命名约定。 但是,正如前面提到的使用modulename.modulefile导入工作得很好。唯一的问题是添加路径,然后从文件导入不工作在客户端上。但在服务器上工作。对Python来说相当新,我没有得到什么是抓住。我错过了什么,或者我需要额外提供执行此操作的东西。 – nukul

+0

添加到路径(sys.path.append)应该能够工作。但正如答案中所建议的,我会坚持使用'modulename.modulefile',这似乎比改变你的路径来导入更好。 – Mark

+0

问题是,在sys.path.append工作的服务器上,modulename.modulefile doesn; t。并在客户端otherway周围....我需要了解什么配置丢失(至少在客户端上,使其能够工作) 你提到sys.path.append应该工作......但在我的情况下,它不是.. .PLs为此提出任何理由? – nukul

相关问题