PyCharm mostra erro de referências não resolvidas para código válido

279

Estou usando o PyCharm para trabalhar em um projeto. O projeto é aberto e configurado com um intérprete e pode ser executado com sucesso. Os caminhos do interpretador remoto são mapeados corretamente. Essa parece ser a configuração correta, mas o PyCharm está destacando meu código válido com erros de "referência não resolvida", mesmo para funções internas do Python. Por que eles não parecem ser detectados, mesmo que o código seja executado? Existe alguma maneira de fazer com que o PyCharm os reconheça corretamente?


Essa instância específica do problema é com um intérprete remoto, mas o problema também aparece nos intérpretes locais.

James McCalden
fonte
Eu tenho o mesmo problema e resolvi. Aqui solução .
Maks

Respostas:

445

Arquivo | Invalidar caches ... e reiniciar o PyCharm ajuda.

Dmitry Trofimov
fonte
3
Esta é a única maneira de trabalhar no PyCharm 4.0.x no meu caso. O fato é que, se alguma coisa foi estragada e ela não é atualizada (às vezes até mostra o mesmo intérprete repetido várias vezes na lista), você terá que excluir os arquivos manualmente ... Eu até tive que remover as pastas .idea uma vez .
Danius
10
Isso é tão pesado. Não há como recuperar a antiga opção "caminho de atualização" no PyCharm 4.5?
22615 Chris Corners
6
É realmente irritante que esse IDE não cuide de uma operação tão simples.
Eduardo Pignatelli
3
Funciona momentaneamente. Depois de alguns minutos, recebo o mesmo aviso novamente #
820
A resposta aceita é pesada e muito provavelmente não trata do cerne do problema. Aqui estão as informações diretamente da boca dos cavalos: JetBrains - Raiz de conteúdo do PyCharm "O PyCharm usa as raízes de origem como ponto de partida para resolver importações" Eu tive o problema exatamente como no título, porque em alguns projetos eu preciso usar uma árvore de arquivos onde fontes estão em uma subpasta, o PyCharm fica confuso sobre as importações. Matar o cache pode ajudar por um momento, mas não é a abordagem correta. Marque o diretório de fontes como root e tudo está bem.
predmod
133

A resposta de Dmitry não funcionou para mim.

Comecei o meu indo a Project Interpreters, selecionando a aba "Paths" e pressionando o botão de atualização no submenu. Ele foi preenchido automaticamente com algo chamado "python-skeletons".

edit : captura de tela usando o PyCharm 3.4.1 (está muito bem oculto)

insira a descrição da imagem aqui

kelorek
fonte
6
Onde estão os "Intérpretes Python". Você quer dizer "intérpretes de projeto"? Estou usando o Linux e também não consegui encontrar a guia Caminhos.
Baskaya
1
No PyCharm 3.4 no OSX, é um ícone que parece uma pequena árvore de pastas e não diz "Caminhos".
Daniel Bushman
12
Para quem ainda está confuso (em PyCharm 3.4.1):Settings > Project Settings > Project Interpreter > Project Interpreters (gear button > more) > --Select the interpreter-- > Interpreter Paths (Directory Tree button on the right) > Reload List of Paths (Blue refresh-like button)
raphaeltm
5
Não existe esse botão de atualização no PyCharm 4, apenas os sinais de mais e menos.
precisa saber é o seguinte
3
@Sarah No PyCharm 4.0.4, na janela "Interpreter Paths", não tenho o botão "recarregar lista de caminhos" (ícone de atualização azul inferior). Além disso, não vejo nenhum caminho na lista e os botões mais e menos estão desativados.
Henrik Heimbuerger
70

Existem muitas soluções para isso, algumas mais convenientes que outras, e elas nem sempre funcionam.

