Windows(具体的にはWindows 7 64ビット)でhg-gitMercurial拡張機能を使用しようとしています。 MercurialとGitをインストールしています。 Python 2.5(32ビット)がインストールされています。
http://hg-git.github.com/ の指示に従って拡張機能をインストールしました。 Visual Studio 2003なしではdulwichをコンパイルできなかったため、最初のeasy_installは失敗しました。
私はdulwichを手動でインストールしました:
これで、easy_install hg-gitを実行すると、成功します(dulwichの依存関係が満たされているため)。
私のC:\ Users\username\Mercurial.iniには、次のものがあります。
_[extensions]
hgext.bookmarks =
hggit =
_
コマンドプロンプトで「hg」と入力すると、「***拡張機能hggitのインポートに失敗しました:hggitという名前のモジュールがありません」と表示されます。
私のc:\ Python25フォルダーの下を見ると、hggitへの唯一の参照は_Lib\site-packages\hg_git-0.2.1-py2.5.Egg
_です。これはどこかで抽出されることになっていますか、それともそのまま動作する必要がありますか?
それが失敗したので、私はgit://github.com/schacon/hg-git.gitのクローンを作成し、Mercurial構成でパスを参照することを提案するhg-gitページからの「より複雑な」指示を試みました。リポジトリのクローンを作成し、拡張ファイルを次のように変更しました。
_[extensions]
hgext.bookmarks =
hggit = c:\code\hg-git\hggit
_
Hgを実行すると、次のように表示されます。***拡張機能hggitをc:\ code\hg-git\hggitからインポートできませんでした:dulwich.errorsという名前のモジュールがありません。
わかりました。hg-git\ hggit\git_handler.pyで呼び出すことができるので、hggitが検出されていることがわかります。
_from dulwich.errors import HangupException
_
それは私にdulwichが正しくインストールされていないか、パスにないように思わせます。
更新:
From Pythonコマンドライン:
_import dulwich
_
_Import Error: No module named dulwich
_を生成します
ただし、C:\ Python25\Lib\site-packagesの下に、データが入力されているように見えるdulwich-0.5.0-py2.5.Eggフォルダーがあります。これは、上記の手順で作成されました。 Python "path"の一部にするために必要な追加の手順はありますか?
From Pythonコマンドライン(回答の1つで提案されているように):
_import pkg_resources
pkg_resources.require('dulwich')
_
[dulwich 0.5.0 (c:\python25\lib\site-packages\dulwich-0.5.0-py2.5.Egg)]
を生成します
それで、それは私に何を伝えますか? dulwichのインポートは失敗しますが、どうやらpkg_resourcesはそれを見つけることができます。その情報で何ができますか?
それは私にdulwichが正しくインストールされていないか、パスにないように思わせます。
あなたは絶対に正しいです。 Windows用のMercurialバイナリディストリビューションは「凍結」されています-それらはPythonコードとインタープリターがバンドルされているため、システムPYTHONPATHにインストールされているパッケージとは無関係です。Mercurial.iniでhggit拡張機能へのパスを指定する場合、hgはダイレクトパスを使用してインポートしようとしますが、dulwichライブラリはhgによって明示的にインポートされず、そのライブラリにバンドルされていないため、インポートは失敗します。
DulwichとHgGitの両方をhg.exeと一緒にインストールされるlibrary.Zipに追加することは可能ですが、私にとって最善の方法は、Mercurialを含むソースからすべてをインストールし、\ Python\Scriptsにインストールされた.batファイルを使用してコマンドを実行することです。この場合、次のことを行う必要があります。
Dulwichをインストールします-最新のトランクを使用します snapshot GitとDulwichの両方に。
python setup.py --pure install
最新のHgGitをインストールする スナップショット
python setup.py install
Mercurial.iniを編集してhggit =
を有効にします
そして、私はさらに簡単な解決策を自分で見つけました:
Windowsでhg-gitMercurial拡張機能を使用するには:
[extensions]
hgext.bookmarks=
hggit=
SSHをサポートするには、PuTTYファミリーのplink.exeが必要です。その後、Mercurial.iniに以下を追加する必要があります。
[ui]
username = John Doe <[email protected]>
ssh=d:/home/lib/dll/plink.exe -i "d:/home2/ssh-private-key.ppk"
SSHサーバーに初めて接続するときは、PuTTY.exeを起動し、それを使用して接続してみてください。サーバーキーのフィンガープリントをレジストリに追加します。それ以外の場合、plinkは指紋を受け入れるように要求しますが、入力を受け入れません。
Puttygen.exeを使用して秘密鍵を生成できます。パスフレーズなしでキーを使用するか、Pageant.exessh認証エージェントを使用してください。
TortoiseHgをインストールできる場合は、dulwichやその他の要件が含まれています。
次の構成(パスを変更)を試してください。これは私にとってはうまくいきます。
[extensions]
; hg-git extention
hgext.bookmarks =
hggit = C:\Python26\Lib\site-packages\hg_git-0.2.1-py2.6.Egg\hggit
私の場合、hggit =
の値が空の場合、この場合と同じエラーが発生します。しかし、私はpythonシェルで問題なくimport dulwich
できるので、easy-install.pth
が含まれているかどうか(Davidが指摘したように)dulwich-0.5.0-py2.5.Egg
をチェックする必要があります。 dulwich
の純粋なバージョンもインストールしました。
私もdulwich.errorsでこの問題に遭遇しました。すべてを最初からインストールする代わりに。デフォルトのsite-packagesからMercurialsite-packagesにdulwichをコピーしました。問題なく動作しました。
dulwich.errors
のインポートに失敗した理由のtechtonikの 説明 に基づいて、すでに提案されているものよりも簡単に見える解決策を見つけました。
Mercurialダウンロードページ 提供されています
Mercurial
<x.y.z>
for Python 2.7 on Windows x86(ソースインストール)
そして
Mercurial
<x.y.z>
for Python 2.7 on Windows x64(ソースインストール)
MercurialをPythonモジュールとして既存のPython 2.7(x86またはx64)インストールにインストールする.EXEファイルとして。
Hg-gitとdulwichがこのPythonインストールにもインストールされている場合、インポートエラーは消えるはずです。
今何をすべきかわからない場合は、このステップバイステップの説明がお役に立てば幸いです。
<python 2.7 install dir>
と<python 2.7 install dir>\Scripts
はPATH
環境変数にありますこれで、hg clone <some git repo>
がコンソールで機能するはずです。
import dulwich
が機能するようになるまで、hggit
は機能しません。 dulwich
Eggファイルがeasy-install.pth
の下のsite-packages
ファイルにあることを確認します。
さらにデバッグするには、pkg_resources
に質問してみてください。
import pkg_resources
pkg_resources.require("dulwich")
最新のTortoisehgをダウンロードし、hggitプラグインがインストールされていることと、.iniおよびhgrcファイルにhggitを有効にするための正しいエントリがあることを確認した後でも、このエラーが発生しました。
私の問題は、Mercurialとtortoisehgの両方が私の道にあったことでした。そのため、hgコマンドを実行すると、torsoisehgディレクトリのhg.exeではなく、Mercurialフォルダーのhg.exeが使用されていました。
これは理にかなっていますが、私のMercurialインストールにはプラグインがありませんでした。私の修正は、パスからMercurialを削除して、hgが完全にバンドルされているためhgコマンドがtortoisehgディレクトリを通過するようにすることでした。ただし、推奨されるオプションは、mercurualを必要なプラグインを備えたバージョンにアップグレードすることですが、これが私にとってはうまくいきました。 Mercurialのlibrary.Zipをtortoisehgのものに置き換えてみましたが、これは機能しましたが、想像どおりに他のエラーが発生しました。
@techtonikの答えは、私をこの道へと導いてくれたことに感謝しています。
要約:hg.exeは何らかの理由でプラグインを検出しないため、パスを確認して、どのhgexeがhgコマンドを実行しているかを確認します。