J'exécute PyLint sur un projet Python. PyLint se plaint de ne pas pouvoir trouver de membres numpy. Comment éviter cela tout en évitant de sauter les chèques d'adhésion.
À partir du code:
import numpy as np
print np.zeros([1, 4])
Qui, une fois exécuté, j'obtiens l'attendu:
[[0. 0. 0. 0.]]
Cependant, pylint me donne cette erreur:
E: 3, 6: Le module 'numpy' n'a pas de membre 'zeros' (pas de membre)
Pour les versions, j'utilise pylint 1.0.0 (astroid 1.0.1, commun 0.60.0) et j'essaie de travailler avec numpy 1.8.0.
J'ai eu le même problème ici, même avec les dernières versions de tous les paquets associés (
astroid 1.3.2
,logilab_common 0.63.2
,pylon 1.4.0
).La solution suivante a fonctionné comme un charme: j'ai ajouté
numpy
à la liste des modules ignorés en modifiant monpylintrc
fichier, dans la[TYPECHECK]
section:En fonction de l'erreur, vous devrez peut-être également ajouter la ligne suivante (toujours dans le
[TYPECHECK] section
):la source
extension-pkg-whitelist=numpy
ligne sous l'en-[MASTER]
tête du fichier .pylintrc. pylint semble être un logiciel assez fragile et nécessite une touche d'expert pour qu'il fonctionne pour les tâches de base.--extension-pkg-whitelist
, qui effectue en fait l'importation pour le module spécifié.J'obtenais la même erreur pour un petit projet numpy sur lequel je travaillais et j'ai décidé qu'ignorer les modules numpy ferait très bien. J'ai créé un
.pylintrc
fichier avec:$ pylint --generate-rcfile > ~/.pylintrc
et suivant les conseils de paduwan et j_houg, j'ai modifié les secteurs suivants:
et
et il a "résolu" mon problème.
la source
ignored-*
entrées? Pour moi, ajouter simplement un module à la liste blanche d'extension fonctionne parfaitement.Dans les versions récentes de pylint, vous pouvez ajouter
--extension-pkg-whitelist=numpy
à votre commande pylint. Ils avaient résolu ce problème dans une version antérieure de manière non sécurisée. Maintenant, si vous voulez qu'ils examinent plus attentivement un paquet en dehors de la bibliothèque standard, vous devez explicitement le mettre sur liste blanche. Vois ici.la source
Comme il s'agit du meilleur résultat de Google et que cela m'a donné l'impression que vous devez ignorer ces avertissements dans tous les fichiers:
Le problème a en fait été corrigé dans les sources de pylint / astroid le mois dernier https://bitbucket.org/logilab/astroid/commits/83d78af4866be5818f193360c78185e1008fd29e mais ne sont pas encore dans les packages Ubuntu.
Pour obtenir les sources, juste
grâce à quoi la dernière étape nécessitera très probablement un
sudo
et bien sûr vous aurez besoin de mercurial pour cloner.la source
from numpy import ceil
entraîne queE: 1, 0: No name 'ceil' in module 'numpy' (no-name-in-module)
j'ai vérifié le commets référencé ci - dessus et il semble que ces changements sont dans la version de astroïde je.Module 'numpy' has no 'zeros' member (no-member)
Pour ignorer toutes les erreurs générées par les attributs de numpy.core, nous pouvons désormais utiliser:
Comme autre solution, ajoutez cette option au fichier ~ / .pylintrc ou / etc / pylintrc :
Pour le code mentionné dans la question maintenant, cela semble redondant, mais compte toujours pour un autre module, à savoir. netifaces et etc.
la source
patsy.dmatrices
. L'ajout agenerated-members=patsy.dmatrices
résolu mon problème.Si vous ne voulez pas ajouter plus de configuration, veuillez ajouter ce code à votre fichier de configuration, au lieu de «liste blanche».
la source
pylint: error: no such option: --generate-members
De nombreux bugs différents ont été signalés à ce sujet au cours des dernières années, à savoir https://bitbucket.org/logilab/pylint/issue/58/false-positive-no-member-on-numpy-imports
Je suggère de désactiver pour les lignes où les plaintes se produisent.
la source
Probablement, il est confondu avec la méthode abstruse de numpy d'importation de méthodes. A savoir,
zeros
est en faitnumpy.core.multiarray.zeros
, importé en numpy avec instructionà son tour importé avec
et en numérique, vous trouverez
Je suppose que je serais confus à la place de PyLint!
Voir ce bogue pour le côté de vue PyLint.
la source
J'ai dû ajouter ceci en haut de tout fichier où j'utilise beaucoup numpy.
Juste au cas où quelqu'un dans l'éclipse aurait des problèmes avec Pydev et pylint ...
la source
Dans Extension to j_hougs answer, vous pouvez maintenant ajouter les modules en question à cette ligne dans .pylintrc, qui est déjà préparée vide lors de la génération:
vous pouvez générer un exemple .pylintrc en faisant:
puis éditez la ligne mentionnée
la source
Ceci a finalement été résolu dans Pylint 1.8.2. Fonctionne hors de la boîte, aucun ajustement de pylintrc n'est nécessaire!
la source
C'est la pseudo-solution que j'ai trouvée pour ce problème.
Ensuite, dans votre code, au lieu d'appeler les
numpy
fonctions quenp.array
etnp.zeros
et ainsi de suite, vous écririeznp_array
,np_zeros
etc. Les avantages de cette approche par rapport aux autres approches proposées dans d' autres réponses:L'inconvénient évident est que vous devez explicitement importer chaque fonction numpy que vous utilisez. L'approche pourrait être approfondie. Vous pouvez définir votre propre module, appelez-le par exemple,
numpy_importer
comme suitEnsuite, votre code d'application pourrait importer ce module uniquement (au lieu de numpy) comme
et utiliser les noms , comme d' habitude:
np.zeros
,np.array
etc.L'avantage de ceci est que vous aurez un module unique dans lequel toutes
numpy
les importations associées sont effectuées une fois pour toutes, puis vous l'importez avec cette seule ligne, où vous le souhaitez. Cependant, vous devez faire attention ànumpy_importer
ne pas importer les noms qui n'existent pasnumpy
car ces erreurs ne seront pas détectées par pylint.la source
J'ai eu ce problème avec numpy, scipy, sklearn, nipy, etc., et je l'ai résolu en enveloppant epylint comme ceci:
$ cat epylint.py
Ce script exécute simplement epylint, puis gratte sa sortie pour filtrer les avertissements et les erreurs faux positifs. Vous pouvez l'étendre en ajoutant plus de cas elif.
NB: Si cela s'applique à vous, vous voudrez modifier votre pychechers.sh pour qu'il aime comme ça
(Bien sûr, vous devez d'abord créer un exécutable epylint.py)
Voici un lien vers mon .emacs https://github.com/dohmatob/mydotemacs . J'espère que cela est utile à quelqu'un.
la source
Cela semble fonctionner au moins sur Pylint 1.1.0:
la source
Cette solution a fonctionné pour moi
En gros, allez dans Sélectionnez l'icône d'engrenage en bas à gauche => Paramètres => Paramètres de l'espace de travail => Extension => Configuration Python => Cliquez sur n'importe quel Settings.json => ajoutez-le dans le fichier "python.linting.pylintArgs": [" --extension-pkg-whitelist = numpy "] J'utilise VS 1.27.2
la source
J'ai eu le même problème avec un module différent (
kivy.properties
) qui est un module C enveloppé commenumpy
.En utilisant VSCode V1.38.0, la solution acceptée a arrêté tout peluchage pour le projet. Donc, même si cela a effectivement éliminé les faux positifs
no-name-in-module
, cela n'a pas vraiment amélioré la situation.La meilleure solution de contournement pour moi était d'utiliser l'
--ignored-modules
argument sur le module incriminé. Le problème est que la transmission de tout argument viapython.linting.pylintArgs
efface les paramètres VSCode par défaut , vous devez donc les redéfinir également. Cela m'a laissé avec le fichier settings.json suivant:la source
Un peu de copier-coller de la réponse précédente pour résumer ce qui fonctionne (du moins pour moi: debian-jessie)
Dans certaines versions plus anciennes de,
pylint
il y avait un problème qui l'empêchait de fonctionner avec numpy (et d'autres packages similaires).Maintenant, ce problème a été résolu mais les packages C externes (interfaces python vers le code C -comme numpy-) sont désactivés par défaut pour des raisons de sécurité.
Vous pouvez créer une liste blanche, pour permettre
pylint
de les utiliser dans le fichier~/.pylintrc
.Commande de base à exécuter: # UNIQUEMENT si vous n'avez pas déjà un fichier .pylintrc dans votre maison $ pylint --generate-rcfile> .pylintrc
Ensuite, ouvrez le fichier et ajoutez les packages que vous souhaitez après
extension-pkg-whitelist=
séparés par une virgule. Vous pouvez avoir le même comportement en utilisant l'option--extension-pkg-whitelist=numpy
de la ligne de commande.Si vous ignorez certains packages dans la
[TYPECHECK]
section, cela signifie quepylint
cela ne montrera jamais d'erreur liée à ces packages. En pratique,pylint
ne vous dira rien sur ces packages.la source
J'ai travaillé sur un patch pour pylint pour résoudre le problème des membres dynamiques dans des bibliothèques telles que numpy. Il ajoute une option "dynamic-modules" qui oblige à vérifier si des membres existent lors de l'exécution en effectuant une véritable importation du module. Voir le problème n ° 413 dans logilab / pylint . Il y a aussi une pull request, voir le lien dans l'un des commentaires.
la source
Une réponse rapide: mettez à jour Pylint vers 1.7.1 (utilisez Pylint 1.7.1 fourni par conda-forge si vous utilisez conda pour gérer les paquets)
J'ai trouvé un problème similaire dans pylint GitHub ici et quelqu'un a répondu que tout allait bien après la mise à jour vers la 1.7.1.
la source
Je ne sais pas si c'est une solution, mais dans VSCode, une fois que j'ai écrit explicitement dans mes paramètres utilisateur pour activer pylint, tous les modules ont été reconnus.
la source
Dernièrement (depuis que quelque chose a changé dans spyder ou pylint ou?), J'ai reçu des erreurs E1101 ("aucun membre") de l'analyse de code statique de spyder sur les symboles astropy.constants. Je ne sais pas pourquoi.
Ma solution simpliste pour tous les utilisateurs sur un système Linux ou Unix (Mac est probablement similaire) est de créer un / etc / pylintrc comme suit:
Bien sûr, cela pourrait, à la place, être placé dans un fichier personnel $ HOME / .pylintrc. Et, j'aurais pu mettre à jour un fichier existant.
la source