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']}})
グーグルによると、それは非常にまれなエラーのようです。何が悪いのか正確にはわかりませんが、そのために回避策を見つけたので、誰かがこの問題を経験した場合、おそらくこの答えが役立つでしょう。
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
ファイル。
編集:警告:それがいくつかの問題を引き起こす可能性があるかどうかはわかりません。まだ問題はありません。
同じ問題が発生しました。
以前のバージョンのPythonで実行されたときにpy2exeによって作成されたディレクトリ「dist」と「build」を削除することで問題を解決しました。
Py2exeが毎回すべてのファイルを再構築するわけではないようです。そして明らかにPythonバージョン変更の事実をキャッチしていません。
最後に、 'dist'ディレクトリに異なるバージョンのPythonで生成されたファイルが混在しています。
私のsetup.pyはとてもシンプルです:
distutils.coreからインポートセットアップインポートpy2exe
setup(console = ['xxxxxx.py'])
私の場合、問題はPython27の2つのインストール(x86とx64)にありました。 x86バージョンのみが%PATH%に含まれていましたが、pipインストールスクリプトは何らかの理由でx64インストールのファイルを使用していました。解決策は次のとおりです。x64を削除します。本当に必要ないからです。
私はそれを解決する方法を見つけました。これは、古いバージョンのsocket.pycが原因である可能性があります。
私の解決策は、socket.pyを編集し、任意の場所にスペースを追加してから削除することです。次に、setup.pyを再度実行すると、新しいsocket.pycが生成されます。
これで問題は解決しました。
C:\ Python27\libの下にあるsocket.pycを削除して、py2exeを再度実行します。エラーはなくなりました。
pythonバージョンを2.7.12から2.7.9に変更し、問題は解決しました。
pythonファイルを置き換えますが、パッケージはそのままにします。
幸運を。