Problema de referência não resolvido no PyCharm


373

Eu tenho uma estrutura de diretórios

├── simulate.py
├── src
   ├── networkAlgorithm.py
   ├── ...

E eu posso acessar o módulo de rede com sys.path.insert().

import sys
import os.path
sys.path.insert(0, "./src")
from networkAlgorithm import *

No entanto, o pycharm reclama que não pode acessar o módulo. Como posso ensinar o pycham a resolver a referência?

insira a descrição da imagem aqui


4
A pasta src tem __init__.pyarquivo?
Puffin GDI

@ Puffin GDI: Não, não.
prosseek

5
@PuffinGDI As pastas src precisam desse arquivo .py de inicialização ?
Jack Chi

Sim, para que o python identifique pacotes: stackoverflow.com/questions/42094723/…
rnoodle

Renomeei o nome da classe e continuo trabalhando nele. Quando apertei executar, ocorreu esse erro, esqueci completamente de renomear e tentei procurar sugestões de pycharm durante a importação. Droga, as sugestões diferenciam maiúsculas de minúsculas! - Novo no python !!
Vignesh Paramasivam 09/04/19

Respostas:


817

Adicioná-lo manualmente como você fez é de fato uma maneira de fazer isso, mas existe um método mais simples, que é simplesmente dizer ao pycharm que você deseja adicionar osrc pasta como raiz de origem e, em seguida, adicionar a raiz do código ao python caminho.

Dessa forma, você não precisa codificar as coisas nas configurações do seu intérprete:

  • Adicione srccomo raiz do conteúdo de origem:

                            insira a descrição da imagem aqui

  • Em seguida, adicione fontes adicionais ao seu PYTHONPATH:

insira a descrição da imagem aqui

  • Agora as importações serão resolvidas:

                      insira a descrição da imagem aqui

Dessa forma, você pode adicionar o que quiser como raiz de origem, e as coisas simplesmente funcionarão. Se você não marcado-lo como uma raiz fonte no entanto, você vai receber um erro:

                                  insira a descrição da imagem aqui

Depois de tudo isso, não se esqueça de reiniciar. No menu PyCharm, selecione: Arquivo -> invalidar caches / reiniciar


17
Isso também funciona se você estiver usando o plugin Python com o IntelliJ.
rob mayoff

13
Esta solução funciona. O problema é que, quando outro programador recupera o código do svn, ele precisa fazer as mesmas configurações novamente para se livrar do prompt de erro "referência não resolvida".
Ben Lin

2
@GamesBrainiac, a solução é que o IDE possa analisar "sys.path.insert (0," ./src ")" e adicioná-lo ao PYTHONPATH para esse arquivo específico e fornecer uma análise de sintaxe adequada.
Ben Lin

2
Você também precisa verificar se o caminho raiz do conteúdo está correto. No pycharm 5, você pode encontrar isso em Preferências -> Projeto -> Estrutura do projeto.
Lps

11
Estranhamente, os subdiretórios não são levados em consideração. Por exemplo, se em src, temos viewspasta dentro do qual eu myview.py, eu ainda receber o erro referência não resolvida ao tentar from src.views.myview import <my_function>...
Sexy Beast

49
  1. verifique se há __init__.pyarquivo na srcpasta
  2. adicione a srcpasta como raiz de origem
  3. Em seguida, adicione fontes adicionais ao seu PYTHONPATH(veja acima)
  4. no menu PyCharm, selecione: Arquivo -> invalidar caches / reiniciar

11
Este último passo foi a única coisa que faltava na minha solução. A resposta aceita pode adicionar isso a ela.
aimbire

sem a última etapa mencionada aqui, a resposta aceita não está funcionando. A resposta aceita também deve incluir esta etapa /
santhosh kumar

23

Se alguém ainda estiver olhando para isso, a resposta aceita ainda funcionará para o PyCharm 2016.3 quando eu tentei. A interface do usuário pode ter sido alterada, mas as opções ainda são as mesmas.

ie Clique com o botão direito do mouse na pasta raiz -> 'Marcar diretório como' -> Raiz de origem


11
Tantas respostas complexas nesta discussão. A solução apresentada aqui funcionou para mim com tanta facilidade.

16

Depois de testar todas as soluções alternativas, sugiro que você dê uma olhada Settings -> Project -> project dependenciese reorganize-as.

