I've tried to create an exe file using py2exe. I've recently updated Python from 2.7.7 to 2.7.10 to be able to work with requests
- proxies
.
Before the update everything worked fine but now, the exe file recently created, raising this error:
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
It could be probably repaired by changing options
in setup.py file but I can't figure out what I have to write there. I've tried options = {'py2exe': {'packages': ['requests','urllib2']}})
but with no success.
It works as a Python script but not as an exe.
Do anybody knows what to do?
EDIT:
I've tried to put into setup.py
file this import: from _ssl import RAND_egd
and it says that it can't be imported.
EDIT2: Setup.py:
from distutils.core import setup
import py2exe
# from _ssl import RAND_egd
setup(
console=['puoka_2.py'],
options = {'py2exe': {'packages': ['requests']}})
I have changed the python version from 2.7.12 to 2.7.9 and problem gone.
It will replace the python files but leave you packages as it is.
Good Luck.
According to Google, it seems to be a very rare Error. I don't know exactly what is wrong but I found a workaround for that so if somebody experiences this problem, maybe this answer helps.
Go to
socket.py
file and search forRAND_egd
. There is a block of code (67th line in my case):Everything what you have to do is to comment the 5 lines:
I don't know why it raises the
ImportError
because there is atry - except
block withpass
so the error should not being raised but it helped me to successfully run theexe
file.EDIT: WARNING: I don't know whether it could cause some problems. I experienced no problems yet.
In my case problem was in two installations of Python27: x86 and x64. Only x86 version was in %PATH%, but pip installation script was using files from x64 installation for some reason. Solution was: remove x64, cause I don't really need it.
I found a way to solve it. This might be caused by old version of socket.pyc.
My solutions is edit socket.py, add a space to anywhere and delete then. And then run your setup.py again which will generate new socket.pyc.
Now the problem is solved.
I just remove socket.pyc under c:\Python27\lib, and run py2exe again. The error gone.
Experienced the same problem.
Solved the problem by removing directories 'dist' and 'build' created by py2exe when it was run on previous version of Python.
Seems like py2exe doesn't rebuild all the files every time. And obviously doesn't catch the fact of Python version changing.
Finally you have a mix of files generated with different versions of Python in your 'dist' directory.
My setup.py is pretty simple: