2010-03-02 10 views
48

Sto provando ad usare l'estensione mercurial hg-git su Windows (Windows 7 64-bit, per essere precisi). Ho installato Mercurial e Git. Ho installato Python 2.5 (32-bit).Come installo correttamente dulwich per far funzionare hg-git su Windows?

Ho seguito le istruzioni su http://hg-git.github.com/ per installare l'estensione. L'easy_install iniziale, non è riuscita perché non era in grado di compilare Dulwich senza Visual Studio 2003.

ho installato Dulwich manualmente:

  • git clone git: //git.samba.org/jelmer/dulwich.git
  • cd Dulwich
  • c: \ Python25 \ python setup.py --pure installare

Ora quando faccio funzionare easy_install hg-git, riesce (poiché la dipendenza dulwich è soddisfatto).

Nei miei C: \ Users \ nome utente \ Mercurial.ini, ho:

[extensions] 
hgext.bookmarks = 
hggit = 

Quando digito 'hg' al prompt dei comandi, vedo: "*** non è riuscito a importare l'estensione hggit: No module named hggit "

Guardando sotto la mia cartella c: \ Python25, l'unico riferimento a hggit che vedo è Lib\site-packages\hg_git-0.2.1-py2.5.egg. Questo dovrebbe essere estratto da qualche parte, o dovrebbe funzionare così com'è?

Poiché ciò non è riuscito, ho tentato le istruzioni "più coinvolte" dalla pagina di hg-git che suggeriva clonazione git: //github.com/schacon/hg-git.git e facendo riferimento al percorso nella mia configurazione Mercurial. Ho clonato il repo, e ha cambiato il mio file estensioni per assomigliare:

[extensions] 
hgext.bookmarks = 
hggit = c:\code\hg-git\hggit 

Ora quando corro hg, vedo: *** Impossibile importare estensione hggit da c: \ code \ hggit \ hggit: Nessun modulo chiamato dulwich.errors.

Ok, in modo che mi dice che sta trovando hggit ora, perché posso vedere in hggit \ hggit \ git_handler.py che chiama

from dulwich.errors import HangupException 

che mi fa pensare dulwich non è installato correttamente o non nel percorso.

Aggiornamento:

Da Python riga di comando:

import dulwich 

cede Import Error: No module named dulwich

Tuttavia, in C: \ Python25 \ lib \ site-packages, ho un dulwich- Cartella 0.5.0-py2.5.egg che sembra essere popolata. Questo è stato creato dai passaggi sopra menzionati. C'è un ulteriore passaggio che devo fare per renderlo parte del "percorso" Python?

da linea di comando Python (come suggerito in una delle risposte):

import pkg_resources 
pkg_resources.require('dulwich') 

rendimenti [dulwich 0.5.0 (c:\python25\lib\site-packages\dulwich-0.5.0-py2.5.egg)]

Quindi questo cosa mi dice? L'importazione di dulwich fallisce, ma a quanto pare pkg_resources può trovarlo. Cosa posso fare con queste informazioni?

+0

In una sessione interattiva di Python, eseguire: {{{ >>> import dulwich >>> print dulwich .__ version__ }}} Che cosa significa questo spettacolo? – durin42

+0

Aggiunti risultati alla sezione Aggiornamento sopra –

risposta

16

che mi fa pensare dulwich non è installato correttamente, o no nel percorso .

Hai assolutamente ragione. Le distribuzioni binarie Mercurial per Windows sono "congelate" - usano il codice Python e l'interprete in bundle con loro e quindi indipendenti dai pacchetti installati nel sistema PYTHONPATH. Quando si specifica il percorso dell'estensione hggit in Mercurial.ini, hg tenta di importarlo utilizzando il percorso diretto, ma la libreria di dulwich non viene importata esplicitamente da hg e non è associata alla sua libreria, quindi l'importazione non riesce.

È possibile aggiungere sia Dulwich che HgGit in library.zip che viene installato insieme a hg.exe, ma per me il modo migliore è installare tutto dal sorgente incluso Mercurial ed eseguire comandi usando i file .bat installati in \ Python \ Scripts. In questo caso è necessario:

  1. Install Mercurial dalla sorgente. Questo crea una versione "pura", perché gli utenti Windows di solito non hanno Visual Studio o compilatore alternativo per la compilazione degli speedup di C.
  2. Installare Dulwich - Vorrei utilizzare l'ultima linea snapshot per Git e Dulwich.

    python setup.py install --pure

  3. installare l'ultima HgGit snapshot

    python setup.py installare

  4. Modifica Mercurial.ini per abilitare hggit =

  5. lancio Mercurial utilizzando le \ Python \ Scripts \ hg.bat
