Ich führe PyLint in einem Python-Projekt aus. PyLint beschwert sich häufig darüber, dass keine numpy Mitglieder gefunden werden können. Wie kann ich dies vermeiden und gleichzeitig vermeiden, Mitgliedschaftsprüfungen zu überspringen?
Aus dem Code:
import numpy as np
print np.zeros([1, 4])
Was ich beim Laufen erwarte:
[[0. 0. 0. 0.]]
Pylint gibt mir jedoch diesen Fehler:
E: 3, 6: Modul 'numpy' hat kein 'Nullen'-Mitglied (kein Mitglied)
Für Versionen verwende ich Pylint 1.0.0 (Astroid 1.0.1, Common 0.60.0) und versuche, mit Numpy 1.8.0 zu arbeiten.
Ich hatte das gleiche Problem hier, auch mit den neuesten Versionen aller zugehörigen Pakete (
astroid 1.3.2
,logilab_common 0.63.2
,pylon 1.4.0
).Die folgende Lösung hat wie ein Zauber funktioniert: Ich
numpy
habe die Liste der ignorierten Module durch Ändern meinerpylintrc
Datei im[TYPECHECK]
Abschnitt erweitert:Abhängig vom Fehler müssen Sie möglicherweise auch die folgende Zeile hinzufügen (noch in
[TYPECHECK] section
):quelle
extension-pkg-whitelist=numpy
Zeile unter die[MASTER]
Überschrift der .pylintrc-Datei setzen. pylint scheint eine ziemlich spröde Software zu sein und erfordert die Berührung eines Experten, damit sie für grundlegende Aufgaben funktioniert.--extension-pkg-whitelist
, die tatsächlich den Import für das angegebene Modul ausführt.Ich bekam den gleichen Fehler für ein kleines Numpy-Projekt, an dem ich arbeitete, und entschied, dass das Ignorieren der Numpy-Module in Ordnung wäre. Ich habe eine
.pylintrc
Datei erstellt mit:$ pylint --generate-rcfile > ~/.pylintrc
und nach den Ratschlägen von Paduwan und j_houg habe ich die folgenden Sektoren modifiziert:
und
und es "behoben" mein Problem.
quelle
ignored-*
Eingängen hinzufügen mussten ? Für mich funktioniert das Hinzufügen eines Moduls zur Whitelist der Erweiterung perfekt.In neueren Versionen von pylint können Sie
--extension-pkg-whitelist=numpy
Ihrem pylint-Befehl hinzufügen . Sie hatten dieses Problem in einer früheren Version auf unsichere Weise behoben. Wenn Sie nun möchten, dass sie ein Paket außerhalb der Standardbibliothek genauer betrachten, müssen Sie es explizit auf die Whitelist setzen. Siehe hier.quelle
Da dies das Top-Ergebnis in Google ist und ich den Eindruck hatte, dass Sie diese Warnungen in allen Dateien ignorieren müssen:
Das Problem wurde im letzten Monat in den Quellen von Pylint / Astroid https://bitbucket.org/logilab/astroid/commits/83d78af4866be5818f193360c78185e1008fd29e behoben , befindet sich jedoch noch nicht in den Ubuntu-Paketen.
Um die Quellen zu bekommen, einfach
wobei der letzte Schritt höchstwahrscheinlich ein erfordert
sudo
und Sie natürlich Quecksilber benötigen, um zu klonen.quelle
from numpy import ceil
Ergebnisse inE: 1, 0: No name 'ceil' in module 'numpy' (no-name-in-module)
I commit verwiesen oben geprüft und es scheint , dass diese Änderungen in der Version von astroid sind ich habe.Module 'numpy' has no 'zeros' member (no-member)
Um alle Fehler zu ignorieren, die durch die Attribute von numpy.core generiert wurden, können wir jetzt Folgendes verwenden:
Fügen Sie als weitere Lösung diese Option zur Datei ~ / .pylintrc oder / etc / pylintrc hinzu :
Für den im Fragencode bereits erwähnten Code scheint dies redundant zu sein, ist aber für andere Module immer noch wichtig, d. H. netifaces und etc.
quelle
patsy.dmatrices
. Hinzufügen hatgenerated-members=patsy.dmatrices
mein Problem gelöst.Wenn Sie keine weitere Konfiguration hinzufügen möchten, fügen Sie diesen Code anstelle von "Whitelist" zu Ihrer Konfigurationsdatei hinzu.
quelle
pylint: error: no such option: --generate-members
In den letzten Jahren wurden viele verschiedene Fehler gemeldet, z. B. https://bitbucket.org/logilab/pylint/issue/58/false-positive-no-member-on-numpy-imports
Ich würde vorschlagen, die Leitungen zu deaktivieren, in denen die Beschwerden auftreten.
quelle
Wahrscheinlich ist es mit der abstrusen Methode des Methodenimports von numpy verwechselt. Das heißt,
zeros
in der Tatnumpy.core.multiarray.zeros
, mit Aussage in numpy importiertwiederum importiert mit
und in numerischen finden Sie
Ich denke, ich wäre anstelle von PyLint verwirrt!
Siehe diesen Fehler für die PyLint-Seite.
quelle
Ich musste dies oben in jede Datei einfügen, in der ich häufig numpy verwende.
Nur für den Fall, dass jemand in Eclipse Probleme mit Pydev und Pylint hat ...
quelle
In der Antwort Erweiterung zu j_hougs können Sie nun die betreffenden Module zu dieser Zeile in .pylintrc hinzufügen, die bereits bei der Generierung leer vorbereitet ist:
Sie können ein Beispiel für .pylintrc generieren, indem Sie Folgendes tun:
und bearbeiten Sie dann die genannte Zeile
quelle
Dies wurde schließlich in Pylint 1.8.2 behoben. Funktioniert sofort, es sind keine Pylintrc-Optimierungen erforderlich!
quelle
Dies ist die Pseudolösung, die ich für dieses Problem gefunden habe.
Dann in Ihrem Code, statt Aufruf
numpy
Funktionen wienp.array
undnp.zeros
und so weiter, würden Sie schreibennp_array
,np_zeros
etc. Vorteile dieses Ansatzes gegenüber anderen Ansätzen in anderen Antworten vorgeschlagen:Der klare Nachteil ist, dass Sie jede von Ihnen verwendete Numpy-Funktion explizit importieren müssen. Der Ansatz könnte weiter ausgearbeitet werden. Sie können Ihr eigenes Modul
numpy_importer
wie folgt definierenDann könnte Ihr Anwendungscode dieses Modul nur (anstelle von numpy) als importieren
und verwenden Sie die Namen wie immer:
np.zeros
,np.array
usw.Dies hat den Vorteil, dass Sie über ein einziges Modul verfügen, in dem alle
numpy
zugehörigen Importe ein für alle Mal ausgeführt werden. Anschließend importieren Sie es mit dieser einzelnen Zeile, wo immer Sie möchten. Sie müssen jedoch darauf achten, dassnumpy_importer
keine Namen importiert werden, innumpy
denen sie nicht vorhanden sind, da diese Fehler nicht von Pylint abgefangen werden.quelle
Ich hatte dieses Problem mit Numpy, Scipy, Sklearn, Nipy usw. und löste es, indem ich Epylint wie folgt einwickelte:
$ cat epylint.py
Dieses Skript führt einfach Epylint aus und kratzt dann seine Ausgabe, um falsch positive Warnungen und Fehler herauszufiltern. Sie können es erweitern, indem Sie weitere elif-Fälle hinzufügen.
NB: Wenn dies auf Sie zutrifft, möchten Sie Ihre pychechers.sh so ändern, dass es Ihnen gefällt
(Natürlich müssen Sie zuerst epylint.py ausführbar machen.)
Hier ist ein Link zu meinen .emacs https://github.com/dohmatob/mydotemacs . Hoffe das ist nützlich für jemanden.
quelle
Dies scheint mindestens bei Pylint 1.1.0 zu funktionieren:
quelle
Diese Lösung hat bei mir funktioniert
Gehen Sie grundsätzlich zu Wählen Sie das Zahnradsymbol unten links aus => Einstellung => Arbeitsbereichseinstellung => Erweiterung => Python-Konfiguration => Klicken Sie auf eine Einstellung.json => fügen Sie diese in die Datei "python.linting.pylintArgs" ein: [" --extension-pkg-whitelist = numpy "] Ich verwende VS 1.27.2
quelle
Ich hatte das gleiche Problem mit einem anderen Modul (
kivy.properties
), das ein umschlossenes C-Modul istnumpy
.Mit VSCode V1.38.0 hat die akzeptierte Lösung alle Flusen für das Projekt gestoppt. Während es zwar das Falsch-Positive entfernte
no-name-in-module
, verbesserte es die Situation nicht wirklich.Die beste Problemumgehung für mich war, das
--ignored-modules
Argument für das betreffende Modul zu verwenden. Das Problem besteht darin, dass durch Übergeben eines Argumentspython.linting.pylintArgs
die Standard-VSCode-Einstellungen gelöscht werden. Daher müssen Sie diese ebenfalls zurücksetzen . Damit blieb mir die folgende Datei settings.json:quelle
Ein bisschen Kopieren und Einfügen aus der vorherigen Antwort, um zusammenzufassen, was funktioniert (zumindest für mich: debian-jessie)
In einigen älteren Versionen
pylint
gab es ein Problem, das die Arbeit mit numpy (und anderen ähnlichen Paketen) verhinderte.Jetzt wurde dieses Problem behoben, aber externe C-Pakete (Python-Schnittstellen zu C-Code-like numpy-) sind aus Sicherheitsgründen standardmäßig deaktiviert.
Sie können eine weiße Liste erstellen, um
pylint
sie in der Datei verwenden zu können~/.pylintrc
.Grundlegender Befehl zum Ausführen: # NUR, wenn Sie noch keine .pylintrc-Datei in Ihrem Home haben. $ Pylint --generate-rcfile> .pylintrc
Öffnen Sie dann die Datei und fügen Sie die gewünschten Pakete hinzu, nachdem Sie
extension-pkg-whitelist=
durch Komma getrennt haben. Sie können dasselbe Verhalten mit der Option--extension-pkg-whitelist=numpy
in der Befehlszeile erzielen.Wenn Sie einige Pakete in diesem
[TYPECHECK]
Abschnitt ignorieren , bedeutet dies, dasspylint
niemals Fehler in Bezug auf diese Pakete angezeigt werden. In der Praxispylint
wird Ihnen nichts über diese Pakete erzählen.quelle
Ich habe an einem Patch für pylint gearbeitet, um das Problem mit dynamischen Mitgliedern in Bibliotheken wie numpy zu lösen. Es wird eine Option "Dynamische Module" hinzugefügt, mit der überprüft werden muss, ob zur Laufzeit Mitglieder vorhanden sind, indem das Modul wirklich importiert wird. Siehe Problem Nr . 413 in logilab / pylint . Es gibt auch eine Pull-Anfrage, siehe Link in einem der Kommentare.
quelle
Eine schnelle Antwort: Aktualisieren Sie Pylint auf 1.7.1 (verwenden Sie das von conda-forge bereitgestellte Pylint 1.7.1, wenn Sie conda zum Verwalten von Paketen verwenden).
Ich habe hier ein ähnliches Problem in pylint GitHub gefunden und jemand hat geantwortet, dass nach dem Update auf 1.7.1 alles in Ordnung ist.
quelle
Ich bin nicht sicher, ob dies eine Lösung ist, aber in VSCode wurden alle Module erkannt, nachdem ich explizit in meinen Benutzereinstellungen geschrieben habe, um Pylint zu aktivieren.
quelle
In letzter Zeit (seit sich etwas in Spyder oder Pylint oder? Geändert hat) habe ich E1101-Fehler ("kein Mitglied") durch die statische Code-Analyse von Spyder auf astropy.constants-Symbolen erhalten. Keine Ahnung warum.
Meine vereinfachende Lösung für alle Benutzer auf einem Linux- oder Unix-System (Mac ist wahrscheinlich ähnlich) besteht darin, ein / etc / pylintrc wie folgt zu erstellen:
Dies könnte natürlich stattdessen in eine persönliche $ HOME / .pylintrc-Datei eingefügt werden. Und ich hätte eine vorhandene Datei aktualisieren können.
quelle