2016-03-29 11 views
0

hereの指示に従ってvirtualenv内のpipをアップグレードしようとしています。システムのpythonが電子メールモジュールからMessageという名前をインポートできないため、アップグレードは失敗します。Virtualenvパッケージのアップグレードとインストールに失敗しました:名前をインポートできません。メッセージ

(newsfeed)myhost:newsfeed admin$ pip install --upgrade pip 
Traceback (most recent call last): 
    File "/Users/admin/newsfeed/newsfeed/bin/pip", line 7, in <module> 
    from pip import main 
    File "/Library/Python/2.7/site-packages/pip/__init__.py", line 9, in <module> 
    from pip.log import logger 
    File "/Library/Python/2.7/site-packages/pip/log.py", line 8, in <module> 
    from pip import backwardcompat 
    File "/Library/Python/2.7/site-packages/pip/backwardcompat/__init__.py", line 69, in <module> 
    from email import Message as emailmessage 
ImportError: cannot import name Message 

この問題は、単にピップのアップグレードではなくvirtualenvの中に何もインストールしていないです。新しいパッケージをインストールしようとすると、同じエラーが発生します。

virtualenvの外側のpython端末では、メッセージをインポートすることはできませんが、virtualenvの内部で行うことができます。

また、同じマシン上の別のvirtualenvでは、パッケージのインストールまたはアップグレードでエラーが発生しません。

なぜこのvirtualenvはパッケージをアップグレードまたはインストールできませんか?

+0

パスのどこかに、標準ライブラリの電子メールモジュールをシャドーイングする可能性のあるemail.pyファイルがありますか。あなたが 'python -c '電子メールをインポートするのであれば、printen(電子メール.__ファイル__)' 'virtualenvでは出力は何ですか? – snakecharmerb

+0

ありがとうございます。あなたのコマンドの出力は次の通りです:email/__ init __。pyc – ABM

+1

標準ライブラリの電子メールパッケージであれば、出力のパスは '/ Library/Python/2.7/site-packages'になるはずです。現在のディレクトリまたは__ init __ .pyファイルを含むパス上の他の場所に_email_という名前のフォルダがあるように見えます。名前を変更する/移動し、問題が解決するかどうか確認してください。 – snakecharmerb

答えて

1

標準ライブラリの電子メールパッケージは、パス内の電子メール(.py)という名前のパッケージまたはモジュールによってシャドー(隠されている)です。

python -c 'import email;print(email.__file__)'

し、それを名前変更または削除を呼び出すことによって、パッケージを検索します。

0

あなたのピップはvenv内にないので、おそらくこのようにアップグレードすることはできません。

これは、system-packagesを使用するvenvを作成したことが原因です。 venvを削除し、--no-site-packagesをパラメータとして追加して再作成します。

関連する問題