+0

Cosa c'è di sbagliato con aggiungendo Dulwich e HgGit in 'library.zip'? Sembra una soluzione migliore per me. –

+2

@Piotr: Niente di sbagliato tranne che 'library.zip' non è sempre un archivio ordinario. Quindi avrai bisogno di uno script come questo - http://techtonik.rainforce.org/2010/01/repacking-libraryzip-from-py2exe.html –

0

Fino a quando non si ottiene import dulwich per funzionare, hggit non funzionerà. Verificare che il file uovo dulwich sia nel file easy-install.pth sotto site-packages.

Per ulteriori debugging si può provare a chiedere pkg_resources su di esso:

import pkg_resources 
pkg_resources.require("dulwich") 
+0

Questa riga si trova nel mio file easy-install.pth: /c/Python25/lib/site-packages/dulwich-0.5.0-py2.5.egg –

+0

Ho eseguito il comando pkg_resources e metti i risultati nella domanda sopra. Ora cosa? –

+0

Posso riprodurre il risultato esatto installando facilmente dulwich e rimuovendolo da easy-install.p.Hai modificato manualmente il percorso in easy-install - il/c/Python25 sembra sbagliato - lo sostituirei con un dulwich-0.5.0-py2.5.egg dritto o, meglio ancora, rimuovere la linea e riattivare easy_install dulwich –

4

Prova seguente configurazione (cambio al percorso), che lavora per me:

[extensions] 
; hg-git extention 
hgext.bookmarks = 
hggit = C:\Python26\Lib\site-packages\hg_git-0.2.1-py2.6.egg\hggit 

Nel mio caso quando ho valore vuoto per hggit =, ottengo lo stesso errore che si ha in questo caso. Ma io posso import dulwich senza problemi nella shell python, quindi dovresti controllare il tuo easy-install.pth (come indicato da David) se contiene dulwich-0.5.0-py2.5.egg. Ho installato anche la versione pura di dulwich.

+0

Devo estrarre l'uovo affinché funzioni? Nella mia directory dei pacchetti del sito, ho il file .egg, ma non ho una directory denominata hg_git-0.2.1-py2.6.egg. Stai facendo riferimento a hggit all'interno del file dell'uovo non espanso? –

+0

Non ho il file uovo e, se ricordo male, il file .egg non funzionava correttamente sul mio computer. Poi ho installato il parametro '-Z' di' easy_install' per estrarlo durante l'installazione. Lo stesso vale per 'dulwich'. Spero che ti aiuti. – van

+0

Questo ha funzionato per me con Tortoise 1.0.3 Hg 1.5.3 installato. Assicurati di usare -Z quando installi con facilità hg-git e correggi il percorso di hggit in alto a qualsiasi versione finisca per scaricare – BlackICE

8

Se è possibile installare TortoiseHg, include dulwich e altri requisiti.

+0

Yup, TortoiseHG è ottimo per Windows ... – Nikhil

+0

Ho TortoiseHg 1.0.3 e ho ancora ricevuto questo errore. – BlackICE

+1

@David hai installato altro eseguibile Mercurial? Assicurati che il comando "hg" punti l'eseguibile Mercurial di TortoiseHg. oppure prova TortoiseHg 1.0.4. – kuy

0

ho incontrato anche questo problema con dulwich.errors. Invece di installare tutto da zero. Ho appena copiato dulwich dai miei pacchetti di sito predefiniti ai pacchetti del sito mercuriale. ha lavorato senza problemi.

+1

Funzionerà, ma significa che non compilerai le estensioni C. Dulwich (e quindi hg-git) userà l'implementazione Python pura e quindi sarà (significativamente) più lento. – jelmer

10

ho trovato una soluzione più semplice a http://candidcode.com/2010/01/12/a-guide-to-converting-from-mercurial-hg-to-git-on-a-windows-client/

E poi ho trovato una soluzione ancora più semplice me stesso:

