Python está instalado en un directorio local.
Mi árbol de directorios se ve así:
(local directory)/site-packages/toolkit/interface.py
Mi código está aquí:
(local directory)/site-packages/toolkit/examples/mountain.py
Para ejecutar el ejemplo, escribo python mountain.py
, y en el código que tengo:
from toolkit.interface import interface
Y me sale el error:
Traceback (most recent call last):
File "mountain.py", line 28, in ?
from toolkit.interface import interface
ImportError: No module named toolkit.interface
Ya lo he comprobado sys.path
y allí tengo el directorio /site-packages
. Además, tengo el archivo __init__.py.bin
en la carpeta del kit de herramientas para indicarle a Python que este es un paquete. También tengo un __init__.py.bin
en el directorio de ejemplos.
No sé por qué Python no puede encontrar el archivo cuando está en sys.path
. ¿Algunas ideas? ¿Puede ser un problema de permisos? ¿Necesito algún permiso de ejecución?
python
importerror
python-import
Eduardo
fuente
fuente
755
. Eso se debía a queumask
en la máquina se0027
debía a queothers
no teníaread
permiso, lo que hacía que el módulo no fuera leído. Agregarread
permiso solucionó mi problema. Vale la pena verificar el permiso del directorio de destino posterior a la instalación.interface
(ha sido un conflicto).Respuestas:
Según sus comentarios a la publicación de orip, supongo que esto es lo que sucedió:
__init__.py
en windows.__init__.py
(ahora llamado__init__.py.bin
) significa que Python no entiende el kit de herramientas como un paquete.__init__.py
en el directorio apropiado y todo funciona ...?fuente
.bin
.python driver.py
cuando debería haber estado usandopython3 driver.py
desde que instalépip3
.Hace
tener un
__init__.py
?Para que la importación recorra sus directorios, cada directorio debe tener un
__init__.py
archivo.fuente
Me encontré con algo muy similar cuando hice este ejercicio en LPTHW; Nunca pude hacer que Python reconociera que tenía archivos en el directorio desde el que llamaba. Pero al final pude hacerlo funcionar. Lo que hice y lo que recomiendo es probar esto:
(NOTA: desde su publicación inicial, supongo que está utilizando una máquina basada en * NIX y está ejecutando cosas desde la línea de comandos, por lo que este consejo se adapta a eso. Desde que ejecuto Ubuntu, esto es lo que hice)
1) Cambie el directorio (cd) al directorio sobre el directorio donde están sus archivos. En este caso, está intentando ejecutar el
mountain.py
archivo e intentando llamar altoolkit.interface.py
módulo, que se encuentra en directorios separados. En este caso, iría al directorio que contiene rutas a ambos archivos (o, en otras palabras, al directorio más cercano que comparten las rutas de ambos archivos). Que en este caso es eltoolkit
directorio.2) Cuando esté en el
tookit
directorio, ingrese esta línea de código en su línea de comando:export PYTHONPATH=.
Esto establece su PYTHONPATH en ".", Lo que básicamente significa que su PYTHONPATH ahora buscará cualquier archivo llamado dentro del directorio en el que se encuentra actualmente (y más al punto, en las ramas del subdirectorio del directorio en el que se encuentra. Por lo tanto, no solo se ve en su directorio actual, sino en todos los directorios que están en su directorio actual).
3) Después de configurar su PYTHONPATH en el paso anterior, ejecute su módulo desde su directorio actual (el
toolkit
directorio). Python ahora debería encontrar y cargar los módulos que especificó.Espero que esto ayude. Yo mismo estaba bastante frustrado con esto.
fuente
set PYTHONPATH=.
.En * nix, también asegúrese de que PYTHONPATH esté configurado correctamente, especialmente que tenga este formato:
(Cuidado con el
.:
en cuenta el principio, para que también pueda buscar en el directorio actual).También puede estar en otras ubicaciones, según la versión:
fuente
.:/usr/lib/python
,.:/usr/lib/python2.6
,.:/usr/lib/python2.7
, etc, dependiendo de la versión#!/usr/bin/python
al final de un archivo también debería funcionar, ¿verdad?Resolví mi propio problema y escribiré un resumen de las cosas que estaban mal y la solución:
El archivo debe llamarse exactamente
__init__.py
. Si la extensión es diferente, como en mi caso.py.bin
, Python no puede moverse a través de los directorios y luego no puede encontrar los módulos. Para editar los archivos necesita usar un editor de Linux, como vi o nano . Si usa un editor de Windows, esto escribirá algunos caracteres ocultos.Otro problema que lo afectaba era que tenía otra versión de Python instalada por la raíz, por lo que si alguien está trabajando con una instalación local de python, asegúrese de que la instalación de Python que ejecuta los programas sea la Python local. Para verificar esto, simplemente haga
which python
y vea si el ejecutable es el que está en su directorio local. De lo contrario, cambie la ruta, pero asegúrese de que el directorio local de Python esté antes que el otro Python.fuente
__init__.py
archivos colocados en el directorio relevante pero instalé manualmente un paquete usandosetup.py
. Cómo la instalación de un nuevo paquete interferiría con las importaciones.una solución fácil es instalar el módulo usando en
python -m pip install <library-name>
lugar depip install <library-name>
usar sudo en caso de restricciones administrativasfuente
python -m
logra delantepip install
?python -m pip...
funcionando, peropip...
no lo hizo: son efectivamente la misma cosa, suponiendo que realmente estén en el mismopython
directorio. Posiblemente, la situación observada fue que elpip
programa independiente no estaba disponible en alguna versión anterior de Python (pero ahora está en las últimas 2.7 y 3.x). En ese caso, elpython
estaba en un virtualenv local ypip
no lo estaba, porpython -m pip install
lo que se instalaría en el virtualenv local, mientraspip
que intentaría instalarlo en el sistema python (y fallaría sin sudo). En cualquier caso, no tiene sentido.Para marcar un directorio como un paquete, necesita un archivo llamado
__init__.py
, ¿esto ayuda?fuente
Usando
PyCharm
(parte de la suite JetBrains) necesita definir su directorio de script como Fuente:Right Click > Mark Directory as > Sources Root
fuente
Estás leyendo esta respuesta que dice que estás
__init__.py
en el lugar correcto, has instalado todas las dependencias y todavía estás obteniendo elImportError
.Estaba enfrentando un problema similar, excepto que mi programa funcionaría bien cuando se ejecutaba usando PyCharm, pero el error anterior cuando lo ejecutaba desde el terminal. Después de investigar más, descubrí que
PYTHONPATH
no tenía la entrada para el directorio del proyecto. Entonces, configuréPYTHONPATH
por declaración de importación funciona en PyCharm pero no desde la terminal :Hay otra forma de hacer esto usando
sys.path
como:Puede usar insertar / agregar según el orden en el que desea que se busque su proyecto.
fuente
Para mí, fue algo realmente estúpido. Instalé la biblioteca usando
pip3 install
pero estaba ejecutando mi programapython program.py
en lugar de hacerlopython3 program.py
.fuente
Sip. Necesita el directorio para contener el
__init__.py
archivo, que es el archivo que inicializa el paquete. Aquí, mira esto .fuente
por ejemplo: / etc / environment
PYTHONPATH = $ PYTHONPATH: / opt / folder1: / opt / folder2
/ opt / folder1 / foo
/ opt / folder2 / foo
Y, si está intentando importar un archivo foo, python no sabrá cuál desea.
from foo import ... >>> importador: ningún módulo llamado foo
fuente
Mis dos centavos:
Escupir:
Esto me confundió muchísimo: revisé publicaciones y publicaciones que sugerían feos trucos de syspath (como ves
__init__.py
, todos estaban allí). Bien, resulta que game / oblivion.py y game / oblivion confundieron a Python y escupieron el inútil "No módulo llamado RecordGroups". Me interesaría una solución alternativa y / o enlaces que documenten este comportamiento (mismo nombre) -> EDITAR (2017.01.24) - eche un vistazo a ¿Qué sucede si tengo un módulo y un paquete con el mismo nombre? Curiosamente, normalmente los paquetes tienen prioridad, pero aparentemente nuestro lanzador viola esto.EDITAR (2015.01.17): No mencioné que usamos un lanzador personalizado diseccionado aquí .
fuente
game.oblivion.RecordGroups !== game/oblivion/patchers/RecordGroups.py
Puede querer arreglar eso agregando su código de Python para usar:game.oblivion.patchers.RecordGroups
game.oblivion.__init__.py
pero es posible que tenga que verificar estoLinux: los módulos importados se encuentran en /usr/local/lib/python2.7/dist-packages
Si está utilizando un módulo compilado en C, no se olvide de cambiar el archivo .so después
sudo setup.py install
.fuente
En mi caso, el problema era que estaba vinculando a depurar
python
&boost::Python
, lo que requiere que la extensión seaFooLib_d.pyd
, no soloFooLib.pyd
; cambiar el nombre del archivo o actualizar lasCMakeLists.txt
propiedades corrigió el error.fuente
Si ha probado todos los métodos proporcionados anteriormente pero falló, tal vez su módulo tenga el mismo nombre que un módulo incorporado. O bien, un módulo con el mismo nombre existente en una carpeta que tiene una alta prioridad en
sys.path
que la de su módulo.Para depurar, diga sus
from foo.bar import baz
quejasImportError: No module named bar
. Cambiando aimport foo; print foo
, que mostrará el camino defoo
. ¿Es lo que esperas?De lo contrario, cambie el nombre
foo
o use las importaciones absolutas .fuente
ImportError: No module named foo
.Mi problema fue que agregué el directorio con el
__init__.py
archivo a PYTHONPATH, cuando en realidad necesitaba agregar su directorio padre.fuente
A todos aquellos que todavía tienen este problema. Creo que Pycharm se confunde con las importaciones. Para mí, cuando escribo 'desde el espacio de nombres importar algo', la línea anterior se subraya en rojo, lo que indica que hay un error, pero funciona. Sin embargo, '' desde .namespace import algo 'no se subraya, pero tampoco funciona.
Tratar
fuente
Solucioné mi problema escribiendo
print (sys.path)
y descubrí que Python estaba usando paquetes desactualizados a pesar de una instalación limpia. La eliminación de estos python hechos usa automáticamente los paquetes correctos.fuente
En mi caso, porque estoy usando PyCharm y PyCharm creo un 'venv' para cada proyecto en la carpeta del proyecto, pero es solo un mini env de python. Aunque ha instalado las bibliotecas que necesita en Python, pero en su proyecto personalizado 'venv', no está disponible. Esta es la verdadera razón de 'ImportError: ningún módulo llamado xxxxxx' ocurrió en PyCharm. Para resolver este problema, debe agregar bibliotecas al entorno personalizado de su proyecto siguiendo estos pasos:
Disfrutar.
fuente
Después de sufrir el mismo problema, descubrí que mi resolución era eliminar todos los
pyc
archivos de mi proyecto, parece que estos archivos en caché de alguna manera estaban causando este error.La forma más fácil que encontré para hacer esto fue navegar a mi carpeta de proyectos en el explorador de Windows y buscar
*.pyc
, luego seleccionar todo ( Ctrl+ A) y eliminarlos ( Ctrl+ X).Es posible que pudiera haber resuelto mis problemas simplemente borrando el
pyc
archivo específico , pero nunca lo intentéfuente
Me enfrenté al mismo problema:
Import error
. Además, la biblioteca se ha instalado al 100% correctamente. El origen del problema fue que en mi PC 3 se instaló la versión de python (paquete anaconda)). Es por eso que la biblioteca se instaló no en el lugar correcto. Después de eso, acabo de cambiar a la versión adecuada de python en mi IDE PyCharm.fuente
Yo tenía el mismo error. Fue causado por alguien que creó una carpeta en la misma carpeta que mi script, cuyo nombre entró en conflicto con un módulo que estaba importando desde otro lugar. En lugar de importar el módulo externo, miró dentro de esta carpeta que obviamente no contenía los módulos esperados.
fuente
Tuve el mismo problema (Python 2.7 Linux), encontré la solución y me gustaría compartirla. En mi caso, tuve la siguiente estructura:
En 'main.py' había intentado sin éxito todas las combinaciones a continuación:
La solución fue mucho más simple de lo que pensaba. Cambié el nombre de la carpeta "Folleto" a "folleto" y eso es todo. Ahora Python puede importar la clase Pregunta normalmente usando en 'main.py' el código:
De esto puedo concluir que los nombres de paquetes (carpetas) como 'folleto' deben comenzar en minúsculas, de lo contrario, Python lo confunde con nombres de clase y nombres de archivo.
Aparentemente, este no fue su problema, pero la respuesta de John Fouhy es muy buena y este hilo tiene casi cualquier cosa que pueda causar este problema. Entonces, esto es una cosa más y espero que tal vez esto pueda ayudar a otros.
fuente
En mi caso, estaba incluyendo la ruta a la carpeta package.egg en lugar del paquete real debajo. Copié el paquete al nivel superior y funcionó.
fuente
Esto funcionó para mí:
__init__.py
archivo creado dentro de la carpeta principal (en su caso, dentro de lasite-packages
carpeta). E importado así:¡Espero que te sea útil también!
fuente
En el servidor Linux intente
dos2unix script_name
(elimine todos (si hay alguno)
pyc
archivos con comandofind . -name '*.pyc' -delete
)y vuelva a ejecutar en el caso si trabajó en script en Windows
fuente
En mi caso, estaba usando
sys.path.insert()
para importar un módulo local y obteníamodule not found
de una biblioteca diferente. Tuve que ponersys.path.insert()
por debajo de las importaciones que informaronmodule not found
. Supongo que la mejor práctica es ponersys.path.insert()
en el fondo de sus importaciones.fuente