在使用IDE來寫關(guān)于pytorch
的代碼時(shí)洼专,我們會(huì)發(fā)現(xiàn)IDE中的自動(dòng)補(bǔ)全功能無法使用粥喜,甚至?xí)o出各種Warning御滩。這是由于pytorch
絕大部分代碼由C++實(shí)現(xiàn)乘凸,由于不是原生的Python代碼厕诡,所以引發(fā)了上述問題。那么营勤,我們?nèi)绾谓鉀Q呢灵嫌?
先google一下,找到pytorch中這個(gè)issue下的討論葛作。
其中寿羞,一個(gè)解決方案如下圖所示:
解決方案的關(guān)鍵詞為 .pyi
,那么什么是.pyi
文件呢?我們可以從PEP484中獲得了解赂蠢。
Stub files are files containing type hints that are only for use by the type checker, not at runtime. There are several use cases for stub files:
- Extension modules
- Third-party modules whose authors have not yet added type hints
- Standard library modules for which type hints have not yet been written
- Modules that must be compatible with Python 2 and 3
- Modules that use annotations for other purposes
這里的Stub files
就包括我們的.pyi
文件绪穆,這個(gè)文件可以幫助我們添加type hints
,我們的IDE就是通過這種 type hints 來實(shí)現(xiàn)自動(dòng)補(bǔ)全的虱岂。所以玖院,即使pytorch的庫(kù)作者團(tuán)隊(duì)沒有給pytorch添加.pyi
來提供type hints,我們依然可以自己添加這樣的文件第岖,來幫助IDE實(shí)現(xiàn)自動(dòng)補(bǔ)全的功能难菌。
另外,值得注意的是這樣的文件只為 type checker使用蔑滓,在文件運(yùn)行時(shí)不會(huì)產(chǎn)生任何影響郊酒。所以,可以大膽使用键袱。
那么燎窘,有沒有已經(jīng)寫好的.pyi
文件呢?Gist中就有這樣的文件嗎蹄咖,同時(shí)也是上圖中的大神幫忙補(bǔ)全的荠耽。gist地址
我們只要將這個(gè)文件粘貼到 pytorch包中即可,命名為__init__.pyi比藻。最終效果如下圖所示铝量,圖中的目錄為torch的目錄。
# 通過下方代碼定位自己安裝包目錄
import site
site.getsitepackages()
最后银亲,我們成功解決了這個(gè)問題慢叨。