Używam PyLint w projekcie Pythona. PyLint skarży się na niemożność znalezienia tępych członków. Jak mogę tego uniknąć, unikając pomijania sprawdzania członkostwa.
Z kodu:
import numpy as np
print np.zeros([1, 4])
Które po uruchomieniu otrzymuję oczekiwane:
[[0. 0. 0. 0.]]
Jednak pylint daje mi ten błąd:
E: 3, 6: Moduł „numpy” nie ma elementu „zera” (brak elementu)
W przypadku wersji używam pylint 1.0.0 (astroid 1.0.1, wspólny 0.60.0) i próbuję pracować z numpy 1.8.0.
Miałem ten sam problem tutaj, nawet z najnowszych wersji wszystkich pakietów powiązanych (
astroid 1.3.2
,logilab_common 0.63.2
,pylon 1.4.0
).Następujące rozwiązanie działało jak urok: dodałem
numpy
do listy ignorowanych modułów, modyfikując mójpylintrc
plik, w[TYPECHECK]
sekcji:W zależności od błędu może być również konieczne dodanie następującego wiersza (nadal w
[TYPECHECK] section
):źródło
extension-pkg-whitelist=numpy
linię pod[MASTER]
nagłówkiem pliku .pylintrc. pylint wydaje się być dość kruchym oprogramowaniem i wymaga dotyku eksperta, aby działał przy podstawowych zadaniach.--extension-pkg-whitelist
, który faktycznie wykonuje import dla określonego modułu.Otrzymałem ten sam błąd dla małego projektu numpy, nad którym pracowałem i zdecydowałem, że ignorowanie modułów numpy wystarczy. Utworzyłem
.pylintrc
plik z:$ pylint --generate-rcfile > ~/.pylintrc
i zgodnie z radą paduwana i j_houga zmodyfikowałem następujące sektory:
i
i to „naprawiło” mój problem.
źródło
ignored-*
wejść? Dla mnie samo dodanie modułu do białej listy rozszerzeń działa idealnie.W najnowszych wersjach pylint możesz dodać
--extension-pkg-whitelist=numpy
do swojego polecenia pylint. Naprawili ten problem we wcześniejszej wersji w niebezpieczny sposób. Teraz, jeśli chcesz, aby uważniej przyjrzeli się pakietowi spoza biblioteki standardowej, musisz wyraźnie dodać go do białej listy. Spójrz tutaj.źródło
Skoro to najwyższy wynik w google i sprawiło to wrażenie, że trzeba ignorować te ostrzeżenia we wszystkich plikach:
Problem został faktycznie naprawiony w źródłach pylint / astroid w zeszłym miesiącu https://bitbucket.org/logilab/astroid/commits/83d78af4866be5818f193360c78185e1008fd29e, ale nie ma ich jeszcze w pakietach Ubuntu.
Aby zdobyć źródła, po prostu
przy czym ostatni krok najprawdopodobniej będzie wymagał
sudo
i oczywiście do sklonowania potrzebujesz rtęci.źródło
from numpy import ceil
wynikuE: 1, 0: No name 'ceil' in module 'numpy' (no-name-in-module)
którego sprawdziłem zatwierdzenie, o którym mowa powyżej i wygląda na to, że te zmiany są w wersji astroida, którą mam.Module 'numpy' has no 'zeros' member (no-member)
Aby zignorować wszystkie błędy generowane przez atrybuty numpy.core, możemy teraz użyć:
Jako inne rozwiązanie dodaj tę opcję do pliku ~ / .pylintrc lub / etc / pylintrc :
Dla wspomnianego w pytaniu kodu na razie wydaje się to zbędne, ale nadal ma znaczenie dla innych modułów, tj. netifaces itp.
źródło
patsy.dmatrices
. Dodaniegenerated-members=patsy.dmatrices
rozwiązało mój problem.Jeśli nie chcesz dodawać więcej konfiguracji, dodaj ten kod do pliku konfiguracyjnego zamiast „białej listy”.
źródło
pylint: error: no such option: --generate-members
W ciągu ostatnich kilku lat zgłoszono wiele różnych błędów, np. Https://bitbucket.org/logilab/pylint/issue/58/false-positive-no-member-on-numpy-imports
Sugerowałbym wyłączenie dla linii, w których występują reklamacje.
źródło
Prawdopodobnie jest mylony z zawiłą metodą importu metod Numpy. Mianowicie
zeros
jest w rzeczywistościnumpy.core.multiarray.zeros
importowany w numpy z instrukcjąz kolei importowane z
i liczbowo znajdziesz
Chyba byłbym zdezorientowany na miejscu PyLint!
Zobacz ten błąd dla strony widoku PyLint.
źródło
Musiałem dodać to na początku każdego pliku, w którym często używam numpy.
Na wypadek gdyby ktoś w zaćmieniu miał kłopoty z Pydevem i pylintem ...
źródło
W rozszerzeniu odpowiedzi j_hougs możesz teraz dodać omawiane moduły do tej linii w pliku .pylintrc, który jest już przygotowany pusty przy generowaniu:
możesz wygenerować przykładowy plik .pylintrc, wykonując:
a następnie edytuj wspomnianą linię
źródło
Zostało to ostatecznie rozwiązane w Pylint 1.8.2. Działa po wyjęciu z pudełka, nie są potrzebne żadne poprawki pylintrc!
źródło
To jest pseudo-rozwiązanie, które wymyśliłem dla tego problemu.
Następnie w kodzie, zamiast wywoływania
numpy
funkcji, jaknp.array
inp.zeros
i tak dalej, to napiszenp_array
,np_zeros
itp Zalety takiego podejścia wobec innych rozwiązań proponowanych w innych odpowiedzi:Oczywistą wadą jest to, że musisz jawnie zaimportować każdą używaną funkcję numpy. Podejście to można by rozwinąć dalej. Możesz zdefiniować swój własny moduł, nazwij go, powiedzmy,
numpy_importer
w następujący sposóbWtedy twój kod aplikacji może importować tylko ten moduł (zamiast numpy) jako
i używać nazw jak zwykle:
np.zeros
,np.array
etc.Zaletą tego jest to, że będziesz mieć pojedynczy moduł, w którym wszystkie
numpy
powiązane importy są wykonywane raz na zawsze, a następnie importujesz je za pomocą tej pojedynczej linii, gdziekolwiek chcesz. Mimo to musisz uważać, abynumpy_importer
nie importować nazw, których nie ma w programie,numpy
ponieważ te błędy nie zostaną przechwycone przez pylint.źródło
Miałem ten problem z numpy, scipy, sklearn, nipy itp. I rozwiązałem go, owijając epylint tak:
$ cat epylint.py
Ten skrypt po prostu uruchamia epylint, a następnie przetwarza dane wyjściowe, aby odfiltrować fałszywie dodatnie ostrzeżenia i błędy. Możesz go przedłużyć, dodając więcej przypadków elif.
NB: Jeśli to dotyczy Ciebie, będziesz chciał zmodyfikować swój plik pychechers.sh, aby tak się podobał
(Oczywiście musisz najpierw stworzyć plik wykonywalny epylint.py)
Oto link do mojego .emacs https://github.com/dohmatob/mydotemacs . Mam nadzieję, że to komuś się przyda.
źródło
Wydaje się, że działa przynajmniej na Pylint 1.1.0:
źródło
To rozwiązanie zadziałało dla mnie
Zasadniczo przejdź do Wybierz ikonę koła zębatego od dołu po lewej stronie => Ustawienia => Ustawienia obszaru roboczego => Rozszerzenie => Konfiguracja Pythona => Kliknij dowolne Ustawienia.json => dodaj to w pliku "python.linting.pylintArgs": [" --extension-pkg-whitelist = numpy "] Używam VS 1.27.2
źródło
Że ten sam problem z innym modułem (
kivy.properties
), który jest owinięty moduł C podobnenumpy
.Przy użyciu VSCode V1.38.0 zaakceptowane rozwiązanie zatrzymało wszystkie linting dla projektu. Tak więc, chociaż rzeczywiście usunął fałszywie dodatni wynik
no-name-in-module
, tak naprawdę nie poprawił sytuacji.Najlepszym rozwiązaniem dla mnie było użycie
--ignored-modules
argumentu w module powodującym naruszenie. Problem polega na tym, przechodząc żadnego argumentu poprzezpython.linting.pylintArgs
ociera się o ustawieniach domyślnych VSCode , więc trzeba ponownie ustawić te również. To pozostawiło mi następujący plik settings.json:źródło
Trochę kopiuj wklej z poprzedniej odpowiedzi, aby podsumować, co działa (przynajmniej dla mnie: debian-jessie)
W niektórych starszych wersjach
pylint
występował problem uniemożliwiający pracę z numpy (i innymi podobnymi pakietami).Teraz ten problem został rozwiązany, ale zewnętrzne pakiety C (interfejsy Pythona do kodu C - podobnie jak numpy-) są domyślnie wyłączone ze względów bezpieczeństwa.
Możesz utworzyć białą listę, aby umożliwić
pylint
użycie ich w pliku~/.pylintrc
.Podstawowe polecenie do uruchomienia: # TYLKO jeśli nie masz jeszcze pliku .pylintrc w swoim domu $ pylint --generate-rcfile> .pylintrc
Następnie otwórz plik i dodaj żądane pakiety,
extension-pkg-whitelist=
oddzielając je przecinkami. Możesz mieć to samo zachowanie, używając opcji--extension-pkg-whitelist=numpy
z wiersza poleceń.Jeśli zignorujesz niektóre pakiety w
[TYPECHECK]
sekcji, oznacza to, żepylint
nigdy nie pokażą błędów związanych z tymi pakietami. W praktycepylint
nie powie Ci nic o tych pakietach.źródło
Pracowałem nad poprawką do pylint, aby rozwiązać problem z dynamicznymi członkami w bibliotekach, takich jak numpy. Dodaje opcję „dynamiczne-moduły”, która wymusza sprawdzenie, czy elementy członkowskie istnieją w czasie wykonywania, dokonując rzeczywistego importu modułu. Zobacz wydanie nr 413 w logilab / pylint . Istnieje również żądanie ściągnięcia, patrz link w jednym z komentarzy.
źródło
Szybka odpowiedź: zaktualizuj Pylint do 1.7.1 (użyj conda-forge dostarczonego Pylint 1.7.1, jeśli używasz conda do zarządzania pakietami)
Znalazłem podobny problem w pylint GitHub tutaj i ktoś odpowiedział, że wszystko jest w porządku po aktualizacji do 1.7.1.
źródło
Nie jestem pewien, czy jest to rozwiązanie, ale w VSCode, gdy napisałem wyraźnie w ustawieniach użytkownika, aby włączyć pylint, wszystkie moduły zostały rozpoznane.
źródło
Ostatnio (odkąd coś się zmieniło w spyder lub pylint czy?), Otrzymuję błędy E1101 („brak członka”) z analizy statycznego kodu Spydera na symbolach astropy.constants. Nie mam pojęcia dlaczego.
Moim uproszczonym rozwiązaniem dla wszystkich użytkowników systemu Linux lub Unix (Mac jest prawdopodobnie podobny) jest utworzenie pliku / etc / pylintrc w następujący sposób:
Oczywiście można to zamiast tego umieścić w osobistym pliku $ HOME / .pylintrc. Mogłem zaktualizować istniejący plik.
źródło