关于python:PyCharm显示有效代码的未解析引用错误

PyCharm shows unresolved references error for valid code

我正在用Pycharm做一个项目。该项目已打开并配置了解释器,可以成功运行。远程解释器路径映射正确。这似乎是正确的配置,但是pycharm用"未解决的引用"错误突出显示了我的有效代码,即使对于内置的python函数也是如此。即使代码在运行,为什么不检测到这些?有没有办法让Pycharm正确识别这些?

这个问题的具体实例是一个远程解释器,但是这个问题也出现在本地解释器上。


文件使缓存无效…重新启动pycharm会有所帮助。


德米特里的回答对我不起作用。

我的工作是通过项目解释器,选择"路径"选项卡,然后点击该子菜单中的刷新按钮。它自动填充了一个叫做"Python骨架"的东西。

编辑:使用pycharm 3.4.1的屏幕截图(它隐藏得很好)

enter image description here


有很多解决方案,有些比其他更方便,而且它们并不总是有效的。

以下是从"快速"到"烦人"的所有尝试:

  • 执行File->Invalidate Caches / Restart,重新启动pycharm。
    • 您也可以在下面的任何方法之后执行此操作,只是为了确保这一点。
  • 首先,检查您运行的是哪个解释器:Run->Edit Configurations->Configuration->Python Interpreter
  • 刷新解释器的路径:
    • File->Settings
    • Project: [name]->Project Interpreter->project explorer:gear icon->More...
    • 单击"显示路径"按钮(底部一个)
    • 单击"刷新"按钮(底部一个)
  • 删除解释器并再次添加:
    • File->Settings
    • Project: [name]->Project Interpreter->project explorer:gear icon->More...
    • 单击"删除"按钮
    • 点击"添加"按钮,重新添加您的仪表。
  • 删除项目首选项
    • 删除项目的.idea文件夹
    • 关闭并重新打开Pycharm
    • 从头开始打开项目
  • 删除你的PyCharm用户首选项(但首先备份它们)。
    • Mac上的~/.PyCharm50
    • 窗户上的%homepath%/.PyCharm50
  • 切换到另一个解释器,然后再次切换到所需的解释器。
  • 创建一个新的虚拟环境,并切换到该环境的解释器。
  • 全部切换到另一个解释器,不要切换回。


当无效缓存或刷新路径不起作用时,我发现自己正在删除并重新添加远程解释器来解决这个问题。

我使用vagrant,如果我在多虚拟机设置中添加一个新的虚拟机,转发的端口会发生变化,当pycharm尝试使用错误的ssh端口时,这似乎会混淆pycharm。更改端口似乎对断开的引用没有帮助。


在我的例子中,它是目录结构。我的项目如下:

1
2
3
4
5
+---dir_A
    +---dir_B
        +app
        |
        \-run.py

所以右键单击dir_b>"将目录标记为">"项目根目录"


如果其他解决方案都不适合您,请尝试(备份)并删除~/.pycharm40文件夹,然后重新打开pycharm。这也会扼杀你所有的偏好。

在Mac上,您要删除~/library/caches/pycharm40和~/library/preferences/pycharm40。

在Windows上:c:users$user.pycharm40。


使用PyCharm 4.0.6(OSX 10.10.3)进行测试遵循以下步骤:

  • 单击Pycharm菜单。
  • 选择项目解释程序。
  • 选择Gear(档位)图标。
  • 选择更多按钮。
  • 选择您所在的项目解释器。
  • 选择目录树按钮。
  • 选择重新加载路径列表。
  • 问题解决了!


    很抱歉碰到这个问题,不过我有一个重要的更新要做。

    如果您使用的是其他版本,您也可能希望将项目解释器恢复为python 2.7.6,这对我的ubuntu安装pycharm 4.04 professional很有用,但没有其他建议解决了我的问题。


    您可以尝试关闭pycharm,从项目中删除.idea文件夹,然后再次启动pycharm并重新创建项目。这对我有效,而无效缓存则没有。


    在所有建议的解决方案都不适用于我之后,我终于实现了这一目标。我在玩一个django-rest框架项目,使用的是我用它设置的virtualenv。我可以通过将根文件夹标记为源根来修复pycharm,但是Django的服务器会抛出解决异常的方法。所以一个可以工作,另一个不行,反之亦然。

    最后,我只需将子文件夹标记为pycharm中的源。所以我的结构是这样的

    1
    2
    3
    -playground
         -env
         -playground

    第二个游乐场文件夹是我必须标记为源根的文件夹,以便一切按预期工作。这并没有给我的场景带来任何问题,所以这是一个可行的解决方案。

    我只是想分享一下,以防别人能使用它。


    它也可能是一个Python版本的问题。我得选一个合适的才能让它发挥作用。enter image description here


    极客真是个噩梦,我对不同堆垛的融合回答:

    百万千克1切换到本地翻译/usr/bin/pythonx.x并应用百万千克1百万千克1查看上述答案的路径百万千克1百万千克1找到骷髅之路。我的是(/home/tim/desktop/pycharm-community-2016.2.3/helpers/python skeletons)百万千克1百万千克1切换回virt解释器,如果骨架路径没有自动显示,则手动添加骨架路径。百万千克1


    以上所有的解决方案都不适合我!如果您正在为项目使用虚拟环境,请确保将虚拟环境目录中的python.exe文件用作项目(Alt + Ctrl + Shift + S)的解释器。这为我解决了这个问题。


    在我的例子中,检查错误是由于一个非常具体的python代码案例而出现的。一个包含两个numpy函数和两个list访问的min函数使我的代码检查产生了这种错误。

    在下面的示例中,删除"d=0"行会按预期提供未解决的引用错误,但读取不会使代码检查器的错误消失。之后我仍然可以毫无问题地执行代码。

    1
    2
    3
    4
    import numpy as np
    def strange(S, T, U, V):
        d = 0
        print min(np.abs(S[d]), np.abs(T[d]), U[d], V[d])

    清除缓存和重新加载路径列表不起作用。只有使用以下示例修补程序之一更改代码才有效:

      百万千克1"最小"参数的另一个顺序:示意性的S u v而不是S t u v或T s u v百万千克1百万千克1使用方法而不是函数:s[d].abs()而不是np.abs(s[d])百万千克1百万千克1使用内置的abs()函数百万千克1百万千克1将数字添加到所选参数:u[d]+0。百万千克1


    我关闭了所有其他项目,在Pycharm单独运行我所需的项目。我从pycharm创建了一个单独的virtualenv,并使用pip在其中添加了所有必需的模块。我在项目的解释器中添加了这个虚拟环境。这解决了我的问题。


    如果您只想忽略一些"未解决的引用"错误,也可以通过将其放在类/方法/函数前面来显式地告诉它pycharm:

    1
    # noinspection PyUnresolvedReferences


    如果您使用的是vagrant,那么错误可能是由错误的python解释器引起的。在我们的vagrant中,我们使用的是pyenv,所以我不得不把Python Interpreter path的路径从/usr/bin/python改为/home/vagrant/.pyenv/versions/vagrant/bin/python。氧化镁


    您使用的是virtualenv吗?

    如果是这样,您需要通知pycharm所需python.exe位置的每次更改(仅/activate对于pycharm来说是不够的)。

    确保Pycharm指向正确的接口和包:文件->设置->项目->项目解释器。单击设备并选择virtualenv脚本文件夹下的python.exe。

    氧化镁