【问题标题】:PyCharm unresolved reference when importing class from other file从其他文件导入类时 PyCharm 未解析的引用
【发布时间】:2015-06-09 17:11:23
【问题描述】:

这个问题一直让我发疯。我正在尝试从同一目录中的文件导入一个类。 PyCharm 给了我“未解决的参考”错误。 MyClassfile.py 中定义。

我发现了这些问题:

我的项目结构如下:

我已将 src 标记为源根目录...

我已经设置了“将源根添加到 PYTHONPATH”:

我已经尝试过文件 -> 使缓存无效/重新启动..(我什至重新启动了计算机)。

如果我尝试运行它,我会在控制台中收到以下错误:ImportError: cannot import name 'MyClass'

解释器是 Ubuntu x64 14.04 上 Python 3.4 上的 virtualenv。

如果我安装并导入任何 3rd 方包,它们都可以正常工作。

如果我在终端中尝试echo $PYTHONPATH,它不会返回任何内容(与env | grep PYTHONPATH 相同。我在尝试这些时激活了相应的virtualenv。

有什么线索吗?

【问题讨论】:

    标签: python pycharm


    【解决方案1】:

    如果MyClass定义在pack/file.py中,则需要导入为:

    from pack.file import MyClass
    

    请注意,为您自己的模块使用 Python 内置类型的名称(例如 file)是个坏主意。

    【讨论】:

      【解决方案2】:

      如果你使用的是 python 版本 3,试试这个

      from .pack import myclass
      

      这对我有用

      【讨论】:

        【解决方案3】:

        是的,如果您使用的是 python 3,您应该添加如下内容:

        from .pack import MyClass
        

        会有用的

        【讨论】:

          【解决方案4】:

          以下步骤解决了我的问题:

          • 所有目录至少需要一个空白的 __init__.py 文件
          • 将所有目录标记为源根目录(根据之前的海报说明)

          【讨论】:

            【解决方案5】:

            我在尝试导入新类时遇到了同样的问题,但是我可以成功地从同一目录中的文件导入函数。我仍然不明白为什么我不能导入我的课程,但我想我会为其他用户分享这些信息。

            @kayebs 的回复对我有用。但是,我随后将 src 目录添加到源目录列表中,@lulian 问题中的第一个链接可以删除“。”来自我的文件名。

            【讨论】:

              【解决方案6】:

              发生这种情况的原因有很多。以下是解决大多数情况的几个步骤:

              .idea 缓存问题

              一些 .idea 问题导致 IDE 在代码仍然正常运行时显示错误。解决方案:

              1. 关闭项目并快速使用 PyCharm
              2. 删除项目所在的.idea 文件夹。请注意,它是一个隐藏文件夹,您可能不知道它存在于您的项目目录中。
              3. 启动 PyCharm 并重新创建项目

              相对于项目文件夹的导入

              代码根文件夹与项目文件夹不同时的相对导入。解决方案:

              1. 在项目资源管理器中找到相对导入所需的文件夹
              2. 右键单击并将其标记为“Source Root”

              编辑器未将 init.py 标记为 Python

              这是所有案例中最虚幻的。在这里,出于某种原因,PyCharm 认为所有__init__.py 文件都不是 python 文件,因此在代码分析期间会忽略它们。要解决这个问题:

              1. 打开 PyCharm 设置
              2. 导航到编辑器 -> 文件类型
              3. 找到 Python 并将 __init__.py 添加到 python 文件列表或找到 Text 并从文本文件列表中删除 __init__.py

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-07-16
                • 1970-01-01
                • 2017-10-07
                • 2012-06-03
                • 1970-01-01
                • 2016-12-03
                • 2019-06-28
                • 1970-01-01
                相关资源
                最近更新 更多