Pytorch: Fehlerhafte `Type Hints` in PyTorch 0.4.0, bezogen auf IDEs (eq. PyCharm)

Erstellt am 5. Mai 2018  ·  106Kommentare  ·  Quelle: pytorch/pytorch

Wenn Sie eine Frage haben oder Hilfe und Unterstützung wünschen, wenden Sie sich bitte an unsere
Foren .

Wenn Sie eine Funktionsanfrage einreichen, stellen Sie bitte dem Titel [Funktionsanfrage] voran.
Wenn Sie einen Fehlerbericht einreichen, geben Sie bitte die folgenden Details ein.

Fehlerbeschreibung

Vor kurzem habe ich herausgefunden, dass PyCharm keine automatische Vervollständigung für torch.zeros vornehmen kann.

PyCharm sagt

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

Ich grabe es für eine Weile und fand kaputte Type Hints .

Aus diesen Änderungen
https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4
https://github.com/pytorch/pytorch/wiki/Breaking-Changes-from-Variable-and-Tensor-merge

Insbesondere https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4#diff -14258fce7c17ccb97b488e64373b0803R308 @colesbury
Diese Zeile kann für viele IDEs nicht Type Hints erzeugen.

Ursprünglich war torch.zeros in torch/_C/__init__.py
Aber es wurde nach torch/_C/_VariableFunctions verschoben

Codebeispiel

https://gist.github.com/kimdwkimdw/50c18b5cf72c69c2d01bb4146c8a2b5c
Dies ist ein Proof of Concept für diesen Fehler.

Wenn Sie sich main.py ansehen

import T_B as torch

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

Systeminformationen

Bitte kopieren und fügen Sie die Ausgabe von unserem
Umgebungssammlungsskript
(oder füllen Sie die Checkliste unten manuell aus).

Sie können das Skript abrufen und ausführen mit:

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 oder Caffe2:
  • So haben Sie PyTorch installiert (conda, pip, source):
    Auf jeden Fall für Conda, Pip, Quelle.

  • Build-Befehl, den Sie verwendet haben (wenn Sie aus der Quelle kompilieren):

  • Betriebssystem: Beliebig
  • PyTorch-Version: 0.4.0
  • Python-Version: 3.6.5
  • CUDA/cuDNN-Version: .
  • GPU-Modelle und -Konfiguration: .
  • GCC-Version (wenn aus der Quelle kompiliert): .
  • CMake-Version: .
  • Versionen anderer relevanter Bibliotheken:.
medium priority (this tag is deprecated)

Hilfreichster Kommentar

Wir werden die Priorität erhöhen, da viele Benutzer dies angefordert haben ... wir werden unser Bestes geben, um es genauer zu untersuchen.

Alle 106 Kommentare

ein damit zusammenhängender Punkt? #4568

Das gleiche Problem, pycharm ist bei der Verwendung von pytorch0.4 im Grunde nutzlos. Fast alles ist unterstrichen, weil entweder " Referenz nicht gefunden " oder " nicht aufrufbar " ist.

torch

Es gibt keine automatische Vervollständigung, Schnelldefinition und Schnelldokumentation für torch.tensor , torch.max und loss.backward .

  • Betriebssystem: Linux (64-Bit-Fedora 27 mit Gnome).
  • PyTorch-Version: 0.4.0.
  • Wie Sie PyTorch installiert haben (conda, pip, source): pip3.
  • Python-Version: 3.6.5.
  • Ich verwende CPU (kein CUDA).

Wenn einer von Ihnen Vorschläge zur Behebung dieses Problems hat, lassen Sie es uns bitte wissen!

Es hört sich so an, als ob die Suche von PyCharm nach Funktionen verbessert werden könnte, aber ich bin mir nicht sicher, was von der PyTorch-Seite aus getan werden kann. Am Beispiel von torch.tensor ruft help(torch.tensor) die Dokumentation ab, während dir(torch) "tensor" als Mitglied anzeigt.

@zou3519
Ich dachte, dass unten kein guter Codestil ist.

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

von https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4

globals()[name] ist nicht Pythonic Weg. Es ist nicht nur für PyCharm ein Problem, sondern auch für den Python-Codestil.

Ich dachte, _VariableFunctions muss nicht Klasse sein.

Ich versuche, PR für dieses Problem zu machen. Würden Sie überprüfen? @zou3519

@kimdwkimdw Ich weiß nicht, was da mit dem global() los ist oder was es besser machen würde, aber ja, bitte reiche eine PR ein und ich werde es mir ansehen :)

Es hört sich so an, als ob die Suche von PyCharm nach Funktionen verbessert werden könnte, aber ich bin mir nicht sicher, was von der PyTorch-Seite aus getan werden kann.

