Problemas de importação não resolvidos com PyDev e Eclipse


108

Sou muito novo em PyDev e Python, embora já tenha usado bastante o Eclipse para Java. Estou tentando trabalhar com alguns dos exemplos Dive Into Python e isso parece um problema extremamente trivial que está se tornando extremamente irritante. Estou usando o Ubuntu Linux 10.04.

Quero poder usar o arquivo odbchelper.py, que está localizado no diretório /Desktop/Python_Tutorials/diveintopython/py

Aqui está meu arquivo example.py no qual estou trabalhando em meu projeto PyDev / Eclipse:

import sys
sys.path.append("~/Desktop/Python_Tutorials/diveintopython/py")

Isso funciona bem, mas quero que a próxima linha do meu código seja:

import odbchelper

e isso sempre causa um erro de importação não resolvido. Eu adicionei __init__.pyarquivos a quase todos os diretórios possíveis e isso não ajuda em nada. Tentei adicionar __init__.pyarquivos um de cada vez aos vários níveis de diretórios entre o local do projeto e o arquivo odbchelper.py e também tentei adicionar os __init__.pyarquivos a todos os diretórios intermediários simultaneamente. Nenhum dos dois funciona.

Tudo o que quero fazer é ter um projeto em algum outro diretório, digamos /Desktop/MyStuff/Project, no qual tenho example.py ... e de example.py quero importar odbchelper.py de/Desktop/Python_Tutorials/diveintopython/py/

Cada resposta do quadro de mensagens eu posso encontrar apenas dizendo para usar a sys.path.append()função para adicionar este diretório ao meu caminho e, em seguida, importá-lo ... mas é precisamente isso que estou fazendo no meu código e não está funcionando.

Também tentei o truque Ctrl- 1para suprimir a mensagem de erro, mas o programa ainda não está funcionando corretamente. Recebo um erro ImportError: No module named odbchelper,. Portanto, é evidente que o caminho não está sendo adicionado ou há algum problema que todas as minhas muitas permutações de adicionar __init__.pyarquivos foram perdidas.

É muito frustrante que algo tão simples ... chamar coisas de algum arquivo que existe em algum outro lugar da minha máquina ... exija tanto esforço.


Certifique-se de que a capitalização esteja correta para todos os diretórios necessários em seu PYTHONPATH.
Cam Jackson de

Sei que isso já foi respondido, mas estava obtendo importação não resolvida para o grpmódulo. Acabei de adicioná-lo à builtinslista em Preferências> PyDev> Intérpretes> Python> Embutidos forçados e ainda obtenho o preenchimento automático para esse módulo
usuário1040495

Respostas:


132

Nas propriedades do seu projeto pydev, há um painel denominado "PyDev - PYTHONPATH", com um subpainel denominado "Bibliotecas externas". Você pode adicionar pastas de origem (qualquer pasta que tenha __init__.py) ao caminho usando esse painel. O código do projeto será então capaz de importar módulos dessas pastas de origem.


4
Se você definir as propriedades pydev corretamente, não será necessário mexer com elessys.path
Velociraptors

6
Para outros pesquisadores, gostaria de adicionar minha experiência -Windows 7, Python 2.7.1, Eclipse 3.6.2, PyDev, Pyschopg (para Python 2.7 amd64). A instalação do Psychopg foi para C: \ Python27 \ Lib \ site-packages \ psycopg2 (na instalação do Python 2.7). Referenciei primeiro essa pasta e todas as pastas filhas com init .py, mas descobri que também precisava fazer referência à pasta site_packages. ( stackoverflow.com/questions/2983088/unresolved-import-models ) ( stackoverflow.com/questions/4631377/… )
Jeff Maass

86
Um outro ponto a ser observado - o Eclipse pode precisar ser reiniciado para que isso funcione. Isso parece funcionar apenas por meio de "Arquivo -> Reiniciar" e não fechando e reabrindo manualmente.
soulBit

18
Nota importante: eu descobri que o intérprete Auto Config acrescenta C:\Python27\lib\site-packages, mas no meu computador, a pasta lib é capitalizado: C:\Python27\Lib\site-packages. Substituir a entrada em minúsculas por uma maiúscula e, em seguida, Arquivo-> Reiniciar corrigiu o problema para mim. Espero que ajude alguém por aí :)
Cam Jackson

10
@soulBit Eu gostaria de poder comentar esse comentário 20 vezes, passei uma boa hora tentando descobrir por que minha importação ainda não estava resolvida. Obrigado
Matt Dodge

51

Estou usando o eclipse kepler 4.3, PyDev 3.9.2 e no meu ubuntu 14.04 encontrei o mesmo problema. Tentei e passei horas, com todas as opções acima, mas em vão. Então tentei o seguinte, o que foi ótimo:

  • Selecione Projeto -> Clique com o botão direito- > PyDev -> Remover configuração do projeto PyDev
  • arquivo-> reiniciar

E eu estava usando o Python 2.7 como interpretador, embora não tenha efeito, eu acho.


5
Não há necessidade de reiniciar o Eclipse, apenas feche e reabra o arquivo. Também funcionou no Windows com Eclipse Luna, obrigado!
Noam Manos

Tive que reiniciar o Eclipse duas vezes para fazer os avisos desaparecerem. Obrigado
Vladimir S.

Funciona com Python 3.7 também. Esta deve ser a solução para esta questão.
SPRBRN

Tentei fazer isso e agora não consigo iniciar meu servidor DEV. Como faço para substituir o arquivo?
Lee Loftiss

@ BitByty-Bake qual é a causa raiz?
ankostis de

