Pytorch: PyTorch 0.4.0 中的“类型提示”损坏,与 IDE 相关(如 PyCharm)

创建于 2018-05-05  ·  106评论  ·  资料来源: pytorch/pytorch

如果您有问题或需要帮助和支持,请联系我们
论坛

如果您要提交功能请求,请在标题前加上 [功能请求]。
如果您正在提交错误报告,请填写以下详细信息。

问题描述

最近,我发现 PyCharm 无法为torch.zeros自动完成。

PyCharm 说

Cannot find reference 'zeros' in '__init__.py'

我挖了一会儿,发现坏掉了Type Hints

从这些变化中,
https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4
https://github.com/pytorch/pytorch/wiki/Breaking-Changes-from-Variable-and-Tensor-merge

特别是, https: //github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4#diff -14258fce7c17ccb97b488e64373b0803R308@colesbury
对于许多 IDE,此行无法生成Type Hints

最初, torch.zerostorch/_C/__init__.py
但是,它转移到了torch/_C/_VariableFunctions

代码示例

https://gist.github.com/kimdwkimdw/50c18b5cf72c69c2d01bb4146c8a2b5c
这是此错误的概念证明。

如果你看main.py

import T_B as torch

torch.p2()  # IDE can detect `p2`
torch.p1    # IDE cannot detect `p1`

系统信息

请复制并粘贴我们的输出
环境采集脚本
(或手动填写下面的清单)。

您可以获取脚本并使用以下命令运行它:

wget https://raw.githubusercontent.com/pytorch/pytorch/master/torch/utils/collect_env.py
# For security purposes, please check the contents of collect_env.py before running it.
python collect_env.py
  • PyTorch 或 Caffe2:
  • 你是如何安装 PyTorch 的(conda、pip、source):
    conda、pip、source 的任何情况。

  • 您使用的构建命令(如果从源代码编译):

  • 操作系统:任何
  • PyTorch 版本:0.4.0
  • Python版本:3.6.5
  • CUDA/cuDNN 版本:.
  • GPU型号和配置:.
  • GCC 版本(如果从源代码编译):.
  • CMake 版本:.
  • 任何其他相关库的版本
medium priority (this tag is deprecated)

最有用的评论

将优先考虑这个问题,因为很多用户一直在请求这个……我们会尽力更多地研究它。

所有106条评论

任何相关的点? #4568

同样的问题,pycharm在使用pytorch0.4的时候基本没用。 几乎所有内容都带有下划线,因为“找不到引用”或“不可调用”。

torch

torch.tensortorch.maxloss.backward没有自动完成、快速定义和快速文档。

  • 操作系统:Linux(带有 Gnome 的 64 位 Fedora 27)。
  • PyTorch 版本:0.4.0。
  • 您如何安装 PyTorch(conda、pip、source):pip3。
  • Python 版本:3.6.5。
  • 我使用 CPU(无 CUDA)。

如果您对如何解决此问题有任何建议,请告诉我们!

听起来 PyCharm 对函数的搜索可以改进,但我不确定从 PyTorch 方面可以做什么。 以torch.tensor为例, help(torch.tensor)获取文档,而dir(torch)显示“张量”作为成员。

@zou3519
我认为下面的代码风格不好。

for name in dir(_C._VariableFunctions):
    globals()[name] = getattr(_C._VariableFunctions, name)

来自https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4

globals()[name]不是Pythonic方式。 这不仅是 PyCharm 的问题,也是 Python 代码风格的问题。

我认为_VariableFunctions不需要是 Class。

我正在尝试为这个问题做 PR。 你会检讨吗? @zou3519

@kimdwkimdw我不知道那里的 global() 发生了什么,或者什么会使它变得更好,但是是的,请提交 PR,我会查看它:)

听起来 PyCharm 对函数的搜索可以改进,但我不确定从 PyTorch 方面可以做什么。

只是想指出,我从未在 PyCharm 中使用任何其他包遇到过这个问题。 这并不是说 PyCharm 不应该以不同的方式做事,但这个问题似乎并不常见。

我主要处理这些文件。

tools/autograd/gen_autograd.py
tools/autograd/templates/python_torch_functions.cpp

torch/lib/include/torch/csrc/Module.cpp

