Python: Una alternativa a PYTHONPATH y la importación de paquetes

Muchos post recomiendan agregar tu directorio de trabajo (ej./home/user/projects/ci) en PYTHONPATH para importar código. Sin embargo, una forma rápida para reemplazar este método consiste en crear un enlace simbólico a tu directorio de trabajo en /usr/lib/python2.7/dist-packages.

auraham@virtual:/usr/lib/python2.7/dist-packages$ 
sudo ln -s /home/user/projects/ci

¿Por qué /usr/lib/python2.7/dist-packages? Bueno, al revisar la variable path muchos de los directorios radican en éste:

from sys import path
print path

['',
 '/usr/bin',
 '/usr/local/lib/python2.7/dist-packages/ipdb-0.7-py2.7.egg',
 ...
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PIL',
 '/usr/lib/python2.7/dist-packages/gst-0.10',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 ...
]

Ventajas:

  • No requiere modificar path dentro ningún script
  • No requiere herramientas, como virtualenv ni snippets adicionales
  • Al incluir el directorio en el nivel más alto, tienes acceso a subdirectorios (subpaquetes)

Desventajas:

  • Si deseas llevar tu código a otro equipo, debes crear el enlace de nuevo.

¿Qué hacer sin acceso a privilegios?

Si no es posible utilizar sudo, una alternativa es usar empaquetar tu código con pip o distutils y usar la bandera --user. Otro modo más simple consiste en crear un enlace simbólico al directorio principal de tu aplicación en python, siguiendo el enfoque anterior. En lugar de crear el enlace en /usr/lib/python2.7/dist-packages se debe crear en /home/USER/.local/lib/python2.7/site-packages (si los subdirectorios no existen, se deben crear). Por ejemplo, suponiendo que el directorio principal de tu aplicación está ubicado en /home/auraham/python_package, basta con lo siguiente:

auraham@virtual:~/.local/lib/python2.7/site-packages$ ln -s /home/auraham/python_package

Fuente

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s