在Pytorch的舊版本中,沒有__init__.pyi
這個文件(Pycharm就從__init__.pyi
讀取函數的聲明以及參數類型),因此在Pycharm中torch.sum、torch.abs等函數就沒有代碼提示。沒有代碼提示很不方便,經過一番折騰,完美地解決了Pytorch在Pycharm中沒有代碼提示的問題。
- 把Pytorch的版本升級到1.0.1.post2。
torch.sum、torch.abs等函數應該是有提示了,但是torch.nn、torch.optim等卻沒有提示了。解決方案如下:
-
升級Pycharm到版本2019.1.1。
-
在
site-packages/torch/__init__.pyi
中增加兩行代碼。
舊的__init__.pyi
:from typing import Tuple, Optional, Union import pickle class Tensor: def abs(self, *, out: Optional['Tensor']=None) -> 'Tensor': ... ...
新的
__init__.pyi
:from typing import Tuple, Optional, Union import pickle from torch import nn, cuda, ops, functional, optim, autograd, onnx, utils from torch import contrib, distributions, for_onnx, jit, multiprocessing class Tensor: def abs(self, *, out: Optional['Tensor']=None) -> 'Tensor': ... ...
又遇到了“class Tensor does not define __sub__
, so the ‘-’ cannot be used in its instances”這樣的錯誤,翻譯過來就是Tensor類沒有定義__sub__
, ‘-’ 就不能用在實例之間。同樣的還有加減乘除符號都有類似的提示。於是繼續修改__init__.pyi
舊的Tensor
定義:
class Tensor:
def abs(self, *, out: Optional['Tensor']=None) -> 'Tensor': ...
...
新的Tensor
定義:
class Tensor:
def __add__(self, other, out):
return self.add(other, out)
def __sub__(self, other, out):
return self.sub(other, out)
def __mul__(self, other, out):
return self.mul(other, out)
def __truediv__(self, other, out):
return self.div(other, out)
def size(self) -> 'Size': ...
def __getitem__(self, item): ...
def __setitem__(self, key, value): ...
def abs(self, *, out: Optional['Tensor']=None) -> 'Tensor': ...
...
就把加減乘除還有Tensor.size()
函數都給它添加上了。說了這麼多,其實就是缺啥定義就在__init__.pyi
補啥定義。