Tengo un pequeño programa en python que consiste en un archivo .py más un directorio de archivos de datos utilizados por el programa.Script de instalación adecuado para un pequeño programa de Python (No módulo) en Linux
Me gustaría saber la forma correcta de crear un procedimiento de instalación para un usuario con derechos de administrador en Linux para que pueda instalar el programa en su sistema y usarlo desde la línea de comandos, con opciones y parámetros. EDITAR: La parte con la que estoy teniendo problemas es hacer que el programa, una vez instalado, recupere los archivos de datos, contenidos en una subcarpeta de 'datos'.
¿Sería aceptable una solución de instalación que instala el archivo de programa ejecutable en /usr/local/bin
y la carpeta de datos en /usr/share/my_program/data
? Algo así como:
#!/bin/bash
# Launch with sudo
chmod +x program.py
cp program.py /usr/local/bin
cp -r data /usr/share/my_program
echo Installation complete
Ahora, con el fin de hacer eso, tengo que asumir, en el programa, que los archivos de datos se van a estar en /usr/share/my_program/data
. Pero también dejaría al usuario la opción de usar el programa sin instalarlo. Entonces tendría que asumir que los datos están en './data', relativos al archivo de programa ejecutable. ¿Cómo debo resolver este problema? Puedo pensar en algunas maneras, pero mi sensación es que estoy creando un desastre donde debería haber una respuesta clara y correcta.
Actualmente, estoy pensando en utilizar una oportunidad cláusula except:
try:
find data from /usr/share/my_program && set path accordingly
except:
set path to the data as './data'
Una vez más, creo que es un poco complicado. ¿Cómo procederías para la instalación?
Muchas gracias
EDIT: solución adoptada
Sobre la base de las respuestas de esta pregunta, y para los de la pregunta sugerida por FakeRainBrigand (How to know the path of the running script in Python?), he creado un script de instalación que dice así:
#!/bin/bash
mkdir /usr/share/my_program
chmod +x my_program.py
cp my_program.py /usr/local/bin
cp -r data /usr/share/my_program
echo Installation completed
Y agregué el siguiente código en mi programa:
if os.path.dirname(__file__) == "/usr/local/bin":
DATA_PATH = "/usr/share/my_program/data"
elif os.path.dirname(__file__) == ".":
DATA_PATH = "./data"
else:
print "You do not have a working installation of my_program"
print "See the installation procedure in the README file"
sys.exit(1)
Luego utilizo os.path.join(DATA_PATH, "file-to-reach.txt")
para que el programa pueda alcanzarlo de datos, que se encuentran bajo /usr/share/my_program
.
Estaría encantado de tener comentarios si un método más aceptado está disponible.
Saludos
'make' es mucho más que solo C, pero puede sentirse fuera de lugar en un programa de Python. – sarnold