【问题标题】:python import error cannot import namepython导入错误无法导入名称
【发布时间】:2015-04-20 23:30:45
【问题描述】:

我遇到了奇怪的问题,虽然是 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 也包含 PATH 中所有必需的目录。

Script XYZ.py ... 依赖于以下 2 个实用程序类。 Scipts 首先在 sys.path 上附加子文件夹 A4,因此理想情况下不需要使用 A4.A4-1.py 而是直接使用 A4-1 应该在导入时工作。像下面 from A4-1.py 导入子方法 from A4-2.py 导入子方法

但这是一个问题......如主题中所述。但是,如果我使用 A4.A4-1.py,同样的工作

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

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

另外,我正在使用 IDE INtelliJ,我已将 A4 作为依赖项添加到我的项目中。并且编译器能够解决它,但执行会引发导入错误...

感谢任何帮助。

【问题讨论】:

  • 您可以在__init__.py 周围加上反引号,这样您就不会得到粗体,人们不会怀疑这是错误。
  • 你能显示路径和将此目录添加到路径的代码吗?此外,您不需要在导入语句中包含 .py
  • 我没有让你感到抱歉,请注意,init.py 已经存在于文件夹中...我认为编辑器已删除 init.py 中的下划线...可能这让你感到困惑?
  • import sys,os,time,datetime testdir = os.path.dirname(os.path.abspath(file)) sys.path.append(testdir+"\\ ..\\..\\utilities") from xyzUtil import XYZ from abcUtil import ABC
  • @Mark 如果您需要更多信息,请告诉我......谢谢!!

标签: python python-2.7


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    文件真的命名为A4-1.py 等吗?因为这给了我一个 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 模块。 (例如,如果您重命名模块,导入的第一部分仍然有效)。

    【讨论】:

    • 您好,A4-1.py 仅用于解释,避免提供真实的项目类文件名......您可以放心地假设一切正常并且正确遵循命名约定。但是,如前所述,使用 modulename.modulefile 进行导入工作得非常好。唯一的问题是添加路径然后从文件导入在客户端上不起作用。但适用于服务器。作为 Python 的新手,我不知道问题在哪里。我是否遗漏了什么或者我需要另外提供一些东西来执行这个。
    • 添加到路径(sys.path.append)应该能够工作。但正如答案中所建议的,我会坚持使用modulename.modulefile,这似乎比仅仅为了导入而改变路径要好。
    • 问题是,在 sys.path.append 工作的服务器上, modulename.modulefile 没有;t。而在客户端上……我需要了解缺少什么配置(至少在客户端上使其能够工作)你提到 sys.path.append 应该可以工作......但在我的情况下它不是...... PL 提出了任何理由?
    • 不确定,但我添加了一种可能性
    • 路径解析实用程序,有关错误的更多详细信息:XYZ.py --> imports 2 files in utilities folder, say A4_1.py and A4_2.py. A4_1.py import A4_2.py ( but not other way around) 现在错误回溯,在文件 A4_1.py 中提到 A4_2.py 上的导入错误这意味着同一文件夹中的文件本身不可见?我不确定是什么导致这种情况发生? (这也不是循环依赖的情况)
    猜你喜欢
    • 2014-01-29
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 2017-08-11
    • 2021-02-19
    相关资源
    最近更新 更多