Sto distribuendo un pacchetto che ha questa struttura:modo corretto per trovare la directory degli script da setup.py in distutils Python?
mymodule:
mymodule/__init__.py
mymodule/code.py
scripts/script1.py
scripts/script2.py
La mymodule
sottocartella di mymodule
contiene il codice, e il subdir scripts
contiene gli script che dovrebbe essere eseguibile dall'utente.
Quando si descrive un installazione del pacchetto in setup.py
, io uso:
scripts=['myscripts/script1.py']
per specificare dove gli script dovrebbero andare. Durante l'installazione, di solito si trovano in una determinata directory specifica per piattaforma/utente bin
. Il codice che ho in mymodule/mymodule
deve comunque effettuare chiamate agli script. Qual è il modo corretto per trovare il percorso completo per questi script? Idealmente essi dovrebbero essere sul percorso dell'utente a quel punto, quindi, se voglio chiamare fuori dal guscio, dovrei essere in grado di fare:
os.system('script1.py args')
ma voglio chiamare lo script con il suo percorso assoluto, e non fare affidamento sulla directory bin specifica piattaforma di essere sul PATH
, come in:
# get the directory where the scripts reside in current installation
scripts_dir = get_scripts_dir()
script1_path = os.path.join(scripts_dir, "script1.py")
os.system("%s args" %(script1_path))
come si può fare? Grazie.
EDIT rimuovere il codice al di fuori di uno script non è una soluzione pratica per me. il motivo è che distribuisco lavori a un sistema cluster e il modo in cui lo faccio di solito è così: immagina di avere una serie di attività su cui vuoi eseguire. Ho uno script che prende tutte le attività come input e quindi chiama un altro script, che viene eseguito solo sull'attività specificata. Qualcosa di simile:
main.py:
for task in tasks:
cmd = "python script.py %s" %(task)
execute_on_system(cmd)
così main.py
bisogno di sapere dove script.py
è, perché ha bisogno di essere un eseguibile comando execute_on_system
.
correlati: [determinare la posizione dei dati Distutils file di codice in Python?] (Http://stackoverflow.com/q/8628495/95735) –
Come appare 'execute_on_system()'? –
@PiotrDobrogost: 'execute_on_system' prende come input una stringa corrispondente a un comando di shell. Quindi crea un file temporaneo chiamato 'cmd.sh' e inserisce il comando, insieme ai prefissi necessari che indicano come deve essere eseguito il lavoro (specifico per il sistema cluster utilizzato sul sistema dell'utente) - es. Cosa accoda il lavoro dovrebbe entrare, ecc. Quindi prende questo script, 'cmd.sh' e lo esegue in un modo specifico del sistema, es facendo: 'os.system (" qsub cmd.sh ")' – user248237dfsf