preferência do pycharm


Isso funciona perfeitamente para mim. Eu instalei pygamelá e não mais um problema de referência não resolvido!
Michal Przybylowicz


5

Geralmente, esse é um problema de falta de pacote, basta colocar o cursor na referência não resolvida e pressionar Alt+Enterpara revelar as opções; então, você deve saber como resolvê-lo.


4

Depois de seguir a resposta aceita, o seguinte foi resolvido para mim:

FileSettingsProject <your directory/project>Project Dependencies

Escolha o diretório / projeto em que reside o arquivo que possui importações não resolvidas e marque a caixa para informar ao Pycharm que esse projeto depende do seu outro projeto.

A hierarquia da minha pasta é um pouco diferente da da pergunta. A minha é assim

├── MyDirectory  
     └── simulate.py  
├── src  
     ├── networkAlgorithm.py  
     ├── ...

Dizer ao Pycharm que o src depende MyDirectoryresolveu o problema para mim!


4

Embora todas as respostas sejam realmente úteis, há uma pequena informação que deve ser explicada explicitamente:

  • Essencialmente, um projeto com vários diretórios hierárquicos funciona como um pacote com alguns atributos.
  • Para importar Classes locais criadas personalizadas, precisamos navegar para o diretório que contém o .pyarquivo e criar um __init__.pyarquivo (vazio) lá.

Por que isso ajuda é porque esse arquivo é necessário para fazer o Python tratar o diretório como contendo pacotes. Felicidades!


3

Instale via PyCharm (funciona com o Community Edition). Abra Settings > Project > Project Interpretere clique no ícone verde + na captura de tela abaixo. Na segunda caixa de diálogo exibida, digite o nome do pacote e clique no botão 'Instalar pacote'.

insira a descrição da imagem aqui



1

Por favor, verifique se você está usando o intérprete certo. Eu estava recebendo o erro "referência não resolvida 'django'" para resolver isso. Alterei o Project Interpreter (Python 3 alterado para Python 2.7) nas configurações do projeto: Selecione Projeto, vá em Arquivo -> Configurações -> Projeto: -> Intérprete do projeto -> Navegação e Selecione a versão correta ou o intérprete (por exemplo, /usr/bin/python2.7).


1

No meu caso, o problema era que eu estava usando Virtual environmente não tinha acesso a pacotes de sites globais. Portanto, o intérprete não estava ciente dos pacotes recém-instalados.

Para resolver o problema, basta editar ou recriar seu intérprete virtual e marque a Inherit global site-packagesopção

insira a descrição da imagem aqui


Isso não tem consequências indesejáveis ​​e derrota um dos motivos para usar um ambiente virtual? Ou seja, se você levar esse ambiente para algum lugar e esses pacotes globais de sites estiverem instalados, você estará com problemas. Isso foi o que eu pensei.
theStud54


0

Feito no PyCharm 2019.3.1 Clique com o botão direito do mouse na pasta src -> "Marcar diretório como" -> Clique em "Excluído" e sua pasta src deve ser azul.


-1

Pycharm usa venv. No console do venv, você deve instalar os pacotes explicitamente ou entrar settings -> project interpreter -> add interpreter -> inherit global site-packages.


-1

Nas versões mais recentes do pycharm, você pode fazer isso simplesmente clicando com o botão direito do mouse no diretório ou pacote python do qual deseja importar um arquivo e clique em 'Marcar diretório como' -> 'Raiz de fontes'


-1

A maneira mais fácil de corrigi-lo é fazer o seguinte no seu software pyCharm:

Clique em: Arquivo> Configurações> (Projeto: o nome do seu projeto)> Intérprete de projeto>

depois clique no ícone "+" no lado direito para procurar o pacote desejado e instalá-lo.

Desfrute de codificação !!!


11
Bem-vindo ao Stack Overflow, e obrigado pela sua resposta. Embora isso possa estar correto, evite postar no futuro imagens ou links para outros sites sem contexto ou mais detalhes. O link pode parar de funcionar em algum momento, tornando essa resposta menos útil para outros usuários.
CyberJacob

@CyberJacob Muito obrigado e muito obrigado pelo seu conselho, editei a resposta removendo a imagem e adicionando texto.
zaid.mohammed
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.