Ho un piccolo programma in python che consiste in un file .py più una directory di file di dati usati dal programma.Script di installazione corretto per un piccolo programma Python (non modulo) sotto Linux
Vorrei conoscere il modo corretto di creare una procedura di installazione per un utente con diritti di amministratore su Linux in modo che possa installare il programma sul proprio sistema e utilizzarlo dalla riga di comando, con opzioni e parametri. EDIT: La parte in cui ho problemi è di avere il programma, una volta installato, recuperare i file di dati, contenuti in una sottocartella "dati".
Uno script di installazione che installa il file di programma eseguibile in /usr/local/bin
e nella cartella dati in /usr/share/my_program/data
può essere una soluzione accettabile? Qualcosa di simile:
#!/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
Ora, al fine di farlo, devo assumere, nel programma, che i file di dati stanno per essere in /usr/share/my_program/data
. Ma lascerei anche all'utente la scelta di utilizzare il programma senza installarlo. Quindi dovrei assumere che i dati siano in './data', relativi al file di programma eseguibile. Come dovrei risolvere questo problema? Posso pensare ad alcuni modi, ma la mia sensazione è che sto creando un casino in cui dovrebbe esserci una risposta chiara e corretta.
Attualmente, sto considerando se usare una prova clausola except:
try:
find data from /usr/share/my_program && set path accordingly
except:
set path to the data as './data'
Anche in questo caso, mi sembra un po 'contorto. Come procederesti per l'installazione?
Molte grazie
EDIT: SOLUZIONE ADOTTATA
Sulla base delle risposte di questa domanda, e a quelli della domanda suggerita da FakeRainBrigand (How to know the path of the running script in Python?), ho creato uno script di installazione che Va in questo modo:
#!/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
E aggiunto il seguente codice nel mio programma:
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)
Ho quindi utilizzare os.path.join(DATA_PATH, "file-to-reach.txt")
modo che il programma possa raggiungere i propri dati, che si trova sotto /usr/share/my_program
.
Sarei felice di avere commenti se è disponibile un metodo più accettato.
Acclamazioni
'make' è molto più di un semplice C, ma potrebbe sembrare fuori luogo in un programma Python. – sarnold