试图找出生成 C 扩展时发生了什么变化。
我会尽快做公关。

任何更新?

我在我的叉子中做了一个工作示例。

如果有人想先使用自动完成功能,请尝试以下操作。

1. git 克隆

git clone -b pytorch-interface https://github.com/kimdwkimdw/pytorch.git

2. 安装 PyTorch

3. 清除 PyCharm 中的缓存

  • 通常缓存位于/Users/USERNAME/Library/Caches/PyCharm*/python_stubs/
  • 在 PyCharm 中检查您的project interpreter

pull request ,我需要添加更多提交来组织结果。

按照上述说明安装失败。
有什么简单的安装方法吗?

我有同样的问题。 我一直很喜欢 pytorch 和 pycharm。 真遗憾他们不能很好地合作:(
期待更新。

这个真的很奇怪,我在python控制台用pycharm用同样的代码,是正常的,但是在编辑器里。 O__O“…

将优先考虑这个问题,因为很多用户一直在请求这个……我们会尽力更多地研究它。

很多用户都在请求......我应该在这个周末提出一个拉取请求。

我将我的代码与当前的master分支合并。

Type Hints现在还活着。

MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py install

结帐公关 - https://github.com/pytorch/pytorch/pull/8845

抄送 @zou3519

@kimdwkimdw我应该从源代码重新安装 pytorch 吗? windows平台有什么简单的续费方法吗?

@541435721
是的你应该。 查看https://github.com/pytorch/pytorch#install -pytorch 这个页面。
我不知道有更简单的方法来构建它。

对于 Pycharm(2018.1,具有重建缓存)似乎没有任何改变。

您应该查看@kimdwkimdw的拉取请求,而不是 pytorch master。 拉取请求尚未合并到 pytorch master 中。

这是公关: https :

是的,这就是我所做的:

git remote add kimdwkimdw https://github.com/kimdwkimdw/pytorch.git
git fetch kimdwkimdw
git checkout --track kimdwkimdw/interface-0
git submodule update --init
CC=gcc-5 CXX=g++-5 CFLAGS="-march=native -O2" CXXFLAGS="-march=native -O2" python setup.py build
python setup.py install  --optimize=1 --skip-build 

@nlranger你应该手动删除 python 存根。 它不能用“无效缓存”删除。

设置项目时,Pycharm 会初始化其 Python 存根文件。

删除 python 存根目录后,重新启动 Pycharm。

PyCharm 将重新生成它的 Python 存根。

似乎没有改变任何东西,但这可能是我的设置。 也许我们可以等待其他人尝试?

您应该找到 python 存根目录。 当您单击 torch 时,您可以找到存根目录。

@kimdwkimdw我已经重新安装并删除了缓存,但没有任何变化。

image
你不能通过这个invalidate Caches删除 PyCharm Cache

在 MacOS 中,您应该手动删除~/Library/Caches/PyCharm2018.1/python_stubs/文件夹。

还有另一种选择。 如果您创建一个新项目并更改您的解释器设置,PyCharm 将使其python stubs

@541435721 @nlranger

这正是我所做的(使缓存无效,停止 pycharm, rm .PyCharm2018.1/system/python_stubs/* -rf )。
顺便说一句,我正在使用 python 3 以防万一(我在 PR 中看到了一些 python2 测试)。

@kimdwkimdw
我这样做是作为指导,我的操作系统是 windows10,但我正面临这个问题。

@kimdwkimdw我可以做到! 谢谢你!

由于其他人遇到了麻烦,我只想指出@kimdwkimdw的修复对我

source path/to/my/venv/bin/activate
git clone https://github.com/kimdwkimdw/pytorch.git
cd pytorch
git checkout interface-0
git submodule update --init
MACOSX_DEPLOYMENT_TARGET=10.13 CC=clang CXX=clang++ python setup.py install

我确实手动删除了我的存根,但我不知道是否需要这样做。 无论如何,它至少适用于我的系统。

但是,我发现torch.float32 (和其他数据类型)和torch.backends.cudnn仍然没有被 PyCharm 解析(至少在我的情况下)。

@shianiawhite好点。 谢谢。 我想我应该为 Pull Requests 添加更多更新。

@zou3519

对我不起作用,即使我成功构建了@kimdwkimdw的 PR 并手动删除了~/.PyCharmCE2018.1/system python_stub ~/.PyCharmCE2018.1/system

很抱歉再次提问,但有关于此的消息吗?
它有助于在 jetbrains https://youtrack.jetbrains.com/issues/PY?q=pytorch 上打开问题吗?

我在 Ubuntu 16.04 和 PyCharm 2017.3 中遇到了同样的问题

奇怪的是,当我在 python 控制台中运行时,它正确显示自动完成。
working_in_console

但是当我在编辑器中运行它时它不起作用。
not_working_in_editor

我正在使用 python 3.6.6 和 PyTorch 0.41。 我使用 pip 和 cuda 9.2 安装了它

我在 Window7 PyCharm2018、Win10 PyCharm2018、Win10 VS2017、Win10 Spyder 中也有同样的问题。
我尝试使用 pytorch0.4.0 和 pytorch0.4.1,两者都无法自动完成。
只有 ipython 正确显示自动完成。
请帮我

我在 PyCharm youtrack 中打开了一个问题。 也许他们也可以提供帮助。

https://youtrack.jetbrains.com/issue/PY-31259

我已经在 Windows 10 上使用 pytorch0.4.1 尝试过 VS2017 和 PyCharm2018.2,但自动完成功能对我不起作用。

通过 pip 和 PyCharm-2018.2 安装的 PyTorch-0.4.1 仍然存在相同的问题。

如果人们可以在这里投票就好了https://youtrack.jetbrains.com/issue/PY-31259
所以修复具有更高的优先级

你好!
我是 PY-31259 的受让人。
PyCharm 在进行静态分析时不运行任何用户代码(排除是可以轻松调查环境的控制台)。 因此,大多数动态声明属性的方法都是不可发现的。

@sproshev感谢您的回复。 你能解释一下为什么https://github.com/pytorch/pytorch/pull/8845有效吗?

对于上下文,pytorch 在导入时会动态分配属性。 @kimdwkimdw的拉取请求保留了这一点,但以 pycharm 能够遵循的不同方式进行。

我认为解决这个问题的最合理的方法(至少对于 Python 3)是生成一个 .pyi 存根。
快速测试似乎表明这会很好地工作。
我自己不是 PyCharm 用户,但如果有足够多的人会非常高兴,我可以看看我们是否可以从 native_functions.yaml 和朋友中生成一个。

@t-vi 我不知道你在说什么,但鉴于这一直在拖延,请生成 .pyi! :D

所以主模块看起来很简单:
image

出于某种原因或其他原因,只是有

class Tensor: ...

<strong i="6">@overload</strong>
def randn(size: Tuple[int, ...], *, out: Optional[torch.Tensor], dtype: dtype=None, layout: layout=torch.strided, device: Union[device, str, None]=None, requires_grad: bool=False) -> Tensor: ...

__init__.pyi中似乎不允许 PyCharm 推断在a = randn((1,2))a属于torch.Tensor 。 :(
(实际上我在课堂上也有注释,但只有在我拼出注释a : torch.Tensor = ...才会使用它们)

如果你想尝试,我在这里发布了 pyi: https ://gist.github.com/t-vi/0d0ae013072f96f50fa11fbc2287e33b

同样,如果您知道为什么 PyCharm 似乎没有识别返回类型,如果您能分享它,我将不胜感激。

@t-vi 该解决方案也适用于 VS 代码。 谢谢!

谢谢赵宗悦的反馈。 我还没有尝试使用 VS 代码,但是如果 pyi 工作包括返回类型,我将提交一个补丁来生成它。

谢谢, __init__对我有用! 我正在使用名为“main”的 conda env,所以我所做的是:

pushd /Users/yaroslavvb/anaconda3/envs/main/lib/python3.6/site-packages/torch
rm __init__.py
wget https://gist.githubusercontent.com/t-vi/0d0ae013072f96f50fa11fbc2287e33b/raw/e0e3878fa612c5a4557ec76c011fd5f9453ff0e8/__init__.py
popd

我不需要重新生成缓存

至于为什么它不能识别 Tensor 返回类型,它与文件中的语法错误有关。 在 PyCharm 中打开文件,它显示了其中的一些

screenshot 2018-10-05 16 33 51

一旦我删除了有错误的行,我就会自动完成
screenshot 2018-10-05 16 35 40

我注意到的另一件事是 Tensor 类成员提示返回 -> Tensor,这是一个循环引用,因此 PyCharm 也无法识别它。 解决方案是对 Tensor 类的方法执行 -> "Tensor" 而不是 -> Tensor (https://www.python.org/dev/peps/pep-0484/#forward-references)

谢谢@yaroslavvb ,这正是我所缺少的!

提高能见度。 对于 PyCharm 用户来说,这实际上是一笔巨大的交易。 我正在评估 PyTorch 作为我们 tf/keras 代码库的替代品,这个问题对我们来说是一个障碍。

我使用pytorch 0.4.1

是否有任何具体的解决方案。 我使用pip来安装pytorch。 pytorch内置函数torch.xxx在pycharm中无法识别的太多了。

如果无法修复。 你能帮忙推荐一个替代 IDE 来建议所有 pytorch 功能并帮助在框架内导航(如 Ctrl+B 跳转到 pytorch 功能的定义)。

谢谢你。

有人愿意做 PR (@t-vi) 吗? 我现在正在使用 PyTorch nightlies,每次升级时都这样做有点麻烦......

我正在与核心开发人员积极讨论这个问题,以便在构建过程中何时以及如何生成 PYI 有一个很好的解决方案。 困难的部分是将来自 python 定义的位的信息与来自_C位的信息合并。 我们正在努力找出一个好的解决方案,我希望尽快有一个 PR,但它可能需要一轮迭代。

如果您正在寻找一种方法来设置我的优先级,请不要犹豫,通过邮件与我联系。

替换 __init__.py 不是一个好的解决方案。 例如,在 @t-vi 的要点中,当使用

a = torch.cat([a,b], dim=-1)

PyCharm 给出一个警告,指出缺少参数“out”,但“out”参数是可选的。
在另一种情况下,

x = torch.empty(10, 2)

这行代码是正确的,因为该方法可以接受 (*sizes, ...),但 PyCharm 也会警告无效参数。 有了这么多奇怪的警告,我终于选择忽略代码检查设置中的“torch.*”...

@hitvoice感谢您指出这些。
要点只是在获得适当的 pyi 方面非常粗糙,因此非常感谢您的反馈! 我希望您能够在下一次迭代中重新打开检查。

我认为 Optional[out] 应该是out : Optional[Tensor]=None ,对吧? 这很容易解决。
对于空的,它有点复杂,因为它可能意味着我们需要只用一个列表参数拆分声明来也接受可变参数(我曾经盯着解析 python 参数的 C 代码太久了),但我们肯定致力于提供很棒的类型提示。

你好,
我更新了__init__.pyi ,如果您能试一试,我将不胜感激。

  • 我对生成方法更满意,所以即使这是在幕后,我认为在 PR 方面取得了很好的进展。
  • 我还为一些 Python 定义的函数(btrifact、einsum)生成了提示,但我没有添加所有这些。
  • 我想我修复了(在生成代码中) @yaroslavvb@hitvoice指出的缺陷。

如果您认为这大致有效,我将寻找调用代码的方法(它需要在构建之后)并且我们(几乎)有一个 PR。

@t-vi 看起来不错。 到目前为止,它对我来说效果很好。

只是好奇,生成python定义的函数提示(btrifact,einsum)的原因是什么? 我正在使用夜间构建,那些似乎在没有提示的情况下为我工作。

@elliotwaite在我的(简短)实验中,我似乎没有对结果进行自动完成,除非我在结果上添加类型提示,即在x = einsum('ii', a); x. ,现在获取x的张量方法。 另外,我不确定拥有 pyi 会如何影响未包含在 pyi 中的内容的处理方式。 据我了解(这不是很好),这是微妙之处。

@t-vi 啊,我明白了。 我只是在完全包含 pyi 文件与不包含之间进行测试。 你是对的,如果我包含 pyi 文件并且只注释掉 einsum 提示行,它也会破坏我的自动完成功能。 谢谢解释。

@t-vi 仅在将单个参数传递给 torch.tensor() 时收到“参数未填充”警告。

image

@elliotwaite感谢您的关注!
张量太特殊了,所以我可能需要手动包含正确的签名。
我会更新 PR。 当我更新要点时,您会发现更多问题吗? (这是非常手动的,如果它可以帮助您试一试,我会这样做。)

@t-vi 我也收到了关于 torch.Tensor.view() 的“意外参数”警告:
torch.randn(2, 2).view(1, 1, 2, 2)

我还制作了一个脚本来搜索所有文档并提取所有“tensor.*”字符串。 然后我测试了它们的自动完成功能。 这是自动完成功能尚未起作用的列表。 我使用了 print() 函数来测试并确保在运行脚本时它们实际上是可访问的。
https://github.com/elliotwaite/pytorch_typehints/blob/master/no_autocomplete.py

@elliotwaite是的,张量缺少一些可变参数(我想我也没有对 yaml 中的 kwonly 注释采取行动)。
使用 doc(string)s 来查看注释是否良好(或至少有足够自由的机会)的想法很棒,我将把它作为测试的一部分。

8845 是从 PyCharm 方面确认的。 但总的来说,最好有pyi存根,因为它们至少包含类型信息。 +1 给他们。

这个问题普遍存在于所有使用 Jedi 作为 Python 完成后端的 IDE 中,对吗? 您的解决方案也是通用的还是特定于 PyCharm 和 VS Code 的? 我使用 emacs 和 Jedi 作为完成后端,我有同样的问题。 但是,有趣的是,您可以在 IPython 控制台中尝试完成,它可以工作! 它看到了所有的功能,这怎么可能?

好吧,IPython 使用动态自省,并且总是有效(它仅您创建对象后才有效,因此您将能够完成mytensor.a而不是mytensor.abs().m ,您可以使用类型提示。
据我了解 VSCode 和 Jupyter 也使用 Jedi。 存根(.pyi 文件)是在现有模块之上添加类型信息的“标准”方式,但它们还没有像人们希望的那样得到广泛支持(并且仍然存在极端情况,例如您无法表示您可以通过省略号(“...”)到索引函数)。 正确的做法是跳到 Jedi 并添加类型提示存根支持 (https://github.com/davidhalter/jedi/issues/839)。 您有机会投入时间或金钱来改进您的工具链!

@t-vi 感谢继续跟踪这个问题!

我知道Stubs是解决这个问题的一个很好的方法。
https://www.python.org/dev/peps/pep-0484/#stub -files

但是, Docstring不是用存根生成的。 添加Docstring怎么样?

@t-vi 我不明白我该怎么做。 改进我的工具链是什么意思? 我目前使用 Jedi,但我不太了解如何使用这些存根文件。 这是我应该写的东西,还是存在于模块中,我必须更新 Jedi? 它像 C++ 中的头文件吗?
您链接的PEP 文档和问题对我如何开始使用它们并没有真正的帮助。

@kimdwkimdw你把文档字符串放在哪里以便每个人都能找到它们? (我认为您不能将它们放入 PYI(?))。 如果你知道把它们放在哪里,我一定会把它们放在那里......
@piojanu Jedi 似乎有一个打字分支,但我不知道这是否是关于 pyi 的。 可能最好询问绝地作者如何帮助实现 pyi 支持。

@t-vi 我现在明白了,谢谢。

最初在 PyTorch 0.3.0 和我的 PR(https://github.com/pytorch/pytorch/pull/8845)中使用Docstring推断方法签名和类型。
image

@t-vi
Docstrings可以添加在PYI中的每个方法下面。
image

其中大部分位于_torch_docs.py

对于@sproshev的评论,我认为 #8845 不仅在 PyCharm 中是一个好方法,而且在其他 IDE 中也是一个好方法,因为它使用了导入模块的标准方式。 因此,PyCharm 可以自动生成它的Python stubs

PyTorch's original way 0.3.0或 #8845 在 PyCharms 中生成,在 IPython 中。
类型信息可以包含在gen_python_functions.py或其他中。

我同意生成显式pyi文件是解决此问题的一种方法。 但也许不是最干净的方式。

同样的问题,pycharm在使用pytorch0.4的时候基本没用。 几乎所有内容都带有下划线,因为“找不到引用”或“不可调用”。

torch

@nimcho我也有这个问题。这是为什么?

我在我的 Mac 上每晚安装火炬,Pycharm 根本无法提示它,尽管当我按下 Command-Click 时能够跳转到源代码。 删除以下文件夹中的缓存目录后,问题得到解决。

  • /Users/USERNAME/Library/Caches/PyCharm**/python_stubs
  • /Users/USERNAME/Library/Caches/PyCharm**/LocalHistory
  • /Users/USERNAME/Library/Caches/PyCharm**/caches
  • /Users/USERNAME/Library/Caches/PyCharm**/tmp
  • /Users/USERNAME/Library/Caches/PyCharm**/userHistory

pytorch 1.0.0 仍然存在这个问题。 如何使用上述解决方案解决此问题?

这太尴尬了……将近 8 个月了 :-(

@ebagdasa我鼓励我们保持这种高效而不是刻薄。 你说的“你”是谁? 根据我的经验,制作软件并不总是有很好的编辑器支持。

给出为什么这需要这么长时间才能解决的背景:

  • 我们核心开发人员都没有使用 PyCharm,所以首先很难了解这个问题
  • 一旦我们开始研究它,就会发现这是一个跨项目的问题,即部分是 PyCharm 支持自动完成的 CPython 类型的一部分,部分是 PyTorch 可以做些什么来解决 PyCharm 在此设置中的限制。

    • 这需要结合了解 PyCharm 的内部结构和 PyTorch 的内部结构。 我希望你明白这其中的困难

    • 与此相反,Microsoft VSCode + PyTorch 可以很好地用于自动完成,IPython 自动完成也可以很好地工作。 所以@ebagdasa我不认为你的评论是相关的。

最后,@ kimdwkimdw和 @t-vi 有修复,例如在https://github.com/pytorch/pytorch/pull/12500通过生成显式类型提示,一旦 PR 进入,我们应该有希望修复 PyCharm问题。

和往常一样,这是一个开源项目,所以如果你们中的任何人可以提供帮助,请随时这样做。 例如@kimdwkimdw和@t-vi 在他们自己的空闲时间做这件事,并且不为此获得报酬,

@ebagdasa ,你应该要求退款

好吧,这是一个令人失望的评论,看看我的代码是如何被编辑器突出显示的。 对不起,伙计们,我明白它是如何工作的。 继续! 也许是时候尝试 VSCode 了。

@soumithtorch.randn等一些函数上,VS Code 的自动完成功能也被破坏

1547171211663

和往常一样,这是一个开源项目,所以如果你们中的任何人可以提供帮助,请随时这样做。 例如@kimdwkimdw和@t-vi 在他们自己的空闲时间做这件事,并且不为此获得报酬,

如果他们 _did_ 得到报酬当然会很好...... FAIR 是否有可能使用 gitcoin 之类的东西来鼓励赏金参与? 当然,FAIR 的人已经因为他们的贡献得到了丰厚的回报,这里的大多数人(像我一样)可能都忙于日常工作......

我已经尝试过使用 pip 或 conda 的 VS Code、Atom 和 Pycharm,但它们都不能在某些功能(如 torch.max())上正常工作以自动完成。 IPython 和 Jupyter 没有这个问题,但它们不是编辑器。

和这里一样。 试过 PyCharm , VS code , Spyder .. torch.cat 不可能搞定,和 Longtensor 一样。

在本期的所有评论中,这一直被称为与 PyCharm 相关的问题,并且有人提到这是 PyCharm 的内部结构和 PyTorch 的内部结构如何协同工作的问题。 这是对问题的错误描述,这样看待它可能不会导致正确的解决方案。 PyCharm 正在采用一种相当标准的方法来解决包问题,并且正如其他几个人所提到的,这个问题并不是 PyCharm 独有的。 PyCharm 恰好是在 PyTorch 中遇到此问题的最受欢迎的编辑器。 任何不动态解析包(为了速度目的)的编辑器都会有这个问题。 我认为 IPython/Jupyter/etc 可以正确解决它的事实是例外而不是规则。 我只是想强调这一点,这样就不会过多地关注“让它与 PyCharm 一起工作”,而不是“让它在一般情况下工作”。

话虽如此,此 PR中正在处理的存根是一个很好的“标准”解决方案,并且应该能够解决一般问题。 对于那些正在寻找快速临时解决方案的人,请按照要点中的说明将该存根文件复制到您的 dist-packages/site-packages 中。 手动添加任何其他缺失的部分,并报告这些缺失的部分以确保它们得到处理。

嗨,大家好! @t-vi 的补丁已合并到 master,因此如果您更新,您应该在 master 上为 Torch 自动完成工作。 此外,我们为 1.0.1 提交了一个手动生成的类型存根,因此当该版本发生时,自动完成功能也适用于该版本的人员。

类型存根可能不足以实际使用 mypy 对代码进行类型检查。 我们正在#16574 中跟踪此后续工作,如果它在那里影响到您,请通过管道通知。 此外,我们只修复了火炬的自动完成功能; 如果您在其他模块上遇到自动完成问题(或者您认为火炬上缺少标识符),请通过错误报告告诉我们。

谢谢你的耐心!

仅供参考,新的 v1.0.1 版本现在已经解决了这个问题,并且已经发货。

@ezyang torch.cudapyi丢失,例如在使用torch.cuda.is_available

我得到了 VSCode 的智能感知,可以在 Torch 1.0.1 上部分工作,但仍然缺少一些功能,例如torch.as_tensor

PyCharm 中的某些功能也出现错误并且没有自动完成功能(当我最需要它时它丢失了),我认为这还没有完全解决。

上周末我写了我的第一个 PyTorch 程序,所以不确定我是否在设置上犯了一些错误。

@vpj它已在 PyTorch v1.0.1 中修复。 任何更低的问题仍然存在。 检查print(torch.__version__)

版本是 1.0.1post2

pytorch_missing_defs

__init__.pyi 文件中缺少某些定义。

PyCharm 似乎也引起了一些问题,因为它无法推断返回类型。 例如,它似乎没有推断出torch.exp的返回值是Tensor (但是返回类型是通过Tensor.exp推断出来的)。 虽然返回类型是在torch.exp方法定义中定义的。

是的,我也升级到“1.0.1.post2”
并且自动完成似乎不起作用

image

所以,虽然我们解决了更大的问题,但显然仍然缺少一些命名空间。

我在这里为此打开了一个新的跟踪任务: https :

我不太确定这个? (这是固定的吗?)控制台工作正常。
(但from torch.utils.data import DataLoader, Dataset有效)
untitled2____Documents_python_untitled2__-_____main_py

@yarcowang我们一直在稳步添加越来越多的命名空间。 这应该在 1.2.0 上工作得很好。 如果还有遗漏的东西,请提交错误。

@ezyang好的。 我知道了。 这似乎是一个长期的错误。

我是 pytorch 的新手。 非常感谢,对我来说效果很好。

大家好,通过了整个线程。 很难确定问题是否已解决。 我正在使用 torch1.4+cpu 和 torch.tensor 仍然有警告问题。 任何人都可以帮忙吗? 谢谢

使用 torch.Tensor 也仍然遇到这个问题

感谢您的评论。 在过去的几个月里,我们一直在修复许多小类型的提示错误; 如果您发现在最新版本或主版本上不起作用的东西,请为它们打开错误,我们会查看。 谢谢!

我在 1.4.0 版中注意到的坏事:

torch.cuda.manual_seed # manual_seed not hinting
torch.cuda.manual_seed_all # manual_seed_all not hinting
torch.utils # cannot find utils
torch.backends # cannot find backends
torch.optim.lr_scheduler._LRScheduler.step() # argument "epoch" unfilled, while it's optional
torch.Tensor(4, 1) # unexpected arguments & argument "requires_grad" unfilled
torch.optim.Adadelta # cannot find Adadelta
torch.nn.TransformerEncoderLayer # cannot find TransformerEncoderLayer
torch.nn.TransformerEncoder # cannot find TransformerEncoder

@tjysdsg感谢您的报告。 您能否针对这些案例开一个新问题以提高知名度?

@tjysdsg感谢您的报告。 您能否针对这些案例开一个新问题以提高知名度?

@zou3519这是#34699,如果我发现任何新问题,我也会更新问题

此页面是否有帮助?
0 / 5 - 0 等级