Estou executando o PyLint em um projeto Python. O PyLint faz muitas reclamações sobre não conseguir encontrar membros entorpecidos. Como posso evitar isso, evitando pular as verificações de associação.
Do código:
import numpy as np
print np.zeros([1, 4])
Que, quando executado, obtenho o esperado:
[[0. 0. 0. 0.]]
No entanto, o pylint me fornece este erro:
E: 3, 6: O módulo 'numpy' não possui um membro 'zeros' (nenhum membro)
Para versões, estou usando o pylint 1.0.0 (astroid 1.0.1, comum 0.60.0) e tentando trabalhar com o numpy 1.8.0.
Eu tive o mesmo problema aqui, mesmo com as últimas versões de todos os pacotes relacionados (
astroid 1.3.2
,logilab_common 0.63.2
,pylon 1.4.0
).A seguinte solução funcionou como um encanto: eu adicionei
numpy
à lista de módulos ignorados modificando meupylintrc
arquivo, na[TYPECHECK]
seção:Dependendo do erro, você também pode precisar adicionar a seguinte linha (ainda na
[TYPECHECK] section
):fonte
extension-pkg-whitelist=numpy
linha sob o[MASTER]
cabeçalho do arquivo .pylintrc. O pylint parece ser um software bastante frágil e requer o toque de um especialista para mantê-lo trabalhando em tarefas básicas.--extension-pkg-whitelist
, que realmente realiza a importação para o módulo especificado.Eu estava recebendo o mesmo erro para um pequeno projeto numpy no qual estava trabalhando e decidi que ignorar os módulos numpy seria bom. Eu criei um
.pylintrc
arquivo com:$ pylint --generate-rcfile > ~/.pylintrc
e seguindo os conselhos de paduwan e j_houg, modifiquei os seguintes setores:
e
e "corrigiu" meu problema.
fonte
ignored-*
entradas? Para mim, apenas adicionar um módulo à lista de permissões de extensão funciona perfeitamente.Nas versões recentes do pylint, você pode adicionar
--extension-pkg-whitelist=numpy
ao seu comando pylint. Eles haviam corrigido esse problema em uma versão anterior de maneira insegura. Agora, se você deseja que eles analisem com mais cuidado um pacote fora da biblioteca padrão, você deve explicitamente colocá-lo na lista de permissões. Veja aqui.fonte
Como esse é o principal resultado do google, me deu a impressão de que você deve ignorar esses avisos em todos os arquivos:
O problema foi corrigido nas fontes do pylint / astroid no mês passado https://bitbucket.org/logilab/astroid/commits/83d78af4866be5818f193360c78185e1008fd29e, mas ainda não estão nos pacotes do Ubuntu.
Para obter as fontes, apenas
em que a última etapa provavelmente exigirá um
sudo
e, é claro, você precisará clonar o mercurial.fonte
from numpy import ceil
resulta emE: 1, 0: No name 'ceil' in module 'numpy' (no-name-in-module)
eu verifiquei o commit mencionado acima e parece que essas alterações estão na versão do astroid que eu tenho.Module 'numpy' has no 'zeros' member (no-member)
Para ignorar todos os erros gerados pelos atributos de numpy.core, agora podemos usar:
Como outra solução, adicione esta opção ao arquivo ~ / .pylintrc ou / etc / pylintrc :
Para o código de questão mencionado até agora, isso parece redundante, mas ainda é importante para outros módulos, ie. netifaces e etc.
fonte
patsy.dmatrices
. Adicionandogenerated-members=patsy.dmatrices
resolveu meu problema.Se você não quiser adicionar mais configurações, adicione este código ao seu arquivo de configuração, em vez de 'lista branca'.
fonte
pylint: error: no such option: --generate-members
Houve muitos erros diferentes relatados sobre isso nos últimos anos, ou seja, https://bitbucket.org/logilab/pylint/issue/58/false-positive-no-member-on-numpy-imports
Sugiro desativar as linhas onde as reclamações ocorrem.
fonte
Provavelmente, está confuso com o método abstruso de importação de métodos do numpy. Ou seja,
zeros
é de fatonumpy.core.multiarray.zeros
, importado numpy com declaraçãopor sua vez importado com
e em numérico você encontrará
Eu acho que ficaria confuso no lugar do PyLint!
Veja este bug para o lado do PyLint.
fonte
Eu tive que adicionar isso na parte superior de qualquer arquivo em que eu uso muito o numpy.
Caso alguém no eclipse esteja tendo problemas com Pydev e pylint ...
fonte
Na resposta Extensão à j_hougs, agora você pode adicionar os módulos em questão a esta linha no .pylintrc, que já está preparado vazio na geração:
você pode gerar uma amostra .pylintrc fazendo:
e edite a linha mencionada
fonte
Isso foi finalmente resolvido no Pylint 1.8.2. Funciona imediatamente, não são necessários ajustes no pylintrc!
fonte
Esta é a pseudo-solução que eu criei para esse problema.
Então, em seu código, em vez de chamar
numpy
funções comonp.array
enp.zeros
e assim por diante, você iria escrevernp_array
,np_zeros
etc. As vantagens desta abordagem vs. outras abordagens sugeridas em outras respostas:A clara desvantagem é que você precisa importar explicitamente todas as funções numpy usadas. A abordagem poderia ser elaborada mais adiante. Você pode definir seu próprio módulo, chamá-lo,
numpy_importer
como segueEm seguida, o código do aplicativo pode importar apenas este módulo (em vez de numpy) como
e usar os nomes, como de costume:
np.zeros
,np.array
etc.A vantagem disso é que você terá um único módulo no qual todas
numpy
as importações relacionadas serão feitas de uma vez por todas e, em seguida, importá-lo com essa linha única, onde quiser. Ainda assim, você deve ter cuidado paranumpy_importer
não importar nomes que não existem,numpy
pois esses erros não serão detectados pelo pylint.fonte
Eu tive esse problema com numpy, scipy, sklearn, nipy, etc., e o resolvi envolvendo o epylint da seguinte forma:
$ cat epylint.py
Esse script simplesmente executa epylint e raspa sua saída para filtrar avisos e erros falso-positivos. Você pode estendê-lo adicionando mais casos elif.
NB: Se isso se aplica a você, modifique seu pychechers.sh para que fique assim
(Obviamente, você deve primeiro executar o epylint.py)
Aqui está um link para o meu .emacs https://github.com/dohmatob/mydotemacs . Espero que isso seja útil para alguém.
fonte
Isso parece funcionar em pelo menos o Pylint 1.1.0:
fonte
Esta solução funcionou para mim
Basicamente, vá para Selecione o ícone de engrenagem na parte inferior esquerda => Configuração => Configuração da área de trabalho => Extensão => Configuração do Python => Clique em qualquer Settings.json => adicione isso no arquivo "python.linting.pylintArgs": [" --extension-pkg-whitelist = numpy "] Estou usando o VS 1.27.2
fonte
Eu tive o mesmo problema com um módulo diferente (
kivy.properties
) que é um módulo C embrulhadonumpy
.Usando o VSCode V1.38.0, a solução aceita interrompeu todo o processo para o projeto. Portanto, embora tenha realmente removido o falso positivo
no-name-in-module
, na verdade não melhorou a situação.A melhor solução para mim foi usar o
--ignored-modules
argumento no módulo incorreto. O problema é que passar qualquer argumento viapython.linting.pylintArgs
apaga as configurações padrão do VSCode , portanto, você também precisa redefini-las. Isso me deixou com o seguinte arquivo settings.json:fonte
Um pouco de copiar e colar da resposta anterior para resumir o que está funcionando (pelo menos para mim: debian-jessie)
Em algumas versões mais antigas,
pylint
havia um problema que impedia o trabalho com o numpy (e outros pacotes similares).Agora esse problema foi resolvido, mas os pacotes C externos (interfaces python para o código C - como numpy-) estão desativados por padrão por razões de segurança.
Você pode criar uma lista branca, para permitir
pylint
usá-los no arquivo~/.pylintrc
.Comando básico a ser executado: # SOMENTE se você ainda não possui um arquivo .pylintrc em sua casa $ pylint --generate-rcfile> .pylintrc
Em seguida, abra o arquivo e adicione os pacotes que você deseja depois
extension-pkg-whitelist=
separados por vírgula. Você pode ter o mesmo comportamento usando a opção--extension-pkg-whitelist=numpy
na linha de comando.Se você ignorar alguns pacotes na
[TYPECHECK]
seção, isso significa quepylint
nunca mostrará erros relacionados a esses pacotes. Na prática,pylint
não dirá nada sobre esses pacotes.fonte
Eu tenho trabalhado em um patch para pilotar para resolver o problema com membros dinâmicos em bibliotecas como numpy. Ele adiciona uma opção "dynamic-modules" que força a verificar se os membros existem durante o tempo de execução, fazendo uma importação real do módulo. Consulte a edição nº 413 no logilab / pylint . Há também uma solicitação pull, veja o link em um dos comentários.
fonte
Uma resposta rápida: atualize o Pylint para 1.7.1 (use o conda-forge fornecido com o Pylint 1.7.1 se você usar o conda para gerenciar pacotes)
Encontrei um problema semelhante no GitHub pylint aqui e alguém respondeu que tudo estava bem após a atualização para a 1.7.1.
fonte
Não tenho certeza se essa é uma solução, mas no VSCode, uma vez que escrevi explicitamente nas configurações do usuário para ativar o pylint, todos os módulos foram reconhecidos.
fonte
Ultimamente (desde que algo mudou em spyder, pylint ou?), Tenho recebido erros E1101 ("nenhum membro") da análise de código estático do spyder nos símbolos astropy.constants. Não faço ideia do porquê.
Minha solução simplista para todos os usuários em um sistema Linux ou Unix (o Mac provavelmente é semelhante) é criar um / etc / pylintrc da seguinte maneira:
Obviamente, isso poderia ser colocado em um arquivo $ HOME / .pylintrc pessoal. E, eu poderia ter atualizado um arquivo existente.
fonte