di utilizzare l'estensione Mercurial hg-git su Windows:

  1. installare il Mercurial ufficiale binari
  2. inserisci cartella dulwich da fonti di dulwich e cartella hggit da origini hg-git alla radice di library.zip nella cartella di installazione di Mercurial
  3. aggiungere quanto segue a% USERPROFILE% \ Mercurial.ini:

[extensions] 
hgext.bookmarks= 
hggit= 

per avere il supporto SSH è necessario plink.exe dalla famiglia PuTTY. Dopo di che si dovrebbe aggiungere quanto segue al Mercurial.ini:

[ui] 
username = John Doe <[email protected]> 
ssh=d:/home/lib/dll/plink.exe -i "d:/home2/ssh-private-key.ppk" 

Quando ci si connette a un server SSH per la prima volta, si dovrebbe iniziare putty.exe e provare a connettersi ad usarlo. Aggiungerà l'impronta digitale della chiave del server al registro. Altrimenti, plink ti chiederà di accettare l'impronta digitale ma non accetta alcun input.

È possibile utilizzare puttygen.exe per generare chiavi private. Utilizzare le chiavi senza passphrase o utilizzare l'agente di autenticazione ssh di Pageant.exe.

+0

Sono senza tracce di Python, quindi tutti gli altri metodi che ho visto sono totalmente falliti o non tentati. Questo è stato risolto, nessun problema. Grazie! –

+0

Impressionante, ha funzionato ... così facile – Alex

-2

sudo apt-get install python-dev # Dam you dependency!

sudo easy_install Dulwich

successo!

+0

'apt-get' non è un comando che (normalmente) esiste su Windows ... – anarchivist

0

Sulla base techtonik di explanation della ragione per l'importazione mancanza di dulwich.errors, ho trovato una soluzione che sembra più semplice per me rispetto a quelli già proposti:

Sul Mercurial download page ci viene offerto

Mercurial <x.y.z> per Python 2.7 su Windows x86 (fonte installare)

e

Mercurial <x.y.z> per Python 2.7 su Windows x64 (fonte installare)

come.File EXE che installano Mercurial come modulo Python in un'installazione Python 2.7 (x86 o x64) esistente.

Se hg-git e dulwich sono stati installati anche su questa installazione Python, gli errori di importazione dovrebbero scomparire.

Se non siete sicuri di cosa fare adesso, spero che questa spiegazione passo-passo aiuta:

Prerequisiti

  • Python 2.7 è installato
  • <python 2.7 install dir> e <python 2.7 install dir>\Scripts sono in PATH variabile ambientale
  • hg-git (e dulwich) sono stati installati in questa installazione Python tramite le istruzioni da here

Passi

  1. Disinstalla qualsiasi installazione Mercurial esistente
  2. Scaricare e installare uno dei file EXE sopra citate, a seconda che la 2.7 installazione di Python è 32bit o 64bit (Se si ottiene un "Python 2.7 non può essere trovato nel Registro di sistema "errore, probabilmente è necessario l'altro.)

Ora hg clone <some git repo> dovrebbe funzionare sulla console.

0

Ho ricevuto questo errore anche dopo aver scaricato l'ultimo Tortoisehg e assicurarmi che il plugin hggit fosse installato così come i miei file .ini & hgrc aveva la voce giusta per abilitare hggit.

Il mio problema era che avevo sia mercurio che tartaruga sul mio cammino. Così, quando ho eseguito i comandi hg, utilizzava hg.exe nella cartella mercurial rispetto a hg.exe nella directory torsoisehg.

Questo ha senso, ma la mia installazione mercuriale non aveva i plug-in. La mia soluzione era quella di rimuovere mercurial dal mio percorso in modo che i comandi hg passino attraverso la directory tortoisehg dato che ha hg completamente raggruppato. Nota comunque, l'opzione consigliata potrebbe essere quella di aggiornare mercurmente ad una versione che ha i plugin di cui uno ha bisogno ma questo è quello che ha funzionato per me. Ho provato a sostituire il file library.zip in mercurial con quello in tartaruga e questo ha funzionato, ma ha portato ad altri errori come si potrebbe immaginare.

La risposta di @ techtonik mi ha condotto lungo questa strada di cui sono grato.

Riepilogo: verificare quale hg exe sta eseguendo i comandi hg controllando il percorso in quanto hg.exe non trova i plug-in per qualsiasi motivo.

Problemi correlati