【问题标题】:Indexing of external library fails in PyCharm 4.5PyCharm 4.5 中的外部库索引失败
【发布时间】:2015-06-30 17:19:41
【问题描述】:

这个问题出现在 PyCharm 的早期版本中(参见 this SO postthis one),但它在 4.5 中的表现有所不同。

我正在尝试将另一个库添加到我当前项目的 Python 路径中。这是一个内部库,由与当前项目不同的目录中的一堆.py 文件组成。我执行以下步骤:

  • 转到File -> Settings -> Project: summary -> Project Interpreter
  • 单击对话框中出现的屏幕右上角附近的齿轮图标
  • 从弹出的上下文菜单中选择More...
  • 点击我正在使用的解释器
  • 单击右侧 4 个图标中的最后一个,即带有文件夹和箭头的图标,工具提示为“显示所选解释器的路径”
  • 在结果弹出窗口中推送+
  • 使用文件对话框添加库的路径

这样做了,结果是:

    • 从运行配置运行当前项目代码有效;即外部库在PYTHONPATH
    • 添加的路径不会立即从解释器路径对话框中消失,就像在 4.0 中所做的那样(请参阅上述 SO 帖子之一中对 this answer 的评论)。
  • 不好
    • 新库的索引失败,对外部库的所有引用都在编辑器中标记为未解析的引用

我什至尝试过File -> Invalidate Caches / Restart... 并按下出现的Invalidate and Restart 按钮。坐下来等待索引完成后,我得到了相同的结果。我一直非常小心地设置正确的路径,而且它似乎是正确的,因为运行代码确实有效。

有没有人知道这个问题的解决方法,除了将外部代码添加为内容根吗?

【问题讨论】:

  • 这是什么库?也许库本身做了一些阻止源代码静态分析的事情。这在 Python 中很常见。
  • 库只是我们自己编写的一个内部库——基本上是一个命名目录中的一堆.py 文件。如果我将整个内容添加为内容根,一切正常,但我试图避免这种情况。哪些因素会妨碍源的静态分析?
  • 动态生成模块级变量是最常见的原因。
  • 确保你有一个正确的__init__.py文件
  • 只有我拥有的模块级变量被视为常量;各种众所周知的事物名称。该库由一个包和一个模块组成。代码由一个用于包的.py 文件和一个为模块命名的目录组成。模块目录总是包含一个__init__.py 文件,但到目前为止它是空的。我添加了一个适当的 __all__ 到它,但没有运气 - 索引仍然无法正常工作。我相信我不需要 __init__.py 作为包 .py 和模块目录的兄弟,对吗?

标签: python pycharm


【解决方案1】:

我遇到了一个非常相似的问题。我正在开发一个 OpenStack 组件,所有第三方库都被标记​​为未解析的引用。原来是因为 .tox 目录被 PyCharm 自动排除,这会阻止该目录中的任何虚拟环境被正确索引。

为了解决这个问题,我进入了Preferences 菜单的Editor > File Types 对话框,并从Ignore files and folders 选项中删除了.tox 文件夹。

【讨论】:

    【解决方案2】:

    检查了 JetBrains 支持,他们确认将外部库添加到 PyCharm 项目的唯一方法是:

    • 将库添加为内容根
    • 在同一窗口中将其作为单独的项目打开并将其附加到您当前的项目中

    不是最简洁的方法,因为它们基本上都意味着将其他库的实际代码添加到您的项目中。但目前只有他们。

    【讨论】:

      猜你喜欢
      • 2014-03-19
      • 2015-03-09
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 2016-03-24
      • 1970-01-01
      相关资源
      最近更新 更多