Wollte nur anmerken, dass ich noch nie auf dieses Problem mit einem anderen Paket in PyCharm gestoßen bin. Das soll nicht heißen, dass PyCharm die Dinge nicht anders machen sollte, aber dieses Problem scheint ein ungewöhnlicher Fall zu sein.

Ich arbeite hauptsächlich an diesen Dateien.

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

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

Versuchen herauszufinden, was sich ändert, wenn C-Erweiterungen generiert werden.
Ich werde bald PR machen.

Irgendwelche Aktualisierungen?

Ich habe ein funktionierendes Beispiel in meiner Gabel erstellt.

Wenn jemand zuerst die automatische Vervollständigung verwenden möchte, versuchen Sie es unten.

1. Git-Klon

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

2. Installieren Sie PyTorch

3. Cache in PyCharm löschen

  • Normalerweise befinden sich Caches in /Users/USERNAME/Library/Caches/PyCharm*/python_stubs/
  • Überprüfen Sie Ihre project interpreter in PyCharm

Vor pull request muss ich weitere Commits hinzufügen, um die Ergebnisse zu organisieren.

Die Installation ist nach der obigen Beschreibung fehlgeschlagen.
gibt es eine einfache Möglichkeit zur Installation?

Ich habe das gleiche Problem. Ich habe Pytorch und Pycharm schon immer geliebt. Schade, dass sie nicht gut zusammenpassen :(
Freue mich auf Updates.

Das ist wirklich seltsam, wenn ich den gleichen Code in der Python-Konsole mit pycharm verwendet habe, es ist normal, aber im Editor. O__O "…

Wir werden die Priorität erhöhen, da viele Benutzer dies angefordert haben ... wir werden unser Bestes geben, um es genauer zu untersuchen.

Viele Benutzer fragen nach .... Ich sollte dieses Wochenende eine Pull-Anfrage stellen.

Ich habe meinen Code mit dem aktuellen master Zweig zusammengeführt.

Type Hints leben jetzt.

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

Kasse PR - https://github.com/pytorch/pytorch/pull/8845

cc. @zou3519

@kimdwkimdw sollte ich pytorch von der Quelle neu installieren? Gibt es eine einfache Möglichkeit, in der Windows-Plattform zu erneuern?

@541435721
Ja du solltest. Schauen Sie sich https://github.com/pytorch/pytorch#install -pytorch diese Seite an.
Ich weiß nicht, dass es einen einfacheren Weg gibt, es zu bauen.

Für Pycharm (2018.1, mit umgebauten Caches) scheint sich daran nichts zu ändern.

Sie sollten @kimdwkimdw ‚s - Pull - Request überprüfen, nicht pytorch Master. Der Pull-Request wurde noch nicht in pytorch master zusammengeführt.

Dies ist die PR: https://github.com/pytorch/pytorch/pull/8845.

Ja, das habe ich gemacht:

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 

@nlgranger Sie sollten Python-Stubs manuell löschen. es kann nicht mit 'invalidate cache' gelöscht werden.

Wenn Sie ein Projekt einrichten, initialisiert Pycharm seine Python-Stub-Dateien.

Nachdem Sie das Python-Stub-Verzeichnis gelöscht haben, starten Sie Pycharm neu.

PyCharm wird seinen Python-Stub neu generieren.

Scheint nichts zu ändern, aber es könnte mein Setup sein. Vielleicht können wir warten, bis jemand anderes es versucht?

Sie sollten das Python-Stub-Verzeichnis finden. Wenn Sie auf Fackel klicken, finden Sie das Stub-Verzeichnis.

@kimdwkimdw Ich habe den Cache neu installiert und gelöscht, aber keine Änderungen.

image
Sie können den PyCharm-Cache nicht über dieses invalidate Caches löschen

Unter MacOS sollten Sie Ordner in ~/Library/Caches/PyCharm2018.1/python_stubs/ manuell löschen.

Es gibt eine andere Möglichkeit. Wenn Sie ein neues Projekt erstellen und Ihre Interpretereinstellungen ändern, macht PyCharm seine python stubs

@541435721 @nlgranger

Genau das habe ich getan (Cache ungültig machen, pycharm stoppen, rm .PyCharm2018.1/system/python_stubs/* -rf ).
Übrigens verwende ich Python 3, falls das wichtig ist (ich sehe einige Python2-Tests in der PR).

@kimdwkimdw
Ich habe dies als Richtlinie getan und mein Betriebssystem ist Windows10, aber ich stehe vor diesem Problem.

@kimdwkimdw Das kann ich! Danke schön!

Da andere Probleme hatten, wollte ich nur darauf hinweisen, dass der Fix von @kimdwkimdw bei mir funktioniert. Dies ist mit Python 3 auf macOS. Verwendung:

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

Ich habe meine Stubs manuell gelöscht, obwohl ich nicht weiß, ob das nötig war. Jedenfalls funktioniert es zumindest auf meinem System.

Ich habe jedoch festgestellt, dass sowohl torch.float32 (und andere Datentypen) als auch torch.backends.cudnn von PyCharm immer noch nicht aufgelöst werden (zumindest in meinem Fall).

@shianiawhite Guter Punkt. Vielen Dank. Ich denke, ich sollte Pull Requests mehr aktualisieren.

@zou3519

Hat bei mir nicht funktioniert, obwohl ich die PR von @kimdwkimdw erfolgreich python_stub in ~/.PyCharmCE2018.1/system manuell gelöscht habe.

Sorry, dass ich nochmal fragen muss, aber gibt es Neuigkeiten dazu?
Würde es helfen, hier bei Jetbrains https://youtrack.jetbrains.com/issues/PY?q=pytorch ein Problem zu eröffnen?

Ich habe das gleiche Problem in Ubuntu 16.04 und PyCharm 2017.3

Seltsamerweise wird die automatische Vervollständigung richtig angezeigt, wenn ich die Python-Konsole ausführe.
working_in_console

Aber wenn ich das gleiche im Editor ausführe, funktioniert es nicht.
not_working_in_editor

Ich verwende Python 3.6.6 und PyTorch 0.41. Ich habe es mit pip und cuda 9.2 installiert

Ich habe das gleiche Problem in Window7 PyCharm2018, Win10 PyCharm2018, Win10 VS2017, Win10 Spyder.
und ich versuche, pytorch0.4.0 und pytorch0.4.1 zu verwenden, beide können nicht automatisch vervollständigen.
nur ipython zeigt die automatische Vervollständigung richtig an.
Bitte hilf mir

Ich habe ein Problem in PyCharm youtrack geöffnet. Vielleicht können sie auch helfen.

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

Ich habe VS2017 und PyCharm2018.2 mit pytorch0.4.1 unter Windows 10 ausprobiert und die Autovervollständigung funktioniert bei mir nicht.

PyTorch-0.4.1, das von pip mit PyCharm-2018.2 installiert wurde, haben immer noch die gleichen Probleme.

es wäre gut, wenn die Leute hier abstimmen könnten https://youtrack.jetbrains.com/issue/PY-31259
also hat der Fix eine höhere Priorität

Hallo!
Ich bin der Bevollmächtigte von PY-31259.
PyCharm führt während der statischen Analyse keinen Benutzercode aus (Ausschluss ist die Konsole, bei der die Umgebung leicht untersucht werden könnte). Daher sind die meisten dynamischen Methoden zum Deklarieren von Attributen nicht auffindbar.

@sproshev danke für deine Antwort. Könnten Sie etwas Licht ins Dunkel bringen , warum der Pull-Request von https://github.com/pytorch/pytorch/pull/8845 funktioniert?

Für den Kontext führt pytorch beim Importieren einige dynamische Zuweisungen von Attributen durch. Der Pull-Request von

Ich denke, der vernünftigste Weg, dies zu beheben (zumindest für Python 3), besteht darin, einen .pyi-Stub zu generieren.
Ein kurzer Test scheint zu zeigen, dass das gut funktionieren würde.
Ich bin selbst kein PyCharm-Benutzer, aber wenn es genug Leute gibt, die sehr glücklich sind, könnte ich sehen, ob wir einen aus der native_functions.yaml und Freunden generieren können.

@t-vi Ich habe keine Ahnung, wovon Sie sprechen, aber da sich dies nur in die Länge gezogen hat, generieren Sie bitte die .pyi! :D

Das Hauptmodul scheint also einfach genug:
image

Aus irgendeinem Grund einfach zu haben

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: ...

in dem __init__.pyi scheint nicht PyCharm zu folgern , dass nach zuzulassen a = randn((1,2)) , a ist die Klasse torch.Tensor . :(
(Ich habe tatsächlich auch Anmerkungen in der Klasse, aber sie werden nur verwendet, wenn ich die Anmerkung a : torch.Tensor = ... buchstabiere)

Ich habe das Pyi hier gepostet, wenn Sie es versuchen möchten: https://gist.github.com/t-vi/0d0ae013072f96f50fa11fbc2287e33b

Auch hier, wenn Sie eine Idee haben, warum PyCharm den Rückgabetyp nicht zu identifizieren scheint, wäre ich sehr dankbar, wenn Sie sie teilen würden.

@t-vi Die Lösung funktioniert auch für VS-Code. Dankeschön!

Vielen Dank, ZongyueZhao, für Ihr Feedback. Ich habe es noch nicht mit VS-Code versucht, aber wenn der pyi einschließlich Rückgabetypen funktioniert, werde ich einen Patch für seine Generierung einreichen.

Danke, dass __init__ bei mir funktioniert hat! Ich verwende Conda env namens "main", also habe ich Folgendes getan:

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

Ich musste den Cache nicht regenerieren

Warum es den Rückgabetyp Tensor nicht erkennt, hat mit Syntaxfehlern in der Datei zu tun. Öffnen Sie die Datei in PyCharm, und es werden einige davon angezeigt

screenshot 2018-10-05 16 33 51

Nachdem ich Zeilen mit Fehlern gelöscht hatte, bekam ich eine automatische Vervollständigung
screenshot 2018-10-05 16 35 40

Eine andere Sache, die mir aufgefallen ist, ist, dass Tensor-Klassenmember Hinweise zurückgeben -> Tensor, was eine Zirkelreferenz ist und daher auch von PyCharm nicht erkannt wird. Die Lösung ist zu tun -> "Tensor" statt -> Tensor für Methoden der Tensor-Klasse (https://www.python.org/dev/peps/pep-0484/#forward-references)

Danke @yaroslavvb , genau das hatte ich vermisst!

Bump für Sichtbarkeit. Es ist tatsächlich eine große Sache für PyCharm-Benutzer. Ich habe PyTorch als Alternative zu unserer tf/keras-Codebasis evaluiert und dieses Problem ist ein Blocker für uns.

Ich benutze pytorch 0.4.1 .

Gibt es dafür eine konkrete Lösung. Ich benutze pip, um pytorch zu installieren. Es gibt so viele integrierte Funktionen torch.xxx pytorch

Wenn es nicht behoben werden kann. Können Sie helfen, eine alternative IDE vorzuschlagen, die alle pytorch-Funktionen vorschlägt und die Navigation innerhalb des Frameworks unterstützt (wie Strg + B, um zur Definition der pytorch-Funktion zu springen).

Dankeschön.

Möchte jemand eine PR machen (@t-vi)? Ich verwende jetzt PyTorch-Nachtlieder und es ist jedes Mal ein bisschen mühsam, dies zu tun, wenn ich ein Upgrade mache ...

Ich diskutiere dies aktiv mit den Core-Entwicklern, um eine gute Lösung dafür zu finden, wann und wie der PYI während des Build-Prozesses generiert wird. Der schwierige Teil besteht darin, die Informationen aus den Python-definierten Bits mit denen aus den _C Bits zusammenzuführen. Wir versuchen, eine gute Lösung zu finden, und ich hoffe, bald eine PR zu haben, aber es wird wahrscheinlich eine Iteration brauchen.

Wenn Sie nach einer Möglichkeit suchen, meine Prioritäten zu setzen, zögern Sie nicht, mich per Mail zu kontaktieren.

Das Ersetzen von __init__.py ist keine gute Lösung. Im Kern von @t-vi, zum Beispiel bei der Verwendung von

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

PyCharm gibt eine Warnung aus, dass der Parameter "out" fehlt, aber der Parameter "out" ist optional.
In einem anderen Fall,

x = torch.empty(10, 2)

Diese Codezeile ist korrekt, da die Methode (*sizes, ...) akzeptieren kann, aber PyCharm warnt auch vor ungültigen Parametern. Bei so vielen seltsamen Warnungen entscheide ich mich schließlich, "torch.*" in den Einstellungen für die Codeinspektion zu ignorieren ...

@hitvoice Vielen Dank für den Hinweis.
Das Wesentliche ist nur ein sehr grober Faustschlag, um einen richtigen Pyi zu bekommen, daher wird Ihr Feedback sehr geschätzt! Ich hoffe, Sie können die Inspektion mit der nächsten Iteration wieder aktivieren.

Ich denke, das Optional[out] sollte out : Optional[Tensor]=None , oder? Das ist leicht zu beheben.
Für leer ist es etwas komplizierter, da es wahrscheinlich bedeutet, dass wir Deklarationen mit nur einem Listenargument aufteilen müssen, um auch Varargs zu akzeptieren (ich habe einmal zu lange auf den C-Code gestarrt, der die Python-Args analysiert), aber wir sind es sicherlich verpflichtet, großartige Typhinweise zu haben.

Hi,
Ich habe das __init__.pyi aktualisiert und würde mich freuen, wenn Sie es ausprobieren könnten.

  • Ich bin viel zufriedener mit der Generierungsmethode, also denke ich, dass es gute Fortschritte in Richtung einer PR gibt, obwohl dies hinter den Kulissen stattfindet.
  • Ich erzeuge auch Hinweise für einige Python-definierte Funktionen (btrifact, einsum), aber ich habe nicht alle hinzugefügt.
  • Ich glaube, ich habe (im Generierungscode) die Mängel behoben , auf die @hitvoice hingewiesen haben.

Wenn Sie der Meinung sind, dass dies in etwa funktioniert, suche ich nach Möglichkeiten, den Code aufzurufen (er muss nach dem Build sein) und wir haben (fast) einen PR.

@t-vi Sieht gut aus. Bisher funktioniert es bei mir gut.

Nur neugierig, was ist der Grund für die Generierung der Python-definierten Funktionshinweise (btrifact, einsum)? Ich verwende den nächtlichen Build und diese scheinen ohne die Hinweise für mich zu funktionieren.

@elliotwaite In meinen (kurzen) Experimenten schien ich keine Autovervollständigung für die Ergebnisse zu erhalten, es sei denn, ich füge x = einsum('ii', a); x. und erhalte jetzt die Tensormethoden für x . Außerdem bin ich mir nicht sicher, wie sich ein Pyi darauf auswirkt, wie Dinge behandelt werden, die nicht im Pyi enthalten sind. Soweit ich weiß (was nicht sehr gut ist), ist das eine Quelle von Feinheiten.

@t-vi Ah, ich verstehe. Ich habe nur zwischen dem Einschließen der pyi-Datei vollständig und nicht getestet. Sie haben Recht, wenn ich die pyi-Datei einfüge und nur die einsum-Hinweiszeile auskommentiere, wird die Autovervollständigung auch für mich unterbrochen. Danke fürs Erklären.

@t-vi Ich erhalte eine Warnung "Parameter (s) ungefüllt", wenn nur ein einzelnes Argument an Torch.tensor () übergeben wird.

image

@elliotwaite Danke für den Hinweis!
Tensor ist zu speziell, daher muss ich wahrscheinlich die richtige Signatur manuell einfügen.
Ich werde die PR aktualisieren. Werden Sie weitere Probleme finden, wenn ich auch das Wesentliche aktualisiere? (Das ist ziemlich manuell und ich würde es tun, wenn es Ihnen hilft, es auszuprobieren.)

@t-vi Ich erhalte auch eine Warnung "Unerwartetes Argument" für Torch.Tensor.view():
torch.randn(2, 2).view(1, 1, 2, 2)

Ich habe auch ein Skript erstellt, das alle Dokumente durchsucht und alle "tensor.*"-Strings herausgezogen hat. Dann habe ich sie auf Autovervollständigung getestet. Hier ist die Liste derjenigen, bei denen die automatische Vervollständigung noch nicht funktioniert. Ich habe die Funktion print() verwendet, um zu testen und sicherzustellen, dass sie beim Ausführen des Skripts tatsächlich zugänglich sind.
https://github.com/elliotwaite/pytorch_typehints/blob/master/no_autocomplete.py

@elliotwaite Richtig, es fehlen einige Varargs-Dinge für Tensoren (ich glaube, ich reagiere auch nicht auf kwonly-Anmerkungen in der Yaml).
Die Idee, doc(string)s zu verwenden, um zu sehen, ob die Anmerkungen gut sind (oder zumindest eine Chance haben, großzügig genug zu sein), ist großartig. Ich werde dies als Teil des Tests tun.

8845 wird von PyCharm-Seite bestätigt. Aber im Allgemeinen ist es besser, pyi Stubs zu haben, da sie zumindest Typinformationen enthalten. +1 für sie.

Das Problem besteht im Allgemeinen bei allen IDEs, die Jedi als Backend für die Python-Vervollständigung verwenden, oder? Und Ihre Lösung wird auch allgemein oder spezifisch für PyCharm und VS Code sein? Ich verwende Emacs mit Jedi als Vervollständigungs-Backend und habe das gleiche Problem. ABER, was interessant ist, Sie können die Vervollständigung in der IPython-Konsole versuchen und es funktioniert! Es sieht alle Funktionen, wie ist das möglich?

Nun, IPython verwendet dynamische Introspektion, und das funktioniert immer (es funktioniert nur, nachdem Sie die Objekte erstellt haben, also können Sie mytensor.a abschließen, aber nicht mytensor.abs().m , was Sie mit type . können Hinweise.
Soweit ich weiß, verwenden sowohl VSCode als auch Jupyter auch Jedi. Stubs (.pyi-Dateien) sind die "Standardmethode", um Typinformationen zu bestehenden Modulen hinzuzufügen, aber sie werden noch nicht so weit unterstützt, wie man es möchte (und es gibt immer noch Eckfälle, z Auslassungspunkte ("...") zu Indexierungsfunktionen). Die richtige Vorgehensweise besteht darin, zu Jedi zu wechseln und die Unterstützung für Typhinweis-Stubs hinzuzufügen (https://github.com/davidhalter/jedi/issues/839). Ihre Chance, Ihre Zeit oder Ihr Geld zu investieren, um Ihre Toolchain zu verbessern!

@t-vi Vielen Dank, dass Sie dieses Problem weiterhin verfolgen!

Ich verstehe, dass Stubs eine ziemlich gute Möglichkeit sind, dieses Problem zu lösen.
https://www.python.org/dev/peps/pep-0484/#stub -files

Docstring s werden jedoch nicht mit Stubs generiert. Wie wäre es mit Docstring hinzufügen?

@t-vi Ich verstehe nicht, was ich tun soll. Was meinen Sie, um meine Toolchain zu verbessern? Ich benutze derzeit Jedi, aber ich verstehe nicht so recht, wie ich mit diesen Stub-Dateien arbeiten soll. Dies ist etwas, was ich schreiben sollte oder es ist in Modulen vorhanden und ich muss Jedi aktualisieren? Ist es wie Header in C++?
Die PEP-Dokumentation und das von Ihnen verlinkte Problem sind für mich nicht wirklich hilfreich, wie ich sie verwenden kann.

@kimdwkimdw Wo legen Sie Docstrings ab, damit jeder sie findet? (Ich glaube nicht, dass Sie sie in den PYI (?) einfügen können). Wenn Sie eine Idee haben, wo Sie sie platzieren sollen, werde ich sie sicher dort platzieren ...
@piojanu Jedi scheint einen Typschuppen-Zweig zu haben, aber ich weiß nicht, ob es generell um Pyis geht. Fragen Sie wahrscheinlich am besten den Jedi-Autor, wie Sie dazu beitragen können, dass Pyi-Unterstützung möglich ist.

@t-vi Ich habe es jetzt verstanden, danke.

Ursprünglich abgeleitete Methodensignatur und Typen mit Docstring in PyTorch 0.3.0 und meinem PR (https://github.com/pytorch/pytorch/pull/8845).
image

@t-vi
Docstrings kann unter jeder Methode in PYI hinzugefügt werden.
image

Die meisten von ihnen befinden sich in _torch_docs.py

Für den Kommentar von @sproshev denke ich, dass #8845 nicht nur in PyCharm, sondern auch in anderen IDEs eine gute Möglichkeit ist, da es die Standardmethode zum Importieren von Modulen verwendet. Daher kann PyCharm seine Python stubs automatisch generieren.

PyTorch's original way 0.3.0 oder #8845 macht in PyCharms, in IPython.
Die Typinformationen können in gen_python_functions.py oder anders enthalten sein.

Ich stimme zu, dass das Generieren expliziter pyi Dateien eine Möglichkeit ist, dieses Problem zu lösen. aber vielleicht nicht der sauberste Weg.

Das gleiche Problem, pycharm ist bei der Verwendung von pytorch0.4 im Grunde nutzlos. Fast alles ist unterstrichen, weil entweder " Referenz nicht gefunden " oder " nicht aufrufbar " ist.

torch

@nimcho Ich habe dieses Problem auch. Deshalb?

Ich installiere Fackel-Nightly auf meinem Mac und Pycharm konnte überhaupt nicht danach fragen, obwohl ich mit Command-Click zur Quelle springen konnte. Nach dem Entfernen von Cache-Verzeichnissen in den folgenden Ordnern ist das Problem behoben.

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

Ich habe dieses Problem immer noch mit pytorch 1.0.0. Wie kann ich dieses Problem mit den obigen Lösungen lösen?

Das ist peinlich... fast 8 Monate :-(

@ebagdasa Ich würde uns ermutigen, dies produktiv und nicht bissig zu halten. Wer ist das „Du“, auf das Sie sich beziehen? Produktionssoftware hat meiner Erfahrung nach nicht immer eine großartige Editor-Unterstützung.

um einen Kontext zu geben, warum die Behebung so lange gedauert hat:

  • Keiner von uns Core-Entwicklern verwendet PyCharm, daher war es zunächst schwierig, einen Einblick in das Problem zu bekommen
  • Als wir anfingen, es zu untersuchen, war es ein projektübergreifendes Problem, dh es lag teilweise daran, was ein Teil der CPython-Typen PyCharm für die automatische Vervollständigung unterstützte, und teilweise daran, was PyTorch tun konnte, um die Einschränkungen von PyCharm in dieser Einstellung zu umgehen.

    • Dies erforderte eine Kombination aus der Kenntnis der Interna von PyCharm und der Interna von PyTorch. Ich hoffe du verstehst die Schwierigkeit dabei

    • Als Kontrapunkt funktioniert Microsoft VSCode + PyTorch gut für die automatische Vervollständigung, ebenso wie die automatische Vervollständigung von IPython. Also @ebagdasa Ich glaube nicht, dass Ihr Kommentar relevant ist.

Schließlich haben @kimdwkimdw und @t-vi Fixes, zum Beispiel in https://github.com/pytorch/pytorch/pull/12500, indem explizite Typhinweise generiert werden, und sobald diese PR eintrifft, sollten wir hoffentlich den PyCharm reparieren Ausgabe.

Und wie immer ist dies ein Open-Source-Projekt, also wenn jemand von euch dabei helfen kann, kann dies gerne tun. Zum Beispiel haben @kimdwkimdw und @t-vi es in ihrer eigenen Freizeit gemacht und werden nicht dafür bezahlt und brauchen den Hass nicht.

@ebagdasa , du solltest um eine Rückerstattung bitten

in Ordnung, das war ein Kommentar aus Enttäuschung, wenn ich sah, wie mein Code vom Editor hervorgehoben wird. Sorry Leute, ich verstehe, wie es funktioniert. Mach weiter! Vielleicht Zeit, VSCode auszuprobieren.

@soumith Die Autovervollständigung von VS Code ist auch bei einigen Funktionen wie torch.randn broken defekt

1547171211663

Und wie immer ist dies ein Open-Source-Projekt, also wenn jemand von euch dabei helfen kann, kann dies gerne tun. Zum Beispiel haben @kimdwkimdw und @t-vi es in ihrer eigenen Freizeit gemacht und werden nicht dafür bezahlt und brauchen den Hass nicht.

Wäre natürlich schön, wenn sie dafür bezahlt würden... wäre es für FAIR möglich, so etwas wie Gitcoin zu verwenden, um die Teilnahme durch Bounties zu fördern? Natürlich werden die Leute bei FAIR schon jetzt für ihre Beiträge reichlich entlohnt und die meisten Leute hier (wie ich) haben wahrscheinlich alle Hände voll zu tun mit ihrem Tagesjob...

Ich habe VS Code, Atom und Pycharm mit Pip oder Conda ausprobiert, aber keiner von ihnen funktioniert für die automatische Vervollständigung einiger Funktionen wie Torch.max () einwandfrei. IPython und Jupyter haben dieses Problem nicht, aber sie sind keine Editoren.

dasselbe hier. Versuchte PyCharm, VS-Code, Spyder.

In den Kommentaren in dieser Ausgabe wurde dies ständig als Problem im Zusammenhang mit PyCharm bezeichnet, und es wurde erwähnt, dass es ein Problem mit der Zusammenarbeit der Interna von PyCharm und der Interna von PyTorch ist. Dies ist eine Fehlbeschreibung des Problems, und es als solches zu betrachten führt wahrscheinlich nicht zur richtigen Lösung. PyCharm verfolgt einen ziemlich standardmäßigen Ansatz zum Auflösen von Paketen, und wie von mehreren anderen erwähnt wurde, ist dieses Problem kein einziges PyCharm-Problem. PyCharm ist zufällig der beliebteste Editor, bei dem dieses Problem mit PyTorch auftritt. Jeder Editor, der das Paket (aus Geschwindigkeitsgründen) nicht dynamisch auflöst, wird dieses Problem haben. Ich denke, die Tatsache, dass IPython/Jupyter/etc es korrekt auflösen kann, ist eher die Ausnahme als die Regel. Ich wollte dies nur betonen, damit nicht zu viel Wert darauf gelegt wird, "es mit PyCharm zum Laufen zu bringen" anstatt "dass es im Allgemeinen funktioniert".

Davon abgesehen sind die Stubs , an denen in dieser PR gearbeitet wird, eine gute "Standardlösung" und sollten das Problem wahrscheinlich im Allgemeinen lösen können. Für diejenigen unter Ihnen, die nach der schnellen temporären Lösung suchen, kopieren Sie diese Stub-Datei in Ihre dist-packages/site-packages, wie im Wesentlichen beschrieben. Fügen Sie alle anderen fehlenden Teile manuell hinzu und melden Sie diese fehlenden Teile, um sicherzustellen, dass sie behandelt werden.

Hallo allerseits! Der Patch von @t-vi wurde mit dem Master zusammengeführt. Wenn Sie also aktualisieren, sollten Sie die automatische Vervollständigung für die Fackel auf dem Master ausführen. Darüber hinaus haben wir für 1.0.1 einen handgenerierten Typ-Stub festgeschrieben, sodass die automatische Vervollständigung auch für Benutzer dieser Version funktioniert, wenn diese Version eintritt.

Der Typ-Stub ist wahrscheinlich nicht gut genug, um Ihren Code tatsächlich mit mypy zu überprüfen. Wir verfolgen diese Folgearbeit in Nr. 16574. Bitte melden Sie sich, wenn Sie dort betroffen sind. Außerdem haben wir nur die automatische Vervollständigung der Taschenlampe korrigiert; Wenn Sie bei anderen Modulen Probleme mit der Autovervollständigung haben (oder der Meinung sind, dass bei der Fackel Kennungen fehlen), teilen Sie uns dies bitte mit einem Fehlerbericht mit.

Danke für Ihre Geduld!

Nur zur Info, die neue Version 1.0.1 hat dies jetzt gelöst und es wird ausgeliefert.

@ezyang torch.cuda fehlt in pyi , zum Beispiel wenn torch.cuda.is_available .

Ich bekomme Intellisense, damit VSCode teilweise auf Fackel 1.0.1 funktioniert, aber einige Funktionen fehlen noch, zB torch.as_tensor

Ich bekam auch Fehler und keine Autovervollständigung für einige Funktionen in PyCharm (es fehlte, als ich es am meisten brauchte), und ich glaube nicht, dass dies noch vollständig gelöst ist.

Ich habe letztes Wochenende mein erstes PyTorch-Programm geschrieben, bin mir also nicht sicher, ob ich beim Setup einen Fehler gemacht habe.

@vpj wurde in PyTorch v1.0.1 behoben. Alles darunter hat immer noch das Problem. check print(torch.__version__)

Version ist 1.0.1post2

pytorch_missing_defs

In der Datei __init__.pyi fehlen einige Definitionen.

PyCharm scheint auch einige Probleme zu verursachen, da es keine Rückgabetypen ableiten kann. Zum Beispiel scheint es nicht abzuleiten, dass der Rückgabewert von torch.exp Tensor (der Rückgabetyp wird jedoch mit Tensor.exp ). Obwohl der Rückgabetyp in der torch.exp Methodendefinition definiert ist.

ja, ich aktualisiere auch auf '1.0.1.post2'
und die automatische Vervollständigung scheint nicht zu funktionieren

image

also fehlen anscheinend noch ein paar Namespaces, obwohl wir das größere Problem behoben haben.

Ich habe dafür hier eine neue Tracking-Aufgabe geöffnet: https://github.com/pytorch/pytorch/issues/16996

Ich bin mir bei diesem nicht ganz sicher? (Ist das behoben?) Konsole funktioniert einwandfrei.
(Aber from torch.utils.data import DataLoader, Dataset funktioniert)
untitled2____Documents_python_untitled2__-_____main_py

@yarcowang Wir haben ständig mehr Namensräume hinzugefügt. Dies sollte unter 1.2.0 recht gut funktionieren. Wenn noch Dinge fehlen, melden Sie bitte Fehler.

@ezyang Okay. Ich verstehe. Es scheint ein langfristiger Fehler zu sein.

Ich bin ein neuer für pytorch. Vielen Dank, bei mir funktioniert es gut.

Hallo zusammen, habe den ganzen Thread durchgelesen. Es ist ziemlich schwierig herauszufinden, ob das Problem behoben ist oder nicht. Ich benutze Torch1.4+CPU und Torch.tensor hat immer noch Warnprobleme. Kann jemand helfen? Vielen Dank

Dieses Problem tritt auch immer noch mit Fackel auf.Tensor

Danke für die Kommentare. Wir haben in den letzten Monaten viele kleine Fehler in den Hinweisen behoben; Wenn Sie Dinge bemerken, die auf der neuesten Version oder dem neuesten Master nicht funktionieren, öffnen Sie bitte Fehler und wir suchen nach. Vielen Dank!

Defekte Dinge, die mir in Version 1.4.0 aufgefallen sind:

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 Danke für die Meldung. Könnten Sie mit diesen Fällen ein neues Problem eröffnen, um mehr Transparenz zu erhalten?

@tjysdsg Danke für die Meldung. Könnten Sie mit diesen Fällen ein neues Problem eröffnen, um mehr Transparenz zu erhalten?

@zou3519 Hier ist es #34699, ich werde das Problem auch aktualisieren, wenn ich etwas Neues finde

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen