【问题标题】:Unresolved reference issue in PyCharmPyCharm 中未解决的参考问题
【发布时间】:2014-02-09 18:56:50
【问题描述】:

我有一个目录结构

├── simulate.py
├── src
│   ├── networkAlgorithm.py
│   ├── ...

我可以使用sys.path.insert() 访问网络模块。

import sys
import os.path
sys.path.insert(0, "./src")
from networkAlgorithm import *

但是,pycharm 抱怨它无法访问该模块。如何教 pycham 解析引用?

【问题讨论】:

  • src文件夹有__init__.py文件吗?
  • @Puffin GDI:不,它没有。
  • @PuffinGDI src 文件夹需要这个 init.py 文件吗?
  • 是的,以便 python 识别包:stackoverflow.com/questions/42094723/…
  • 我重命名了类名并继续处理它。当我点击运行时,出现了这个错误,完全忘记了重命名并尝试在导入过程中寻找 pycharm 建议。该死,建议是区分大小写的! - python 新手!!

标签: python ide pycharm


【解决方案1】:

手动添加它确实是这样做的一种方法,但有一个更简单的方法,那就是简单地告诉pycharm你想添加src文件夹作为源根目录,然后将源根目录添加到您的 python 路径。

这样,您不必将内容硬编码到解释器的设置中:

  • src 添加为源内容根:

  • 然后确保将添加源添加到您的PYTHONPATH 下:

    Preferences ~ Build, Execution, Deployment ~ Console ~ Python Console
    

  • 现在将解决导入问题:

这样,您可以添加任何您想要的作为源根目录,一切都会简单地工作。但是,如果您将其取消标记为源根目录,您收到错误消息:

毕竟不要忘记重新启动。在 PyCharm 菜单中选择:File --> Invalidate Caches / Restart

【讨论】:

  • 如果您将 Python 插件与 IntelliJ 一起使用,这也适用。
  • 此解决方案有效。它的问题是当另一个程序员从svn检索代码时,她必须再次进行相同的设置才能摆脱“未解析的引用”错误提示。
  • @GamesBrainiac,解决方案是 IDE 可以解析 "sys.path.insert(0, "./src")" 将其添加到 PYTHONPATH 中,然后进行适当的语法分析。
  • 您还需要确保您的内容根路径正确。在 pycharm 5 中,您可以在 Preferences -> Project -> Project Structure 中找到它。
  • 该死的,我只想把这个答案标记为救生员!
【解决方案2】:
  1. 检查src文件夹中的__init__.py文件
  2. src 文件夹添加为源根目录
  3. 然后确保将添加源添加到您的 PYTHONPATH(见上文)
  4. 在 PyCharm 菜单中选择:File --> Invalidate Caches / Restart

【讨论】:

  • 这最后一步是我的解决方案中唯一缺少的东西。接受的答案可能会添加它。
  • 如果没有此处提到的最后一步,则接受的答案不起作用。接受的答案也应添加此步骤/
  • 如果我的库以可编辑模式安装,这个答案会如何变化,例如pip install -e .?
  • 我的PYTHONPATH 是空的,这正常吗?
【解决方案3】:

如果有人还在看这个,那么当我尝试它时,接受的答案仍然适用于 PyCharm 2016.3。 UI 可能已更改,但选项仍然相同。

即。右键单击您的根文件夹 --> 'Mark Directory As' --> 源根目录

【讨论】:

  • 这个讨论中有这么多复杂的答案。这里提出的解决方案对我来说很容易。
  • “根文件夹”对您意味着什么?就像 github repo 的根目录或包根目录,例如类似src?
  • 我的PYTHONPATH 是空的,这正常吗?
【解决方案4】:

在测试了所有变通方法后,我建议您查看Settings -> Project -> project dependencies 并重新安排它们。

【讨论】:

  • 这非常适合我。我已经在那里安装了pygame,并且没有更多未解决的参考问题!
  • 我应该如何重新排列它们?
【解决方案5】:

通常,$PYTHONPATH is used to teach python interpreter to find necessary modules。 PyCharm 需要在 Preference 中添加路径。

