Entorno: Ubuntu 14

La estructura:

test
├── a
│   ├── a.py
│   └── __init__.py
├── b
│   ├── b.py
│   └── __init__.py
└── __init__.py

En "b.py":

import test.a.a

Si ejecuto "python b.py":

Traceback (most recent call last):
  File "b.py", line 1, in <module>
    import test.a.a
ImportError: No module named a.a
0
Likai Ren 10 may. 2016 a las 19:25

3 respuestas

La mejor respuesta

Tienes varias opciones

1) Incluya la ruta a la prueba de carpeta a sys.path

Puedes hacer hardcoded

B.py

import sys
sys.path.append("path/to/test")
import test.a.a

Pero en este caso, debe cambiarlo manualmente si luego cambia la carpeta de prueba a otro lugar

También puedes hacer automático con

B.py

import os, sys
path = os.path.dirname( os.path.dirname( os.path.dirname(__file__) ) )
#       folder_of_test/     test      /           b
sys.path.append(path)
import test.a.a

En este caso, si está utilizando Python 2, primero debe llamar a os.path.abspath en __file__

2) Agregue la carpeta principal de test a su variable de entorno PYTHONPATH, o coloque la carpeta test en una carpeta en su variable de entorno PYTHONPATH o PATH.

Para hacer esto hacer

$> export PYTHONPATH="/path/to/parent/folder/of/test:$PYTHONPATH"

Pero lo más probable es que solo sea temporal, para hacerlo de forma permanente, vaya al archivo .profile o .bashrc en su carpeta de inicio y coloque las instrucciones anteriores al final en su favorito way (modifico .profile para configurar mi pythonpath)

3) Llame su código como python -m test.b.b desde la carpeta que contiene test

En cualquier caso, debe asegurarse de no tener otra biblioteca que tenga el mismo nombre, por ejemplo, tengo una anaconda instalada y que viene con un paquete de prueba, y en ese caso debe cambiar el nombre para evitar confusiones

1
Community 13 abr. 2017 a las 12:36

El módulo test es parte de la biblioteca estándar. Entonces, cuando import test.a, intenta importar el módulo a en él.

Entonces, incluso si encuentra una solución, es mejor que no use ese nombre para su paquete.

1
Valentin Lorentz 10 may. 2016 a las 20:32

Probar con:

from test.a import a

O con:

from ..a import a
0
Aldo Escobar 10 may. 2016 a las 16:55