Problemas de importación no resueltos con PyDev y Eclipse


108

Soy muy nuevo en PyDev y Python, aunque he usado mucho Eclipse para Java. Estoy tratando de trabajar con algunos de los ejemplos de Dive Into Python y esto se siente como un problema extremadamente trivial que se está volviendo extremadamente molesto. Estoy usando Ubuntu Linux 10.04.

Quiero poder usar el archivo odbchelper.py, que se encuentra en el directorio /Desktop/Python_Tutorials/diveintopython/py

Aquí está mi archivo example.py en el que estoy trabajando en mi proyecto PyDev / Eclipse:

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

Esto funciona bien, pero luego quiero que la siguiente línea de mi código sea:

import odbchelper

y esto provoca un error de importación sin resolver cada vez. He agregado __init__.pyarchivos a casi todos los directorios posibles y no ayuda en nada. Intenté agregar __init__.pyarchivos de uno en uno a los distintos niveles de directorios entre la ubicación del proyecto y el archivo odbchelper.py, y también intenté agregar los __init__.pyarchivos a todos los directorios intermedios simultáneamente. Ninguno de los dos funciona.

Todo lo que quiero hacer es tener un proyecto en algún otro directorio, digamos /Desktop/MyStuff/Project, en el que tengo example.py ... y luego de example.py quiero importar odbchelper.py desde/Desktop/Python_Tutorials/diveintopython/py/

Cada respuesta del tablero de mensajes que puedo encontrar simplemente dice que use la sys.path.append()función para agregar este directorio a mi ruta, y luego importarlo ... pero eso es precisamente lo que estoy haciendo en mi código y no está funcionando.

También probé el truco Ctrl- 1para suprimir el mensaje de error, pero el programa aún no funciona correctamente. Recibo un error ImportError: No module named odbchelper. Así que claramente no se está agregando la ruta, o hay algún problema que se __init__.pyhan perdido todas mis muchas permutaciones de agregar archivos.

Es muy frustrante que algo tan simple ... llamar cosas desde algún archivo que existe en otro lugar de mi máquina ... requiera tanto esfuerzo.


Asegúrese de que el caso (uso de mayúsculas) sea correcto para todos los directorios necesarios en su PYTHONPATH.
Cam Jackson

Sé que esto ya ha sido respondido, pero estaba obteniendo una importación sin resolver para el grpmódulo. Acabo de agregarlo a la builtinslista en Preferencias> PyDev> Intérpretes> Python> Forced Builtins y aún obtengo autocompletado para ese módulo
user1040495

Respuestas:


132

En las propiedades de su proyecto pydev, hay un panel llamado "PyDev - PYTHONPATH", con un subpanel llamado "Bibliotecas externas". Puede agregar carpetas de origen (cualquier carpeta que tenga una __init__.py) a la ruta usando ese panel. El código de su proyecto podrá importar módulos desde esas carpetas de origen.


4
Si configura correctamente las propiedades PyDev, no es necesario meterse consys.path
Velocirraptores

6
Para otros buscadores, quería agregar mi experiencia: Windows 7, Python 2.7.1, Eclipse 3.6.2, PyDev, Pyschopg (para Python 2.7 amd64). La instalación de Psychopg fue a C: \ Python27 \ Lib \ site-packages \ psycopg2 (bajo la instalación de Python 2.7). Primero hice referencia a esa carpeta y todas las carpetas secundarias con init .py, pero descubrí que también tenía que hacer referencia a la carpeta site_packages. ( stackoverflow.com/questions/2983088/unresolved-import-models ) ( stackoverflow.com/questions/4631377/… )
Jeff Maass

86
Otro punto a tener en cuenta: es posible que Eclipse deba reiniciarse para que esto funcione. Esto solo parece funcionar a través de "Archivo -> Reiniciar" y no cerrando y volviendo a abrir manualmente.
soulBit

18
Nota importante: he descubierto que el intérprete Configuración automática agrega C:\Python27\lib\site-packages, pero en mi equipo, la carpeta lib es capitalizado: C:\Python27\Lib\site-packages. Reemplazar la entrada en minúscula por una en mayúscula, y luego Archivo-> Reiniciar solucionó el problema. Espero que ayude a alguien más :)
Cam Jackson

10
@soulBit Ojalá pudiera aprobar ese comentario 20 veces, he pasado una buena hora tratando de averiguar por qué mi importación aún no se resolvió. Gracias
Matt Dodge

51

Estoy usando eclipse kepler 4.3, PyDev 3.9.2 y en mi ubuntu 14.04 encontré el mismo problema. Lo intenté y pasé horas, con todo lo anterior la mayoría de las opciones pero en vano. Luego probé lo siguiente, que fue genial:

  • Seleccione Proyecto -> RightClick-> PyDev -> Quitar PyDev Proyecto Config
  • archivo-> reiniciar

Y estaba usando Python 2.7 como intérprete, aunque creo que no tiene ningún efecto.


5
No es necesario reiniciar Eclipse, simplemente cierre y vuelva a abrir el archivo. También funcionó en Windows con Eclipse Luna, ¡Gracias!
Noam Manos

Tuve que reiniciar Eclipse dos veces para que desaparecieran las advertencias. Gracias
Vladimir S.

También funciona con Python 3.7. Esta debería ser la solución a esta pregunta.
SPRBRN