Aqui está tudo o que você pode tentar, passando de 'rápido' para 'irritante':

  • Faça File-> Invalidate Caches / Restarte reinicie o PyCharm.
    • Você também pode fazer isso após qualquer um dos métodos abaixo, apenas para ter certeza.
  • Primeiro, verifique qual intérprete você está executando: Run-> Edit Configurations-> Configuration-> Python Interpreter.
  • Atualize os caminhos do seu intérprete:
    • File -> Settings
    • Project: [name]-> Project Interpreter-> 'Project Interpreter': ícone de engrenagem ->More...
    • Clique no botão 'Mostrar caminhos' (inferior)
    • Clique no botão 'Atualizar' (inferior)
  • Remova o intérprete e adicione-o novamente:
    • File -> Settings
    • Project: [name]-> Project Interpreter-> 'Project Interpreter': ícone de engrenagem ->More...
    • Clique no botão "Remover"
    • Clique no botão 'Adicionar' e adicione novamente seu interpeter
  • Exclua suas preferências de projeto
    • Exclua a .ideapasta do seu projeto
    • Feche e reabra o PyCharm
    • Abra seu projeto do zero
  • Exclua suas preferências de usuário do PyCharm (mas faça backup delas primeiro).
    • ~/.PyCharm50 no Mac
    • %homepath%/.PyCharm50 no Windows
  • Alterne para outro intérprete e depois novamente para o desejado.
  • Crie um novo ambiente virtual e mude para o intérprete desse ambiente.
  • Mude para outro intérprete completamente, não volte.
florisla
fonte
Eu tenho esse problema há tanto tempo que estou usando o PyCharm e eles ainda não conseguem corrigi-lo com segurança. Ainda bem que você cobriu a maior parte do trabalho dessa maneira ou de outra acaba resolvendo o problema. Engraçado como eu volto a essa resposta de vez em quando para descobrir o que eu esqueci de tentar.
21817 Alex
3
Eu trabalhei nessa lista e removendo / adicionando novamente o intérprete funcionou para mim. Obrigado!
Mark
16

No meu caso, foi a estrutura de diretórios. Meu projeto é assim:

+---dir_A
    +---dir_B
        +app
        |
        \-run.py

Então, clique com o botão direito do mouse em dir_b> "marque o diretório como"> "raiz do projeto"

Shoham
fonte
2
A questão não era que o PyCharm não reconhece o código do projeto . Ele não reconhece os métodos internos padrão do Python.
Florisla 9/03/16
Resolvi meu problema no PyCharm 2019.3.3 no MacOS
samisnotinsane
11

Encontro-me removendo e adicionando novamente o intérprete remoto para corrigir esse problema quando Invalidating Caches or Refreshing Paths não funciona.

Eu uso o vagrant e de vez em quando, se eu adicionar uma nova VM à minha instalação multi-vm, a porta encaminhada muda e isso parece confundir o PyCharm quando ele tenta usar a porta errada para o SSH. Alterar a porta não parece ajudar nas referências quebradas.

Thomas Farvour
fonte
10

Se nenhuma das outras soluções funcionar para você, tente (fazer backup) e exclua a pasta ~ / .PyCharm40 e reabra o PyCharm. Isso matará todas as suas preferências também.

No Mac, você deseja excluir ~ / Library / Caches / Pycharm40 e ~ / Library / Preferences / PyCharm40.

E no Windows: C: \ Users \ $ USER.PyCharm40.

Imran
fonte
10

Testado com PyCharm 4.0.6 (OSX 10.10.3), seguindo estas etapas:

  1. Clique no menu PyCharm.
  2. Selecione Intérprete do projeto.
  3. Selecione o ícone de engrenagem.
  4. Selecione o botão Mais.
  5. Selecione Intérprete do projeto em que você está.
  6. Selecione o botão Árvore de Diretórios.
  7. Selecione Recarregar lista de caminhos.

Problema resolvido!

siripan
fonte
10

muito fácil

você só precisa marcar seu diretório raiz como: SOURCE ROOT (vermelho) e seus aplicativos: EXCLUDED ROOT (azul),

a referência não resolvida desaparecerá.

  • insira a descrição da imagem aquiSe você usa o PyChram pro, faça isso automaticamente.
