2014-08-27 10 views
6

Desidero lavorare con il repository mercurial di hg stesso. Cioè, ho clonato Mercurial da https://www.mercurial-scm.org/repo/hg e voglio eseguire alcuni comandi hg all'interno del repository clonato. Il problema è che quando si esegue hg all'interno di questo clone l'eseguibile hg tenta di caricare i suoi moduli python da questa directory e non da /usr/lib/pythonVERSION ecc. Come ho capito questo succede perché il percorso di importazione Python sys.path contiene una stringa vuota come prima voce che probabilmente significa "corrente" directory". La variabile d'ambiente PYTHONPATH non è impostata.Come rimuovere la directory corrente dal percorso di importazione di Python

La ricerca è come impedire al mio hg installato di importare moduli "errati".

+0

'sys.path.insert (0,"/usr/lib/pythonVERSION ")'? –

+0

Dove dovrei metterlo? Non voglio modificare lo script di sistema 'hg'. – ragol

risposta

0

@ragol, penso che Padraic abbia la soluzione corretta. All'interno dello script python che stai cercando di eseguire comandi hg, devi includere il seguente comando: sys.path.insert(0,"/usr/lib/pythonVERSION")

Inserisci il comando all'inizio del tuo script python. Il comando dice a python di cercare nella directory /usr/lib/pythonVERSION prima di importare i moduli.

Se ciò non funziona, potrebbe essere necessario essere più specifici con il percorso. Ad esempio, se il modulo che si sta tentando di importare si trova nella directory /usr/lib/pythonVERSION/site-packages/hg, è possibile utilizzare il seguente comando: sys.path.insert(0,"/usr/lib/pythonVERSION/site-packages/hg")

+1

Lo script che cerco di eseguire è '/ usr/bin/hg' che è mercurial stesso. Forse non ti capisco bene, ma sembra che tu suggerisca di modificarlo. Questa è ovviamente la soluzione più semplice, ma significherebbe che modificherò un file installato dal gestore pacchetti. Non mi piace questa idea. Preferisco scrivere uno script esterno che chiama '/ usr/bin/hg' in modo tale che non carichi i moduli dalla directory corrente. – ragol

+0

qual è il nome dello script che stai utilizzando? ha l'estensione .py? Immagino che tu abbia creato o modificato qualche script python e stia cercando di importare un modulo chiamato mercurial. quello che sto suggerendo è di includere il comando sys.path.insert prima della riga in cui provate ad importare il modulo mercuriale – rolb

+1

@rolb quante volte deve dirvi? Sta eseguendo '/ usr/bin/hg', come un eseguibile. Potrebbe essere un vero eseguibile, potrebbe essere una sceneggiatura con uno shebang. Non ha alcuna estensione, non sono richiesti in UNIX. –

1

Il modo in cui vorrei affrontare l'argomento è attraverso la creazione di uno script /usr/local/bin/hg sh con il seguente contenuto:

#!/bin/sh 
PYTHONPATH=/usr/lib/pythonVERSION/site-packages /usr/bin/hg 

(distributives Ubuntu-based utilizzano dist-packages invece di site-packages)

PYTHONPATH è una variabile di ambiente speciale rispettato da interprete Python per ottenere i percorsi aggiuntivi modulo di importazione.

In alternativa, è possibile esportare PYTHONPATH nella shell, ma influirà sull'intera esperienza.

Problemi correlati