【发布时间】:2015-06-30 17:19:41
【问题描述】:
这个问题出现在 PyCharm 的早期版本中(参见 this SO post 和 this 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和模块目录的兄弟,对吗?