mujad
fonte
5
Eu tenho PyCharm pró e não fazer isso para mim, mas depois que eu marcado manualmente as pastas corretamente funcionou
Jose
Sim, essa é a resposta certa e não uma opção nuclear em que o efeito colateral ajuda por um momento, mas não aborda como o ferramental do jetbrains pensa ("mate o cache", certo ... e quando ele for reconstruído? "Mate-o novamente ! "). O título, que era exatamente um problema em meus projetos, onde a raiz do projeto não é necessariamente a raiz das fontes e as importações não entendem isso. Aqui estão as informações diretamente da boca do cavalo jetbrains.com/help/pycharm/content-root.html "PyCharm usa as raízes da fonte como ponto de partida para resolver as importações"!
predmod
6

Desculpe esbarrar nessa pergunta, mas tenho uma atualização importante a fazer.

Você também pode querer reverter o intérprete do projeto para o Python 2.7.6 se estiver usando outra versão além disso. Isso funcionou para mim na minha instalação do Ubuntu do PyCharm 4.04 professional depois que nenhuma das outras recomendações resolveu o meu problema.

Fairlight Evony
fonte
1
Mudar para o intérprete local do Python 2 e depois voltar para o seu intérprete remoto do Python 3 também corrigiu isso para mim.
James Fletcher
Isso funciona também no PyCharm 5 professional. Nenhuma das outras soluções neste post funcionou para mim. Entrei Settings -> "Project Interpreters", cliquei na engrenagem e depois "More...". Escolha o interpretador python padrão ( /usr/bin/python2.7no meu caso), pressione "Ok"e "Apply". Depois voltei e escolhi o virtualenv real que eu queria usar. "Ok"e "Apply"novamente, e está consertado.
Josh
Da mesma forma, FileNotFoundErroré uma coisa apenas em Python-3. Depois de definir o intérprete correto em File-Settings-Project-Interpreter e Run-Edit-Configurations, um deles fez o erro desaparecer.
Bob Stein
3

Você pode tentar fechar o Pycharm, excluir a .ideapasta do seu projeto, iniciar o Pycharm novamente e recriar o projeto. Isso funcionou para mim, enquanto a invalidação do cache não.

Jason McVetta
fonte
2

Finalmente consegui isso depois que nenhuma das soluções propostas funcionou para mim. Eu estava brincando com um projeto de framework django rest e estava usando um virtualenv que eu tinha configurado com ele. Consegui consertar o Pycharm marcando a pasta raiz como raiz de origem, mas o servidor do django lançaria exceções de resolução. Então, um funcionaria quando o outro não e vice-versa.

Por fim, tive que marcar a subpasta como a origem do pycharm. Então minha estrutura era assim

-playground
     -env
     -playground

Essa segunda pasta de playground é a que eu tive que marcar como a origem das raízes para que tudo funcione conforme o esperado. Isso não apresentou problemas para o meu cenário, por isso foi uma solução viável.

Só pensei em compartilhar caso outra pessoa possa usá-lo.

user2233949
fonte
2

Também pode ser um problema de versão em python. Eu tive que escolher o caminho certo para fazê-lo funcionar. insira a descrição da imagem aqui

Shehaaz
fonte
2

Se você deseja ignorar apenas alguns erros de "referência não resolvida", também é possível explicá-lo explicitamente ao PyCharm colocando-o na frente de sua classe / método / função:

# noinspection PyUnresolvedReferences
flix
fonte
1

Fechei todos os outros projetos e executei meu projeto necessário isoladamente no Pycharm. Eu criei um virtualenv separado do pycharm e adicionei todos os módulos necessários usando pip. Eu adicionei esse ambiente virtual no intérprete do projeto. Isso resolveu meu problema.

Waqar Detho
fonte
1

Puxa, que pesadelo, minha amálgama de diferentes respostas do StackOVerflow:

  1. Alterne para o intérprete local /usr/bin/pythonX.X e aplique
  2. Ver caminhos como a resposta acima
  3. Encontre o caminho dos esqueletos. A minha era (/home/tim/Desktop/pycharm-community-2016.2.3/helpers/python-skeletons)
  4. Volte ao intérprete virt e adicione o caminho dos esqueletos manualmente se ele não aparecer automaticamente.