42

Acabei de atualizar um projeto WXWindows para Python 2.7 e não tive problemas para fazer o Pydev reconhecer o novo interpretador. Fiz a mesma coisa que configurou o interpretador acima, fiz uma nova instalação do Eclipse e do Pydev. Achei que alguma parte do python devia estar corrompida, então instalei tudo novamente. Arghh! Fechado e reaberto o projeto e reiniciado o Eclipse entre todas essas mudanças.

FINALMENTE notei que você pode 'remover a configuração do projeto PyDev' clicando com o botão direito no projeto. Em seguida, pode ser transformado em um projeto PyDev novamente, agora é bom como ouro!


Sim, fechou e reabriu o projeto para se livrar das mensagens perturbadoras do
ImportError

17

Eu consertei meu pythonpath e tudo estava ótimo quando importei coisas através do console, mas todas essas importações não resolvidas anteriormente ainda estavam marcadas como erros em meu código, não importa quantas vezes eu reiniciei o eclipse ou atualizei / limpei o projeto.

Cliquei com o botão direito do mouse no projeto-> Pydev-> Remover marcadores de erro e ele me livrou desse problema. Não se preocupe, se o seu código contiver erros reais, eles serão remarcados.


Isso funciona bem usando o liclipse com o odoo 10. Obrigado!
Didierh

11

projeto -> propriedades -> pydev-pythonpath -> bibliotecas externas -> adicionar pasta de origem, adicionar a PASTA PAI do projeto. Em seguida, reinicie o eclipse.


2
Bem, foi isso que resolveu meu problema.
Simon Hayward,

Não há necessidade de reiniciar, basta fechar e reabrir o arquivo. Corrigido para mim!
Jerther

4

Aqui está o que funcionou para mim (sugerido por soulBit):

1) Restart using restart from the file menu
2) Once it started again, manually close and open it.

Esta é a solução mais simples de todas e remove completamente o que é chato.


1

Existem duas maneiras de resolver esse problema:

  • Exclua o interpretador Python de "interpretadores Python" e adicione-o novamente.
  • Ou apenas adicione a pasta com as bibliotecas no interpretador que você está usando no seu projeto, no meu caso eu estava usando "bottle" e a pasta que adicionei era "c: \ Python33 \ Lib \ site-packages \ bottle-0.11.6 -py3.3.egg "

Agora não vejo mais o erro, e o recurso de autocompletar código funciona bem com "garrafa".


1

Estou executando o Eclipse 4.2.0 (Juno) e o PyDev 2.8.1 e encontrei este problema com uma lib instalada no caminho dos meus pacotes do site. De acordo com esta pergunta do SO:

Arquivos Pydev e * .pyc

... há um problema com os arquivos PyDev e pyc. No caso da lib em particular que tentei fazer referência, tudo o que é entregue são arquivos pyc.

Aqui está o que fiz para resolver isso:

  1. Instale o uncompyle2 em https://github.com/Mysterie/uncompyle2
  2. Execute o uncompyle2 nos arquivos * .pyc no lib do site-packages. Exemplo:

    uncompyle2 -r -o / tmp / path / to / site-packages / lib

  3. Renomeie os arquivos * .pyc_dis resultantes produzidos a partir de uncompyle2 para * .py
  4. Mova / copie esses arquivos * .py para o caminho dos pacotes do site
  5. No Eclipse, selecione Arquivo> Reiniciar

O erro de importação não resolvido relacionado aos arquivos .pyc agora deve desaparecer.


0

Seguir, na minha opinião vai resolver o problema

  1. Adicionando init .py à sua pasta "~ / Desktop / Python_Tutorials / diveintopython / py"
  2. Vá para Janela -> Preferências -> PyDev -> Interpretadores -> Interpretador Python para remover a configuração do Interpretador Python (o motivo é porque o PyDev não consegue atualizar automaticamente quaisquer atualizações feitas em qualquer System PythonPath)
  3. Adicione o Interpreter com os mesmos detalhes de antes (isso irá atualizar a configuração do Interpreter Python com atualizações feitas em seu PythonPath)
  4. Finalmente, como sua pasta "~ / Desktop / Python_Tutorials / diveintopython / py" não é um PythonPath padrão, você precisará adicioná-lo. Existem duas maneiras de fazer isso

uma. De acordo com o que David German sugeriu. No entanto, isso só se aplica aos projetos específicos em que você está b. Adicione em "~ / Desktop / Python_Tutorials / diveintopython / py" em um novo PythonPath em Window -> Preferences -> PyDev -> Interpreters -> Python Interpreter -> subguia Bibliotecas -> NewFolder

Espero que ajude.


0

Tive alguns problemas para importar bibliotecas adicionais, depois de tentar resolver o problema, ao compreender PYTHONPATH, Interpreter e Grammar, descobri que escrevi tudo, mas os problemas continuam. Depois disso, apenas adicionei uma nova linha vazia nos arquivos que continham os erros de importação e os salvei e o erro foi resolvido .


-1
KD.py

class A:
a=10;

KD2.py 
from com.jbk.KD import A;
class B:
  b=120;

aa=A();
print(aa.a)

ISSO funciona perfeitamente com o arquivo para mim

Outro exemplo é

main.py
=======
from com.jbk.scenarios.objectcreation.settings import _init
from com.jbk.scenarios.objectcreation.subfile import stuff

_init();
stuff();

settings.py
==========
def _init():
print("kiran")


subfile.py
==========
def stuff():
print("asasas")    

Considere separar nomes e códigos de arquivo. E você também precisa corrigir alguns recuos.
dkato
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.