Dalla formulazione della tua domanda suppongo che tu abbia una macchina locale e una macchina remota in cui aggiorni due file: uno script Python e uno script Bash. Entrambi i file sono sotto il controllo SVN ed entrambi i computer hanno accesso allo stesso server SVN.
Mi dispiace di non avere alcun consiglio specifico per il tuo sistema di rete, ma lasciami elencare alcuni punti generali che ho trovato importanti per qualsiasi distribuzione.
Mantieni le modifiche di produzione limitate alle modifiche di configurazione . Scrivi che devi "usare il percorso dei set di dati sul server"; mi sembra che tu abbia i percorsi codificati nel tuo script Python. Questa non è una buona idea, proprio perché dovrai cambiare quei percorsi in ogni altra macchina in cui sposti lo script. Se ripristini tali modifiche su SVN, sul tuo computer locale avrai i percorsi remoti, e ancora e ancora ... (E se non ci fossero solo percorsi, ma anche password? Non dovresti avere password di produzione in un SVN server.)
Quindi, conserva percorsi e altre informazioni di installazione in un .ini
file e usa ConfigParser per leggerlo, oppure usa un .json
file e usa il modulo json . Conserva una copia del file localmente e una in remoto, entrambe nello stesso percorso, entrambe senza controllo SVN, e mantieni il percorso di quel file di configurazione nello script Python (o ottenerlo dalla riga di comando se non riesci a conservare entrambi configurazioni con lo stesso percorso).
Mantieni la configurazione il più piccola possibile . Qualsiasi configurazione è una "parte mobile" della tua applicazione e qualsiasi sistema è più robusto tanto meno ha parti mobili. Un buon indicatore di qualcosa che appartiene alla configurazione è esattamente che devi modificarlo ogni volta che sposti il codice; le cose che non hanno avuto bisogno di essere modificate possono rimanere come costanti nel codice.
Automatizza la tua distribuzione . Puoi farlo tramite uno script Bash sul tuo computer locale; notare che è possibile eseguire qualsiasi comando su una macchina remota attraverso ssh
. Per esempio:
svn export yourprojectpath /tmp/exportedproject
tar czf /tmp/yourproject.tgz /tmp/exportedproject
scp /tmp/myproject.tgz youruser@remotemachine:~/dev
## Remote commands are in the right hand side, between ''
ssh youruser@remotemachine 'tar xzf ~/dev/yourproject.tgz'
ssh youruser@remotemachine 'qsub ~/dev/yourproject/script.py'
Perché ciò funzioni, ovviamente è necessario disporre di un accesso senza password , basato su chiavi pubbliche / private, impostato tra la macchina locale e quella remota.
Se hai bisogno di più di questo, puoi pensare di usare Python's Fabric o la cucina di livello superiore .