【讨论】:

  • 如何检查我的 python 路径是否设置正确?目前,我的PYTHONPATH 是空的。我不确定为什么它本身没有正确设置。顺便说一句,您分享的链接无效。
  • 2021.3版本看不到你图片显示的python Paths框...
  • 我的PYTHONPATH 是空的,这正常吗?
【解决方案6】:

一般来说,这是一个缺少包的问题,​​只需将插入符号放在未解决的引用处,然后按Alt+Enter 以显示选项,那么您应该知道如何解决它。

【讨论】:

  • 什么是 alt+enter 在 mac 中?
【解决方案7】:

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

.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 文件列表中

  1. 查找文本并从文本文件列表中删除__init__.py

【讨论】:

  • 如何找到.idea 文件夹?
  • 回答我自己的问题,我去了我的项目的根目录(不是 src,而是说 git repo 根文件夹)。然后我做了rm -rf .idea。然后重新启动pycharm。我真的很困惑为什么这有效......到目前为止。至少 ide 正在查找文件并且代码的运行也是如此(但即使从 pycharm 中运行,例如使用调试器,它也始终有效)。
  • 为什么会这样?
  • 顺便说一句,重新创建项目真的有必要吗?
  • 在该文件夹中启动 PyCharm 时会自动重新创建项目。这将重新创建存储项目设置、字符串搜索索引和其他内容的 .idea 文件夹。
【解决方案8】:

虽然所有答案都非常有帮助,但有一点需要明确解释:

  • 本质上,具有多个分层目录的项目作为具有某些属性的包工作。
  • 要导入自定义本地创建的类,我们需要导航到包含.py 文件的目录,并在那里创建一个__init__.py(空)文件。

之所以有帮助是因为需要此文件才能使 Python 将目录视为包含包。干杯!

