ImportError:无法导入名称RAND_egd

时间:2015-08-01 13:28:25

标签: python ssl import executable py2exe

我尝试使用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']}})

5 个答案:

答案 0 :(得分:14)

根据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个文件。

编辑:警告:我不知道它是否会引起一些问题。我没有遇到任何问题。

答案 1 :(得分:1)

在我的情况下,问题出现在Python27的两个安装中:x86和x64。只有x86版本在%PATH%中,但是pip安装脚本由于某种原因使用了x64安装的文件。解决方案是:删除x64,因为我真的不需要它。

答案 2 :(得分:0)

我找到了解决问题的方法。这可能是由旧版本的socket.pyc引起的。

我的解决方案是编辑socket.py,向任意位置添加空格然后删除。然后再次运行你的setup.py,这将生成新的socket.pyc。

现在问题解决了。

答案 3 :(得分:0)

我只是删除c:\ Python27 \ lib下的socket.pyc,然后再次运行py2exe。错误消失了。

答案 4 :(得分:0)

我已经将python版本从2.7.12更改为2.7.9并且问题已经消失。

它将替换python文件,但保留包原样。

祝你好运。