Tengo una estructura de archivo como esta:
Folder
Common
foo1.py
TestFolder
foo2.py
Quiero importar en foo2.py y foo1.py. Lo intenté pero no funciona en Ubuntu:
sys.path.append(os.path.abspath('../../'))
from Common import foo1.py

__init__.pyarchivo en tu carpeta? así es como python crea paquetes y le permite importar módulos desde ese paquete. guide.python-distribute.org/creation.htmlRespuestas:
Cómo Python encuentra sus módulos
Estrictamente tomado, un módulo es un solo archivo de Python, mientras que un paquete es una carpeta que contiene archivos de Python, acompañado de un archivo (puede estar vacío) llamado
__init__.py, para decirle a Python que es un paquete desde el cual importar módulos. En ambos casos, los módulos necesitan su.pyextensión, pero la importación se realiza sin (ver más abajo).Por defecto, Python busca sus módulos y paquetes en
$PYTHONPATH.Para averiguar qué se incluye en $ PYTHONPATH, ejecute el siguiente código en python (3):
Cómo agregar un directorio
De vez en cuando
Desde un archivo de Python, puede agregar rutas de acceso ocasionalmente a la ruta predeterminada agregando las siguientes líneas en la sección de encabezado de su aplicación o script de Python:
Por ejemplo:
si tengo una carpeta:
/home/myname/pythonfilesy quiero importar el archivomodule_1.py, ubicado en ese directorio, lo agrego a la sección de encabezado de mi código:Y simplemente puedo importar el archivo
module_1.py:Cuando creo un paquete y quiero importar módulos desde el paquete, necesito crear una carpeta que
$PYTHONPATHcontenga los módulos, acompañada de un archivo (puede estar vacío) llamado__init__.pyPor ejemplo:
Para importar desde un paquete (carpeta) llamada
my_packageen/home/myname/pythonfiles, añadir la/home/myname/pythonfilesruta a su$PYTHONPATH, al igual que en el ejemplo 1, e importar el módulo llamadomodule_2.py(dentro de la carpeta del paquete) simplemente con: `Agregar directorios a
$PYTHONPATHpermanentemente:Agregue la siguiente línea a su
~/.profilearchivo.Subdirectorios
Desde dentro de un paquete, los subdirectorios no se incluyen así; necesita "encadenar" los directorios. Para importar un módulo
module_3.py, dentro de la carpetasubfolderdentro de la carpetapackagename:Dado el hecho de que todas las subcarpetas en el paquete incluyen su propio
__init__.pyarchivo.Cuando un módulo está en el mismo directorio que el script o la aplicación
No es necesario insertar la ruta a un módulo cuando está en el mismo directorio que el script o la aplicación, se agrega automáticamente.
Ejemplo:
Si tengo una carpeta que contiene
script.pyymodule.py, simplemente puedo importar el módulo de la siguiente manera:fuente
printenv PYTHONPATHno hay nada?sys.path.append("/path/to/your/package_or_module")También agrega una ruta al valor predeterminado y es menos confuso. En comparación con losys.path.insert(0,...)que tiene0como primer argumento.La forma correcta de usar la importación relativa es:
Y también necesita un
__init__.pyen todas sus carpetas.fuente
Nota: esta respuesta no está actualizada para la última versión de Python 3, pero está aquí para la versión anterior. Para obtener más información, lea los comentarios y https://www.python.org/dev/peps/pep-0420/
Esencialmente, cada carpeta con código python que desea agregar al syspath necesita un archivo __init__.py. Estos archivos __init__.py pueden estar vacíos.
fuente
python -c "from pathlib import Path; Path('ns').mkdir(); Path('ns/mod.py').write_text('''print('mod.py')'''); import ns.mod; from shutil import rmtree; rmtree('ns')"también aquí hay documentación relevante, PEP 420, que describe la adición de la semántica del paquete de espacio de nombres