7

奇妙なimportエラーが原因で、Mercurial拡張機能をインストールできません。

mercurial_keyringプロジェクトでmercurialを使用するたびにユーザー名とパスワードを入力する必要がないように、拡張機能を実行しようとしています。

Python2.7.1を使用しています。https://www.mercurial-scm.org/で提供されているバイナリを使用してMercurialをインストールしました。

インストールkeyringmercurial_keyringましたpip

私は最初にこれをに追加することによって拡張機能を追加しようとしました~/.hgrc

[extensions]
...
mercurial_keyring = 

ここのインストール手順に示されているように。ただし、次のエラーが発生しました。

*** failed to import extension mercurial_keyring: No module named mercurial_keyring

同じインストール手順から、mercurialをmercurial_keyring.pyファイルに直接ポイントしてみましたが、うまくいきました。

[extensions]
...
hgext.mercurial_keyring = /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mercurial_keyring.py

そして、物事は進んでいるように見えました。

ただし、パスワードを必要とするMercurialコマンドを実行して、(たとえば)によって保存されるようにしようとすると、keyringエラー 発生します。hg pullhg push

abort: No module named keyring!

最も紛らわしい部分は、明確なものがあるということです

import keyring

その28行目mercurial_keyring.pyは問題なく解決されています。実際、import keyringクラスやメソッドの外部では成功し、内部では失敗します。

念のため、このエラーは、次のことを試みたときにメソッドmercurial_keyring.pyPasswordStoreクラスで発生することを説明します。get_http_password

return keyring.get_password(...)

何かご意見は?

私は明らかな何かが欠けていると感じていますが、私はこれを理解するためにかなりの時間を費やしてきました、そしてグーグルは今のところ特に役に立ちませんでした。どんな入力でも大歓迎です。

4

6 に答える 6

9

ほとんどhgの場合、インストールした2.7のコピーではなく、システムpython(2.6)を使用して実行しています。

2.6未満でインストールmercurial_keyringしてみて、期待どおりに機能するかどうかを確認してください。keyring

于 2011-03-03T01:24:30.110 に答える
1

Mercurialは、モジュールのインポートを最初に使用されるまで延期する「demandimport」と呼ばれる機能を使用します。だから、あなたの

キーリングをインポートする

その行で失敗することはありませんが、最初に使用された場合にのみ泣きます(つまり)

keyring.get_password(...)を返します

于 2011-03-04T05:15:37.897 に答える
1

同じ問題が発生し、簡単にインストールできる拡張機能をインストールすることで解決しました:sudo easy_install mercurial_keyring

これにより、mercurialが使用するのと同じPythonでインストールされます。

于 2013-01-03T11:14:43.250 に答える
1

@ncoghlanの答えは正しいですが(とにかく私にとっては)、不完全であり、コメントするのに十分な担当者ポイントがありません。(ジェレミーS、これはあなたの質問に答えると思います。)

Pythonの特定のバージョン用にインストールするには、次の変更を使用します。

easy_install keyring

使用する

easy_install-2.6 keyring

easy_installまたは他のPythonコマンドのいずれにも同じことが当てはまります。ここでpipの例からこれを見つけました:モジュールをインストールするには、の特定のバージョンにpipを使用しますか?

于 2015-09-16T17:18:03.657 に答える
0

importメソッド内のsは呼び出されたときに評価されますが、トップレベルのインポートはすぐに評価されます。インポートの動作は変更できます。impモジュールとsiteモジュール、およびsys.pathを確認してください。おそらく起こっていることは、ファイルの最後にあるコード(比喩的には、初期化などの関数呼び出しである可能性があります)が誤ってインポート動作を変更したり、不注意による遅延を防止して通知したりすることです。import

于 2011-03-02T23:00:05.267 に答える
0

私の問題は、をMercurial介してインストールしたことでしmacportsたが、拡張機能はを介してインストールしましたpip。それを解決するために、私も経由で拡張機能をインストールする必要がmacportsありました。

sudo port install py-keyring py-mercurial_keyring
于 2015-07-25T16:51:19.500 に答える