【问题标题】:PyCharm, resolve a library from a project folderPyCharm,从项目文件夹中解析库
【发布时间】:2019-06-05 01:21:17
【问题描述】:

我有一个普通的库,用 pypi 呈现。在其中,有一种棘手的方法可以解析我们导入的模块中的名称。 如果我将它安装到 Python 文件夹,PyCharm 会以一种常见的方式解析它,构建一个骨架,然后我会自动完成它。 但是在我们的项目中,我们将使用过的库保存在项目文件夹中,PyCHarm 不会读取和处理该库。为此,我得到了“未解决的参考”检查提升和红色波浪线。

如何让 PyC​​harm 解析项目文件夹中的库?

例子:

MyProjectRoot
    -- external_libs
        --six.py

当我写作时:

from external_libs.six.moves import range

PyCharm 用黄色标记“已移动”,用红色波浪线标记“范围”。

【问题讨论】:

  • 尝试将其标记为源目录。
  • 很遗憾,这没有帮助。
  • 你能分享一个例子吗?另外,现在你可以使用jetbrains.com/help/pycharm/suppressing-inspections.html
  • Kacper,我知道禁用检查并且不想使用它。我在问题中添加了一个示例。
  • 不幸的是,six 包会在获取属性时创建特殊的代理对象来加载底层模块。基本上,external_libs.six.moves.range 函数只是内置范围函数的别名。然而,代理设置似乎是在安装库时由 PyCharm 自动完成的,但我不确定如何手动复制它。

标签: python pycharm


【解决方案1】:

来自documentationsix 包:

注意:为了导入表单:

from six.moves.cPickle import loads work

六地特约代理 sys.modules 中的对象。这些代理延迟加载底层 获取属性时的模块。

因此,PyCharm 中的基本路径解析器无法轻松找到为此包和其他使用相同方法导入的模块的实际路径。


为了克服这个问题,PyCharm 使用了Typeshed Stubs

Typeshed 是一组带有标准类型注释的文件 Python库和各种包。 Typeshed 存根提供 Python 类、函数和模块的定义 类型提示。 PyCharm 使用这些信息来更好地完成代码, 检查和其他代码洞察功能。

可以在official repository 中找到的类型化存根用作查找表。例如,如果您正在寻找来自 six.movesrange 函数,这只是内置 range 函数的别名,它们将帮助 PyCharm 知道如何解决它,方法是指定当您键入 from six.moves import range 时应该解析为from builtins import range


您可以按照PyCharm documentation 覆盖捆绑的类型化存根。

示例: 如果你想使用six 包并且你有这样的文件夹结构:

six_reproduce
    |─── main.py
    │
    │
    ├───external_libs
    │   |────six.py

转到原始类型库并下载您需要的存根。 对于 python 3,可以在 here 找到 six 库的存根。

下载文件夹,放到external_libs下,这样你的项目结构就变成这样了:

six_reproduce
    |─── main.py
    │
    │
    ├─── external_libs
    │   |──── six
    │   │      |──── moves
    │   │      │
    │   │      |──── __init__.pyi
    │   │
    │   |──── six.py

PyCharm 现在应该能够解析您的导入了!

【讨论】:

    【解决方案2】:

    试试这个:

    import sys
    sys.path.append("external_libs")
    import six
    

    【讨论】:

    • 这在“设计时间”内无济于事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 2017-01-07
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多