【讨论】:

    【解决方案9】:

    通过 PyCharm 安装(与社区版一起使用)。打开Settings > Project > Project Interpreter,然后单击下面屏幕截图中的绿色 + 图标。在打开的第二个对话框中,输入包名称并单击“安装包”按钮。

    【讨论】:

      【解决方案10】:

      按照接受的答案后,执行以下操作为我解决了这个问题:

      FileSettingsProject <your directory/project>Project Dependencies

      选择具有未解析导入的文件所在的目录/项目,并选中该框以告诉 Pycharm 该项目依赖于您的其他项目。

      我的文件夹层次结构与问题中的稍有不同。我的是这样的

      ├── MyDirectory  
      │     └── simulate.py  
      ├── src  
      │     ├── networkAlgorithm.py  
      │     ├── ...
      

      告诉 Pycharm src 依赖于MyDirectory 为我解决了这个问题!

      【讨论】:

        【解决方案11】:

        这对我有用:Top Menu -> File -> Invalidate Caches/Restart

        【讨论】:

          【解决方案12】:
          1. --> 在 PyCharm 中右键单击你的文件所在的目录
          2. 转到 --> 将目录标记为
          3. 选择 --> 源根目录

          你的问题会解决的

          【讨论】:

            【解决方案13】:

            我克隆的项目有一个名为modules 的目录,并且在import this as that 的代码中成功使用了该目录中的文件,但 Pycharm 无法跳转到这些代码片段,因为它无法识别导入。

            将以下设置部分中的模块文件夹标记source 解决了该问题。

            【讨论】:

              【解决方案14】:

              很多时候发生的情况是插件没有安装。例如

              如果你正在开发一个 django 项目并且你没有在 pyCharm 中安装 django 插件,它会显示错误“未解析的引用”。 参考: https://www.jetbrains.com/pycharm/help/resolving-references.html

              【讨论】:

              【解决方案15】:

              我也使用了像上面 Dan 这样的虚拟环境,但是我能够在现有环境中添加解释器,因此不需要继承全局站点包,因此不需要撤消虚拟环境试图实现的目标。

              【讨论】:

                【解决方案16】:

                请检查您是否使用了正确的解释器。我收到错误“未解析的引用'django'”来解决这个问题我从项目设置中更改了项目解释器(将 Python 3 更改为 Python 2.7): 选择项目,转到文件 -> 设置 -> 项目: -> 项目解释器 -> 浏览并选择正确的版本或解释器(例如 /usr/bin/python2.7)。

                【讨论】:

                  【解决方案17】:

                  就我而言,问题是我使用的Virtual environment 无法访问全局站点包。因此,解释器不知道新安装的包。

                  要解决此问题,只需编辑或重新创建您的虚拟解释器并勾选Inherit global site-packages 选项。

                  【讨论】:

                  • 这是否会产生不良后果并破坏使用虚拟环境的一个理由?也就是说,如果您将该环境带到某个地方并且安装了这些全局站点包,那么您就有麻烦了。我就是这么想的。
                  【解决方案18】:

                  在 PyCharm 2019.3.1 中完成 右键单击您的 src 文件夹 -> “将目录标记为” -> 单击“已排除”,您的 src 文件夹应该是蓝色的。

                  【讨论】:

                    【解决方案19】:

                    对我来说,将 virtualenv (venv) 的站点包路径添加到解释器的路径中是可行的。 终于!

                    【讨论】:

                      【解决方案20】:

                      我在这里尝试了两次甚至更多。我终于解决了它,做了一些我在网上从未见过的事情。如果你去Settings>Editor>File Types,底部有一个'Ignore Files and folders' 行。在我的例子中,我忽略了'venv',这是我一直为我的虚拟环境命名的。所以我从要忽略的目录列表中删除了venv;,瞧!我终于能够解决这个问题。从字面上看,我的所有导入问题都已针对该项目进行了修复。

                      顺便说一句,我使用 PyCharm 安装了每个包,而不是通过终端。 (意思是,转到Settings>Interpreter...)。我已经使缓存无效,更改了“源根”,重新启动 PyCharm,刷新了我的解释器路径,更改了解释器,删除了我的 venv ......我尝试了一切。这终于奏效了。显然,不同的人在这里会遇到多种问题,所以这可能对您不起作用,但如果没有其他方法起作用,绝对值得一试,如果不起作用,也很容易扭转。

                      【讨论】:

                        【解决方案21】:

                        就我而言:

                        Directory0
                            ├── Directory1
                            │     └── file1.py  
                            ├── Directory2
                            │     ├── file2.py  
                        

                        进入file1,我有:

                        from Directory2 import file2
                        

                        这会导致“未解析的引用 Directory2”。

                        我通过以下方式解决了它:

                        • 如上所述将父目录 Directory0 标记为“Source Root”

                        • 将光标放在出现错误的文件的另一行上,以便将我的修改考虑在内

                        这很愚蠢,但是如果我不执行第二个操作,错误仍然会出现,并且可以让您认为您没有通过将父目录标记为 Source Root 来解决问题。

                        【讨论】:

                          【解决方案22】:

                          我遇到了同样的问题,也尝试了很多建议,但都没有奏效,直到我找到这篇文章 (https://stackoverflow.com/a/62632870/16863617)。尽管他的解决方案对我不起作用,但它帮助我想出了将 _init.py_ 添加到 --> Settings |编辑 |文件类型 |蟒蛇 |注册模式

                          ScreenShot

                          现在解决了未解决的引用错误。

                          【讨论】:

                            【解决方案23】:

                            Pycharm 使用 venv。在 venv 的控制台中,您应该显式安装软件包或进入settings -> project interpreter -> add interpreter -> inherit global site-packages

                            【讨论】:

                              【解决方案24】:

                              修复它的最简单方法是在您的 pyCharm 软件中执行以下操作:

                              点击:文件>设置>(项目:你的项目名称)>项目解释器>

                              然后点击右侧的“+”图标搜索你想要的包并安装。

                              享受编码吧!!!

                              【讨论】:

                              • 欢迎来到 Stack Overflow,感谢您的回答。虽然这可能是正确的,但今后请避免在没有上下文或更多详细信息的情况下发布图片或指向其他网站的链接。该链接可能会在某个时候停止工作,从而降低此答案对其他用户的用处。
                              • @Cyber​​Jacob 非常感谢,也非常感谢您的建议,我已通过删除图像并添加文本来编辑答案。
                              【解决方案25】:

                              在较新版本的 pycharm 中,您只需右键单击要从中导入文件的目录或 python 包,然后单击“将目录标记为”->“源根目录”

                              【讨论】:

                                猜你喜欢
                                • 2015-11-12
                                • 2014-05-05
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2017-06-27
                                相关资源
                                最近更新 更多