web-dev-qa-db-ja.com

ImportError:名前Rand_egdをインポートできません

Py2exeを使用してexeファイルを作成しようとしました。最近、Python 2.7.7から2.7.10に更新してrequests --proxiesを操作できるようにしました。

アップデート前はすべて正常に動作していましたが、最近作成されたexeファイルにより、次のエラーが発生します。

    Traceback (most recent call last):
  File "puoka_2.py", line 1, in <module>
    import mLib
  File "mLib.pyc", line 4, in <module>
  File "urllib2.pyc", line 94, in <module
  File "httplib.pyc", line 71, in <module
  File "socket.pyc", line 68, in <module>
ImportError: cannot import name Rand_egd

Setup.pyファイルのoptionsを変更することで修復できる可能性がありますが、そこに何を書き込む必要があるのか​​わかりません。 options = {'py2exe': {'packages': ['requests','urllib2']}})を試しましたが、成功しませんでした。

Pythonスクリプトとして機能しますが、exeとしては機能しません。

誰かが何をすべきか知っていますか?

編集:

このインポートをsetup.pyファイルに入れようとしました:from _ssl import Rand_egdと表示されますが、インポートできません。

EDIT2:Setup.py:

from distutils.core import setup
import py2exe
# from _ssl import Rand_egd
setup(
  console=['puoka_2.py'],
  options = {'py2exe': {'packages': ['requests']}})
14
Milano

グーグルによると、それは非常にまれなエラーのようです。何が悪いのか正確にはわかりませんが、そのために回避策を見つけたので、誰かがこの問題を経験した場合、おそらくこの答えが役立つでしょう。

socket.pyファイルに移動し、Rand_egdを検索します。コードのブロックがあります(私の場合は67行目):

from _ssl import SSLError as sslerror
from _ssl import \
     Rand_add, \
     Rand_status, \
     SSL_ERROR_ZERO_RETURN, \
     SSL_ERROR_WANT_READ, \
     SSL_ERROR_WANT_WRITE, \
     SSL_ERROR_WANT_X509_LOOKUP, \
     SSL_ERROR_SYSCALL, \
     SSL_ERROR_SSL, \
     SSL_ERROR_WANT_CONNECT, \
     SSL_ERROR_EOF, \
     SSL_ERROR_INVALID_ERROR_CODE
try:
    from _ssl import Rand_egd
except ImportError:
    # LibreSSL does not provide Rand_egd
    pass

あなたがしなければならないことはすべて、5行にコメントすることです:

  #try:
        #from _ssl import Rand_egd
  #except ImportError:
        ## LibreSSL does not provide Rand_egd
        #pass

ImportErrorを含むtry - exceptブロックがあるため、なぜpassが発生するのかわかりません。エラーは発生しないはずですが、exeファイル。

編集:警告:それがいくつかの問題を引き起こす可能性があるかどうかはわかりません。まだ問題はありません。

15
Milano

同じ問題が発生しました。

以前のバージョンのPythonで実行されたときにpy2exeによって作成されたディレクトリ「dist」と「build」を削除することで問題を解決しました。

Py2exeが毎回すべてのファイルを再構築するわけではないようです。そして明らかにPythonバージョン変更の事実をキャッチしていません。

最後に、 'dist'ディレクトリに異なるバージョンのPythonで生成されたファイルが混在しています。

私のsetup.pyはとてもシンプルです:

distutils.coreからインポートセットアップインポートpy2exe

setup(console = ['xxxxxx.py'])

3
eldarko

私の場合、問題はPython27の2つのインストール(x86とx64)にありました。 x86バージョンのみが%PATH%に含まれていましたが、pipインストールスクリプトは何らかの理由でx64インストールのファイルを使用していました。解決策は次のとおりです。x64を削除します。本当に必要ないからです。

1
VorobeY1326

私はそれを解決する方法を見つけました。これは、古いバージョンのsocket.pycが原因である可能性があります。

私の解決策は、socket.pyを編集し、任意の場所にスペースを追加してから削除することです。次に、setup.pyを再度実行すると、新しいsocket.pycが生成されます。

これで問題は解決しました。

0
Steve Guo

C:\ Python27\libの下にあるsocket.pycを削除して、py2exeを再度実行します。エラーはなくなりました。

0
buaa.byl

pythonバージョンを2.7.12から2.7.9に変更し、問題は解決しました。

pythonファイルを置き換えますが、パッケージはそのままにします。

幸運を。

0
Abdul Majeed