ImportError: cannot import name RAND_egd
ImportError: cannot import name 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
并且说不能导入。
编辑 2:Setup.py:
from distutils.core import setup
import py2exe
# from _ssl import RAND_egd
setup(
console=['puoka_2.py'],
options = {'py2exe': {'packages': ['requests']}})
根据Google,这似乎是一个非常罕见的错误。我不知道到底出了什么问题,但我找到了一个 解决方法 ,所以如果有人遇到这个问题,也许这个答案会有所帮助。
转到 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
文件。
编辑:警告:我不知道它是否会导致一些问题。我还没有遇到任何问题。
遇到了同样的问题。
通过删除由 py2exe 创建的目录 'dist' 和 'build' 解决了这个问题,而在以前的 Python 版本中它是 运行。
似乎py2exe 并没有每次都重建所有文件。并且显然没有注意到 Python 版本更改的事实。
最后,您的 'dist' 目录中混合了使用不同版本的 Python 生成的文件。
我的setup.py很简单:
from distutils.core import setup import py2exe
setup(console=['xxxxxx.py'])
我找到了解决方法。这可能是由 socket.pyc.
的旧版本引起的
我的解决方案是编辑 socket.py,在任意位置添加 space 然后删除。然后 运行 你的 setup.py 再次生成新的 socket.pyc.
现在问题已经解决了。
在我的案例中,问题出在 Python27 的两个安装中:x86 和 x64。 %PATH% 中只有 x86 版本,但 pip 安装脚本出于某种原因正在使用 x64 安装中的文件。解决方案是:删除 x64,因为我真的不需要它。
我刚刚删除了 c:\Python27\lib 下的 socket.pyc,然后又删除了 运行 py2exe。错误消失了。
我已将 python 版本从 2.7.12 更改为 2.7.9,问题消失了。
它将替换 python 文件,但让您的包保持原样。
祝你好运。
我尝试使用 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
并且说不能导入。
编辑 2:Setup.py:
from distutils.core import setup
import py2exe
# from _ssl import RAND_egd
setup(
console=['puoka_2.py'],
options = {'py2exe': {'packages': ['requests']}})
根据Google,这似乎是一个非常罕见的错误。我不知道到底出了什么问题,但我找到了一个 解决方法 ,所以如果有人遇到这个问题,也许这个答案会有所帮助。
转到 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
文件。
编辑:警告:我不知道它是否会导致一些问题。我还没有遇到任何问题。
遇到了同样的问题。
通过删除由 py2exe 创建的目录 'dist' 和 'build' 解决了这个问题,而在以前的 Python 版本中它是 运行。
似乎py2exe 并没有每次都重建所有文件。并且显然没有注意到 Python 版本更改的事实。
最后,您的 'dist' 目录中混合了使用不同版本的 Python 生成的文件。
我的setup.py很简单:
from distutils.core import setup import py2exe
setup(console=['xxxxxx.py'])
我找到了解决方法。这可能是由 socket.pyc.
的旧版本引起的我的解决方案是编辑 socket.py,在任意位置添加 space 然后删除。然后 运行 你的 setup.py 再次生成新的 socket.pyc.
现在问题已经解决了。
在我的案例中,问题出在 Python27 的两个安装中:x86 和 x64。 %PATH% 中只有 x86 版本,但 pip 安装脚本出于某种原因正在使用 x64 安装中的文件。解决方案是:删除 x64,因为我真的不需要它。
我刚刚删除了 c:\Python27\lib 下的 socket.pyc,然后又删除了 运行 py2exe。错误消失了。
我已将 python 版本从 2.7.12 更改为 2.7.9,问题消失了。
它将替换 python 文件,但让您的包保持原样。
祝你好运。