我尝试使用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']}})
答案 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文件,但保留包原样。
祝你好运。