在Pycharm中无法提示Pytorch相关函数的问题

最近在学习机器学习的相关知识,并使用Pytorch进行实践。但在代码编写过程中,发现Pycharm无法很好地对Pytorch进行代码提示,这对我这个初学者来说简直就是灾难。遂尝试解决这个问题。

问题

环境

  • Python - 3.10
  • Pytorch - 2.01
  • Pycharm Professional Edition - 2023.1.3

环境通过Anaconda安装到WSL2(Windows subsystem for linux)的虚拟环境中,并通过Pycharm连接。

问题描述

在Pycharm中尝试编写代码,发现无法很好地对torch进行自动补全。例如:对一个Tensor变量,无法提示reshape()方法、shape属性等,如下图:

image-20230706201847940

解决方案

经过查阅资料,普遍说法是,Pycharm根据包中的__init__.pyi来进行自动提示,经过查看,在我的torch包中确实没有这个文件。因此,只要想办法补上这个文件,应该就能解决这个问题。

  1. 访问__init__.pyi将该文件下载下来

  2. 将该文件放入torch安装位置的文件夹中。 这里我们可以直接打开Pycharm的External Libraries,右键相应的文件夹,选择Open in Explorer,并将文件直接粘贴进去。

    比如,在我的环境中,torch是通过anaconda安装到WSL的虚拟环境中的,那么打开的目录就如下图: image-20230706203420181 image-20230706203454031 image-20230706203656136

  3. 重新启动Pycharm,此时相应的函数即可提示,如下图: image-20230706203803152

  4. 到这里没有结束,此时我发现部分模块如torch.nn等仍然无法提示,我们只需要手动编辑__init__.pyi文件,在头部将没有提示的模块全部导入进来即可。

    from torch import nn, cuda, ops, functional, optim, autograd, onnx, utils
    from torch import contrib, distributions, for_onnx, jit, multiprocessing
    

此时,大部分模块都能进行提示了,但在某些情况下还是会出现类型链断裂导致无法提示的问题,我仍然没有找到较好的解决方案。

总结

在网络上查阅了很多资料后发现,这个问题通常出现在老版本Pytorch中,新的版本鲜有此类问题,但我的Pytorch已经是最新的2.0.1了,所以排除Pytorch的版本原因。猜测有可能是因为Pycharm对WSL开发的支持不是很好。最紧迫的问题已经解决了,其他自动补全方面的小问题,留作日后闲时再解决吧!ORZ

太难用了,还是换回Vscode吧 :(

附录

  • 本文中修改后的__init__.pyi文件可以点击这里下载。
文章作者: Serendipity
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 闲人亭
机器学习 Pytorch
喜欢就支持一下吧