Mi python de alguna manera no puede encontrar ningún módulo en el mismo directorio. ¿Qué estoy haciendo mal? (python2.7)
Entonces tengo un directorio '2014_07_13_test', con dos archivos en él:
- test.py
- hola.py
donde hello.py:
# !/usr/local/bin/python
# -*- coding: utf-8 -*-
def hello1():
print 'HelloWorld!'
y test.py:
# !/usr/local/bin/python
# -*- coding: utf-8 -*-
from hello import hello1
hello1()
Todavía Python me da
>>> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 4, in <module>
ImportError: No module named hello
¿Qué pasa?
import sys; sys.path
>>> import test
Respuestas:
Su código está bien, sospecho que su problema es cómo lo está iniciando.
Debe iniciar Python desde su directorio '2014_07_13_test'.
Abra un símbolo del sistema y 'cd' en su directorio '2014_07_13_test'.
Por ejemplo:
$ cd /path/to/2014_07_13_test $ python test.py
Si no puede 'cd' en el directorio como este, puede agregarlo a sys.path
En test.py:
import sys, os sys.path.append('/path/to/2014_07_13_test')
O configurar / editar el PYTHONPATH
Y todo debería estar bien ...
... bueno, hay un pequeño error con sus líneas 'shebang' (la primera línea en ambos archivos), no debería haber un espacio entre el '#' y el '!'
Hay un mejor shebang que deberías usar.
Además, no necesita la línea shebang en cada archivo ... solo los que pretende ejecutar desde su shell como archivos ejecutables.
fuente
Cambie su importación en test.py a:
from .hello import hello1
fuente
from . import hello
from . import local_module
Tuve un problema similar, lo resolví agregando explícitamente el directorio del archivo a la lista de rutas:
import os import sys file_dir = os.path.dirname(__file__) sys.path.append(file_dir)
Después de eso, no tuve problemas para importar desde el mismo directorio.
fuente
Aquí está la solución genérica que utilizo. Resuelve el problema de importar desde módulos en la misma carpeta:
import os.path import sys sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
Pon esto en la parte superior del módulo que da el error "Ningún módulo llamado xxxx"
fuente
En mi caso, Python no pudo encontrarlo porque puse el código dentro de un módulo con guiones, por ejemplo
my-module
. Cuando lo cambiémy_module
funcionó.fuente
Me encontré con este problema. Tenía tres carpetas en el mismo directorio, así que tuve que especificar qué carpeta. Ej: desde el script de importación de carpetas
fuente
Lo siguiente no resuelve el problema del OP, pero el título y el error es exactamente lo que enfrenté.
Si su proyecto tiene un
setup.py
script, puede instalar ese paquete en el que se encuentra, conpython3 -m pip install -e .
opython3 setup.py install
opython3 setup.py develop
, y este paquete se instalará, pero seguirá siendo editable (por lo que los cambios en el código se verán al importar el paquete). Si no tiene unsetup.py
, dale sentido .De todos modos, ¿parece que el problema que enfrenta OP ya no existe?
archivo
one.py
:def function(): print("output")
archivo
two.py
:#!/usr/bin/env python3 import one one.function()
chmod +x two.py # To allow execution of the python file ./two.py # Only works if you have a python shebang Command line output: output
Otras soluciones parecen 'sucias'
En el caso de OP con 2 archivos de prueba, modificarlos para que funcionen probablemente esté bien. Sin embargo, en otros escenarios reales, los métodos enumerados en las otras respuestas probablemente no se recomiendan. Requieren que modifique el código Python o restrinja su flexibilidad (ejecutando el archivo Python desde un directorio específico) y generalmente presentan molestias. ¿Qué pasa si acaba de clonar un proyecto y esto sucede? Probablemente ya funcione para otras personas y no es necesario realizar cambios en el código. La respuesta elegida también quiere que las personas ejecuten un script desde una carpeta específica para que funcione. Esto puede ser una fuente de molestias a largo plazo, lo que nunca es bueno. También sugiere agregar su carpeta de Python específica a PATH (se puede hacer a través de Python o la línea de comandos). Nuevamente, ¿qué sucede si cambia el nombre o mueve la carpeta en unos meses? Tienes que buscar esta página de nuevo, y, finalmente, descubre que necesita establecer la ruta (y que hizo exactamente esto hace unos meses), y que simplemente necesita actualizar una ruta (seguro que puede usar sys.path y configurarlo programáticamente, pero esto puede ser inestable ). Muchas fuentes de gran molestia.
fuente
Si está seguro de que todos los módulos, los archivos que está intentando importar están en la misma carpeta y deben seleccionarse directamente con solo dar el nombre y no la ruta de referencia, entonces su editor o terminal debería haber abierto la carpeta principal donde todos los archivos / módulos están presentes.
O bien, intente ejecutar desde Terminal, asegúrese primero de ir al directorio correcto.
discos compactos
path to the root folder where all the modules are
pitón
script.py
O si ejecuta [F5] desde el editor, es decir, VsCode, abra allí la carpeta completa y no los archivos individuales.
fuente