Esiste un modo portatile per eseguire uno script Python da una shell senza scrivere il percorso completo?Come eseguire uno script Python in modo flessibile senza specificare il percorso completo
Per esempio in Linux, mi piacerebbe, mentre nella mia home directory
cd ~
per essere in grado di eseguire uno script python chiamato run.py che è in diciamo, ~/lungo/path/to/run .py, ma voglio farlo funzionare semplicemente digitando
python run.py
invece di
python ~/long/path/to/run.py
vorrei sperare in un qualche tipo di sé lista dei percorsi di arco che contiene diverse directory proprio come la variabile PATH, in modo che python run.py esegua il primo run.py che incontra in una delle directory.
Ho pensato di trasformare run.py in un file eseguibile e aggiungere la sua directory alla variabile PATH di sistema, ma non ho trovato un modo portatile per rendere eseguibile un eseguibile python.
EDIT
Un anno più tardi dopo aver chiesto, io sono un po 'meno niubbo, e vedo che la mia domanda non era molto chiaro e non aveva molto senso, quindi dopo una domanda upvote io chiarire alcune cose.
1) Portatile.
Quando ho chiesto questo ho detto portatile. Tuttavia, ciò che significa portatile non è chiaro in questo caso, e non ho dato molta enfasi ad esso.
le piattaforme: dovrebbe funzionare su POSIX (Linux, MacOS, ecc) e Windows
questo ancora non ha molto senso in quanto Windows utilizza
cmd.exe
, e POSIX usash
, così ognuno poteva eseguire i comandi con una sintassi diversa. Quindi diciamo che la cosa più portatile possibile sarebbe quella di alimentare lo stesso input sia ash
sia a , eseguendo lo script python in entrambi i casi. In questo caso, è possibile eseguire lo stesso comando da una funzione ANSI Csystem
, che utilizzash
su POSIX ecmd
su Windows. ANSI C è una delle poche cose che è comune a Windows e POSIX, la domanda ha un senso in quel caso.
2) eseguibile
Avanti, la frase turning run.py into an executable
, non è molto chiaro. Con ciò stavo parlando della strategia Linux di chmod +x run.py
, aggiungi uno shebang #!/usr/bin/env python
e aggiungendo la sua directory il sistema aggiunge ~/long/percorso/alla variabile di ambiente PATH. Ma questo non funzionerà per Windows perché Windows non supporta una proprietà di metadati di file eseguibili come Linux e perché/usr/bin/env non esiste necessariamente in Windows.
3) Estensione
Infine, nella mia testa speravo per una soluzione che non specifica che tipo di corsa file è, in modo che se un giorno decidiamo di farlo, ad esempio, un file Perl, non le interfacce cambierebbero.
Pertanto, scrivere run.py
non sarebbe corretto perché dovrebbe specificare il tipo di file; sarebbe meglio essere in grado di scrivere solo run
Grazie FJ, questo è esattamente quello che stavo cercando, lo sento che ha due vantaggi rispetto al '#!' approccio: 2 –
(specifico Scusa, commento a metà) ... Grazie a F.J, questo è quello che stavo cercando, sento che ha due vantaggi rispetto al '#!' approccio: 1) non ingombrare gli script 2) non ingombrare la variabile PATH globale e utilizzare invece il PYTHONPATH più specifico. Lo svantaggio è ovviamente dover digitare "python -m" tutto il tempo, che occupa spazio e peggio, potrebbe significare riscrivere il codice se decidessi mai un giorno di trasformare i tuoi script python in, per esempio, script di bash. –
Ho provato Python -m, ma non ha funzionato ... Sono sicuro che run.py si trova in PYTHONPATH poiché posso importarlo e mostra quando importare sys; print sys.path ... mi manca qualcosa? –