如何让智能感知与 .egg-link 包(在开发模式下安装)一起工作?

How to get intellisense to work with a .egg-link package (installed in development mode)?

在 Visual Studio 2019 年,我试图让智能感知与我使用以下命令安装的软件包一起工作:

pip install -e "git+https://github.com/bmoscon/cryptofeed.git/#egg=cryptofeed"[all]

Here are the docs 解释它的作用。我使用我的项目虚拟环境调用它,一切似乎都正常(即所有文件似乎都已下载并且 link 正确)。

我遇到的问题是主包本身 (cryptofeed) 没有被 intellisense 拾取(它说,“未解决的导入 cryptofeed”),而与它一起安装的所有其他依赖包都被识别很好。

经过一些阅读和一些测试后,我非常确信它不起作用的原因与包的安装方式有关“开发模式”。在我的 ./env/Lib/site-packages 文件夹中,我可以看到 cryptofeed 是一个 .egg-link 文件(有关 here 的更多信息)。 Visual Studio 是否为智能感知处理这些文件(或者只是一般的整个“editable/development 模式”)?有没有我误解或做错了什么?

我想还值得一提的是,我读了这些 MS' docs 这让我觉得也许我可以通过向源代码添加搜索路径来做一个“hacky”解决方案,但没有出现解决或做任何事情。

我终于让它工作了。我已经在多个 repos/packages 上试过了,它对所有这些都有效。

解决方案涉及手动添加搜索路径(如我的问题 post 中所述)。我不知道为什么,但似乎添加的搜索路径必须以 python 包的根目录为目标。如果我只是添加包含源代码的目录,那将不起作用。

即如果安装包的源目录包含 sub-directories like:

pkgDir
├── pkgName
├── pkgName.egg-info
└── tests

在此示例中,您应该尝试添加 pkgDir,而不是 pkgName 作为搜索路径。该目录还包含其他重要文件,例如setup.py;也许这些文件之一是智能感知功能所必需的? IDK.

有时包支持多种语言,所以一定要添加 python 的目录。 IIRC,它与您在安装软件包时为“子目录”flag/setting 设置的目录相同。

例如: pip install -e "git+https://github.com/ccxt/ccxt.git/#egg=ccxt&subdirectory=python"

如果 setup.py 位于根目录,您可能不需要使用 subdirectory 设置,但本质上这意味着它似乎可以与包含 [=13] 的目录一起使用=](和 .egg-info 文件夹)。


同样,我真的不知道为什么这会起作用。您需要定位的文件夹可能与我描述的文件夹看起来非常不同。也许其他人可以给出更具体的答案。

我应该提一下,intellisense 需要一段时间才能加载(可能取决于包的大小)。 不要太快就认为搜索路径是错误的(因为我从添加搜索路径开始工作大约需要 1 分钟)。

根据 Visual Studio (2019) python 支持选项和设置 here 的 MS 文档,它有一个选项“添加链接文件时更新搜索路径”。这是默认启用的,但似乎不适用于此目的;它似乎指的是另一种链接文件。