2011-05-03 23 views
7

Tenga en cuenta que busqué SO para este error y, aunque hubo muchas preguntas similares, no encontré ninguna que abordara este problema en particular.ImportError al intentar importar un módulo personalizado en Python

Estoy trabajando en un módulo de Python que tiene este aspecto:

/com 
    /company 
     /foo 
     /bar 

Estoy editando un archivo de origen en el directorio de bar y tratando de importar clases que viven en el directorio foo. He intentado importar los archivos de las siguientes maneras:

from com.company.foo import * 
from company.foo import * 
from foo import * 
import com.company.foo 
import company.foo 
import foo 

Cada una de ellas produce un error similar:

ImportError: no module named com.company.foo 

tengo __init__.py archivos en cada uno de los directorios, incluyendo el directorio que contiene com.

No estoy seguro de lo que estoy haciendo mal aquí - gracias de antemano por su ayuda!

+0

Su archivo principal, ¿está situado en la misma carpeta que "com"? – rzetterberg

+0

No, el archivo que estoy editando está en el directorio 'bar'. – inkedmn

+0

Me refiero al archivo bootstrap. Por ejemplo, "python main.py". El archivo que inicia toda la aplicación. ¿O estás usando wsgi u otra cosa que es el programa de arranque? – rzetterberg

Respuesta

5

El directorio que contiene /com tiene que estar en la ruta de Python. Hay un número de maneras de hacer esto:

  1. En la línea de comandos, cada vez que:

    [email protected]:~$ PYTHONPATH=/path/to/whatever python some_file.py

  2. En la configuración de la cáscara (.bashrc, .bash_profile, etc):

    export PYTHONPATH=/path/to/whatever

  3. En el código de Python (no lo recomiendo, como práctica general):

    import sys 
    sys.path.append('/path/to/whatever')

Como algunos de los comentaristas dijo, por lo general esto se maneja bien por el contenedor (mod_wsgi, etc) o por su/script principal de arranque (que podría hacer algo como la opción # 3, o puede ser invocada en un ambiente establecido como en las opciones n. ° 1 o n. ° 2)

0

Creo que es de .foo importación * Por lo menos en 2,7 y hasta

Cuestiones relacionadas