Tim
fonte
1

Nenhuma das soluções acima funcionou para mim!
Se você estiver usando o ambiente virtual para o seu projeto, aplique o python.exearquivo que está dentro do diretório do ambiente virtual como intérprete para o projeto, (Alt + Ctrl + Shift + S) isso resolveu o problema para mim.

Ali Sherafat
fonte
1

No meu caso, o erro de inspeção aparece devido a um caso muito específico de código python. Uma função min que contém duas funções numpy e dois acessos à lista faz com que minha inspeção de código dê esse tipo de erro.

A remoção da linha 'd = 0' no exemplo a seguir gera um erro de referência não resolvido conforme o esperado, mas a leitura não faz com que o erro desapareça para o inspetor de código. Ainda posso executar o código sem problemas depois.

import numpy as np
def strange(S, T, U, V):
    d = 0
    print min(np.abs(S[d]), np.abs(T[d]), U[d], V[d])

Limpar caches e recarregar a lista de caminhos não funciona. Apenas alterar o código com um dos seguintes patches de exemplo funciona:

  • Outra ordem dos parâmetros 'min': esquematicamente SUTV, mas não STUV ou TSUV
  • Usando um método em vez da função: S [d] .abs () em vez de np.abs (S [d])
  • Usando a função interna abs ()
  • Adicionando um número a um parâmetro de escolha: U [d] + 0.
Wannes Goethals
fonte
1

Nenhuma das respostas resolveu meu problema.

O que isso fez comigo foi mudar de ambiente e voltar ao mesmo ambiente. File->Settings->Project interpreter

Estou usando ambientes conda.

Kristjan Kica
fonte
1

Trabalhou para mim com uma ação muito mais simples :


File > Settings > Project > Project Interpreter 
> Select "No interpreter" in the "Project interpreter" list 
> Apply > Set your python interpreter again > Click Apply

Lucro - Pycharm está atualizando esqueletos e está tudo bem.

Alexander.Iljushkin
fonte
0

Se você estiver usando vagranto erro pode ser causado por um interpretador python errado. No nosso vagrantestamos usando, pyenventão eu tive que mudar o Python Interpreter pathcaminho de /usr/bin/pythonpara/home/vagrant/.pyenv/versions/vagrant/bin/python insira a descrição da imagem aqui

Daniil Mashkin
fonte
0

Eu tenho um projeto em que um arquivo src/importa outro arquivo no mesmo diretório. Para que o PyCharm reconheça, tive que ir em Arquivo> Configurações> Projeto> Estrutura do projeto> selecione a srcpasta e clique em "Marcar como: Fontes"

Em https://www.jetbrains.com/help/pycharm/configuring-folders-within-a-content-root.html

As raízes de origem contêm os arquivos e recursos de origem reais. PyCharm usa as raízes de origem como ponto de partida para resolver importações

qwr
fonte
0

Meu problema é que o Flask-WTF não é resolvido pelo PyCharm . Tentei reinstalar e instalar ou invalidar o cache e reiniciar o PyCharm, mas ele ainda não está funcionando.

Então, eu vim com essa solução e ela funciona perfeitamente para mim.

  1. Abra o Project Interpreter por Ctrl + Alt + S (Windows) e clique em Instalar (+) uma nova bagagem.

insira a descrição da imagem aqui

  1. Digite o pacote que não é resolvido pelo PyCharm e clique em Instalar Pacote . Depois clique em OK .

insira a descrição da imagem aqui

Agora, você verá que sua biblioteca foi resolvida.

Hien Quang Le
fonte
-1

Você está usando virtualenv?

Nesse caso, é necessário notificar o PyCharm para cada alteração no local do python.exe desejado (apenas ./activate não é suficiente para o PyCharm)

Verifique se o Pycharm aponta para o interpretador e os pacotes corretos: Arquivo -> Configurações -> Projeto -> Intérprete do projeto. Clique na engrenagem e escolha python.exe na pasta Scripts do virtualenv

insira a descrição da imagem aqui

Bar Horing
fonte