Intenté esto y ahora no puedo iniciar mi servidor DEV. ¿Cómo reemplazo el archivo?
Lee Loftiss

@ BitByty-Bake ¿cuál es la causa raíz?
ankostis

42

Acabo de actualizar un proyecto de WXWindows a Python 2.7 y no tuve problemas para que Pydev reconociera al nuevo intérprete. Hizo lo mismo que antes para configurar el intérprete, hizo una nueva instalación de Eclipse y Pydev. Pensé que una parte de Python debía estar corrupta, así que reinstalé todo de nuevo. ¡Arghh! Cerró y volvió a abrir el proyecto y reinició Eclipse entre todos estos cambios.

FINALMENTE notó que puede 'eliminar la configuración del proyecto PyDev' haciendo clic derecho en el proyecto. Entonces se puede convertir en un proyecto PyDev nuevamente, ¡ahora es tan bueno como el oro!


Sí, cerré y reabrió el proyecto para deshacerse de esos molestos mensajes de
ImportError

17

Arreglé mi pythonpath y todo fue excelente cuando importé cosas a través de la consola, pero todas estas importaciones previamente no resueltas todavía estaban marcadas como errores en mi código, sin importar cuántas veces reinicié eclipse o refresqué / limpié el proyecto.

Hice clic derecho en el proyecto-> Pydev-> Eliminar marcadores de error y eliminó ese problema. No se preocupe, si su código contiene errores reales, se volverán a marcar.


Esto funciona bien usando liclipse con odoo 10. ¡Gracias!
Didierh

11

proyecto -> propiedades -> pydev-pythonpath -> bibliotecas externas -> agregar carpeta de origen, agregue la CARPETA PARENTAL del proyecto. Luego reinicia eclipse.


2
Bueno, este fue el que solucionó mi problema.
Simon Hayward

No es necesario reiniciar, simplemente cierre y vuelva a abrir el archivo. ¡Me lo arregló!
Jerther

4

Esto es lo que funcionó para mí (sugerido por soulBit):

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

Esta es la solución más simple que existe y elimina completamente lo molesto.


1

Hay dos formas de solucionar este problema:

  • Elimine el intérprete de Python de "Intérpretes de Python" y agréguelo nuevamente.
  • O simplemente agregue la carpeta con las bibliotecas en el intérprete que está usando en su proyecto, en mi caso estaba usando "botella" y la carpeta que agregué era "c: \ Python33 \ Lib \ site-packages \ bottle-0.11.6 -py3.3.egg "

Ahora ya no veo el error y la función de finalización de código también funciona con "botella".


1

Estoy ejecutando Eclipse 4.2.0 (Juno) y PyDev 2.8.1, y encontré este problema con una biblioteca instalada en la ruta de mis paquetes de sitio. De acuerdo con esta pregunta SO:

Archivos Pydev y * .pyc

... hay un problema con los archivos PyDev y pyc. En el caso de la lib en particular que traté de hacer referencia, todo lo que se entrega son archivos pyc.

Esto es lo que hice para abordar esto:

  1. Instale descompyle2 desde https://github.com/Mysterie/uncompyle2
  2. Ejecute uncompyle2 contra los archivos * .pyc en la lib de paquetes de sitio. Ejemplo:

    descompyle2 -r -o / tmp / ruta / a / site-packages / lib

  3. Cambie el nombre de los archivos * .pyc_dis resultantes producidos desde descompyle2 a * .py
  4. Mueva / copie estos archivos * .py a la ruta de paquetes del sitio
  5. En Eclipse, seleccione Archivo> Reiniciar

El error de importación no resuelto relacionado con los archivos .pyc debería desaparecer.


0

Lo siguiente, en mi opinión, resolverá el problema.

  1. Añadiendo init .py a su carpeta "~ / Desktop / Python_Tutorials / diveintopython / py"
  2. Vaya a Ventana -> Preferencias -> PyDev -> Intérpretes -> Intérprete de Python para eliminar su configuración de intérprete de Python (la razón es que PyDev no puede actualizar automáticamente las actualizaciones realizadas en cualquier sistema PythonPath)
  3. Agregue el intérprete con los mismos detalles que antes (esto actualizará su configuración de intérprete de Python con las actualizaciones realizadas en su PythonPath)
  4. Finalmente, dado que su carpeta "~ / Desktop / Python_Tutorials / diveintopython / py" no es una ruta estándar de Python, deberá agregarla. Hay dos formas de hacerlo

a. Según lo que sugirió David German. Sin embargo, esto solo se aplica a los proyectos particulares en los que se encuentra b. Agregue "~ / Desktop / Python_Tutorials / diveintopython / py" en una nueva PythonPath en Ventana -> Preferencias -> PyDev -> Intérpretes -> Intérprete de Python -> subpestaña Bibliotecas -> Nueva carpeta

Espero eso ayude.


0

Tuve algunos problemas al importar bibliotecas adicionales, después de intentar resolver el problema, entendiendo PYTHONPATH, Intérprete y Gramática, descubrí que hice todo lo que escribí, pero los problemas continúan. Después de eso, simplemente agregué una nueva línea vacía en los archivos que tenían los errores de importación y los guardé y el error se resolvió .


-1
KD.py

class A:
a=10;

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

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

ESTO funciona perfectamente archivo para mí

Otro ejemplo es

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 los nombres y códigos de archivos. Y también necesitas arreglar algunas sangrías.
dkato
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.