2011-04-01 15 views
9

Estoy escribiendo una aplicación bastante grande de Python; la aplicación es, en gran parte, una envoltura de varias bibliotecas compartidas escritas en C y C++ (Qt). Estoy 'instalar' esto sin derechos de administrador, por lo que todo, incluyendo bibliotecas compartidas, binario y también los módulos de Python deben estar en lugares no convencionales, es decir, que tengo una situación como esta:Distribución de la aplicación de Python

  1. bibliotecas compartidas en// ruta divertida módulos
  2. Python/lib instalados en/divertido/ruta/Python/lin
  3. El propio intérprete de Python también podría estar en/no estándar/ubicación

todo el asunto se distribuye como código abierto, y necesito para encontrar una manera razonablemente elegante y simple de establecer el necesario rio variables de entorno. Todo se distribuye con el software de control de versiones; por lo que las variables de entorno se deben configurar de alguna 'Además local' es decir algo como:

#!/bin/bash 
export LD_LIBRARY_PATH /funny/path/lib:$LD_LIBRARY_PATH 
export PYTHONPATH /funn/path/python/lib:$PYTHONPATH 

# 
exec python main.py 

Pero estoy programando en Python por una razón - Detesto estas secuencias de comandos shell. Cualquier opinión sobre la manera más elegante de hacer esto sería agradable.

Joakim

+2

Me gusta la forma en que redactó su último párrafo :) – Geo

+0

¿Por qué las cosas no se pueden instalar con derechos de administrador, en las ubicaciones correctas, y evitar el odiado script de shell? –

+0

Como se mencionó, esto se distribuye como fuente abierta; y para otros que seguramente sería la mejor situación. Yo trabajo en una corporación grande e inflexible: Joe Average del departamento de investigación NO tiene permitido siquiera pensar en instalar algo en, p. Ej./usr/local. – user422005

Respuesta

1

¿Por qué perder tiempo detesting scripts de shell?

Dado que no se instalará en una ubicación estándar, (y parece que no se pueden obtener administradores de sistema para instalar los paquetes necesarios en ubicaciones estándar) esa es casi la única alternativa.

Puede configurar el PYTHONPATH desde dentro de Python. Está en sys.path. Establecer una variable de entorno (como LD_LIBRARY_PATH) es más difícil, porque Linux limita las formas en que las aplicaciones pueden cambiar el entorno.

Puede usar os.exec para ejecutar un proceso en un entorno modificado. Es un poco extraño usar Python para hacer os.exec..e() para invocar Python, pero es una manera fácil de establecer una variable de entorno adicional.

+0

OK - gracias, me apegaré a un guión de shell. ¿Cuál es la forma preferida de invocar el programa final de python? (1): exec python script.py (2): python script.py (3): script.py (con el script #! In). – user422005

Cuestiones relacionadas