2012-05-21 12 views
18

Me gustaría instalar algunos paquetes en un directorio de terceros site-packages (más allá de las ubicaciones de sistema estándar). ¿Hay alguna manera de configurar esto para que se respeten los archivos .pth?Crear un directorio secundario de paquetes de sitio (y cargar paquetes desde archivos .pth)


Antecedentes: Estoy usando OS X, virtualenv y homebrew. Hay algunos paquetes (notablemente wxPython en mi caso) que no se instalan muy bien a través de pip en virtualenv. En estos casos, hay paquetes homebrew que funcionan en su lugar. Homebrew crea una tercera carpeta de paquetes de sitio en /usr/local/lib/python2.7. Me gustaría simplemente señalar esta carpeta y dejar el mantenimiento de todos los elementos allí bajo el control de brew. Parece, sin embargo, que esto no es posible.

Ciertamente no soy el único interesado en este tema. Apuesto que una gran cantidad de las preguntas genéricas de 'archivos pth no funcionan' y las publicaciones en línea con las que he tropezado están relacionadas con este tema. ¿Hay una buena solución?

Respuesta

17

Eche un vistazo al módulo site. Proporciona la función addsitedir que debe hacer lo que desee.

La forma más fácil de usar esta sería la creación de un archivo llamado sitecustomize.py o usercustomize.py y colocarlo en un PYTHONPATH directorio actual (o cualquier directorio que acaba en sys.path) con el siguiente contenido:

import site 
site.addsitedir('/usr/local/lib/python2.7') 

Cuando Python está comenzando, se intenta importar sitecustomize y luego usercustomize, por lo que esto funciona. A partir de la documentación del sitio:

Después de estas manipulaciones de ruta, se hace un intento para importar un módulo denominado sitecustomize, que puede realizar personalizaciones específicas del sitio arbitrarias. Por lo general, lo crea un administrador del sistema en el directorio site-packages. Si esta importación falla con una excepción ImportError, se ignora silenciosamente.

Después de esto, se intenta importar un módulo llamado usercustomize, que puede realizar personalizaciones arbitrarias específicas del usuario, si ENABLE_USER_SITE es verdadero. Este archivo está destinado a crearse en el directorio de paquetes de sitio del usuario (ver a continuación), que es parte de sys.path a menos que esté deshabilitado por -s. Un ImportError se ignorará en silencio.

+0

Haz sitecustomize.py o usercustomize.py ejecutar automáticamente en el arranque? Editar: [sí, sí lo hacen] (http://docs.python.org/library/site.html). ¡Gracias! –

+0

@MattB. Sí, edité mi respuesta con información adicional. La documentación proviene de la parte superior de la página del módulo del sitio que he vinculado en mi respuesta. –

+1

Todavía no entiendo completamente cómo funciona el sitio, pero: (1) no debería hacerlo mediante addsitedir ('/ usr/local'), es decir, el prefijo alternativo (pero no funciona para mí), o (2) addsitedir ('/ usr/local/lib/python2.7/site-packages') la ruta de acceso a agregar, y en ese segundo caso, ¿por qué no solo agregarlo a PYTHONPATH? –

1

No era PEP 370 abordar específicamente la creación de cada usuario site-packages directorios, para hacer frente a la situación en la que el usuario no tiene acceso de administrador a la site-packages de todo el sistema.

Por ejemplo, en Unix (incluido Mac OS), y suponiendo que uno está utilizando Python 3.6, se puede crear el siguiente directorio y colocar los archivos en el interior hay .pth

~/.local/lib/python3.6/site-packages

Cuestiones relacionadas