ImportError: no se puede importar el nombre RAND_egd

He intentado crear un archivo exe usando py2exe. Recientemente he actualizado Python de 2.7.7 a 2.7.10 para poder trabajar con requestsproxies .

Antes de la actualización, todo funcionaba bien, pero ahora, el archivo exe se creó recientemente, generando este error:

  Traceback (most recent call last): File "puoka_2.py", line 1, in  import mLib File "mLib.pyc", line 4, in  File "urllib2.pyc", line 94, in <module File "httplib.pyc", line 71, in <module File "socket.pyc", line 68, in  ImportError: cannot import name RAND_egd 

Probablemente podría repararse cambiando las options en el archivo setup.py pero no puedo averiguar qué tengo que escribir allí. He intentado options = {'py2exe': {'packages': ['requests','urllib2']}}) pero sin éxito.

Funciona como un script de Python pero no como un exe.

¿Alguien sabe qué hacer?

EDITAR:

He intentado poner en el archivo setup.py esta importación: from _ssl import RAND_egd y dice que no se puede importar.

EDIT2: Setup.py:

 from distutils.core import setup import py2exe # from _ssl import RAND_egd setup( console=['puoka_2.py'], options = {'py2exe': {'packages': ['requests']}}) 

Según Google, parece ser un error muy raro. No sé exactamente qué es lo que está mal, pero encontré una solución para eso, así que si alguien experimenta este problema, tal vez esta respuesta ayude.

Vaya al archivo socket.py y busque RAND_egd . Hay un bloque de código (línea 67 en mi caso):

 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 

Todo lo que tienes que hacer es comentar las 5 líneas:

  #try: #from _ssl import RAND_egd #except ImportError: ## LibreSSL does not provide RAND_egd #pass 

No sé por qué genera ImportError porque hay un try - except bloque con un pass por lo que el error no debería ImportError pero me ayudó a ejecutar con éxito el archivo exe .

EDITAR: ADVERTENCIA: No sé si podría causar algunos problemas. No he experimentado ningún problema todavía.

Experimentado el mismo problema.

Resolvió el problema eliminando los directorios ‘dist’ y ‘build’ creados por py2exe cuando se ejecutaba en la versión anterior de Python.

Parece que py2exe no reconstruye todos los archivos cada vez. Y, obviamente, no se percibe el hecho de que la versión de Python cambia.

Finalmente, tiene una mezcla de archivos generados con diferentes versiones de Python en su directorio ‘dist’.

Mi setup.py es bastante simple:

de distutils.core importar configuración importar py2exe

configuración (consola = [‘xxxxxx.py’])

En mi caso el problema estaba en dos instalaciones de Python27: x86 y x64. Solo la versión x86 estaba en% PATH%, pero el script de instalación de pip estaba usando archivos de la instalación x64 por alguna razón. La solución fue: eliminar x64, porque realmente no lo necesito.

Encontré una manera de resolverlo. Esto puede deberse a una versión anterior de socket.pyc.

Mis soluciones son editar socket.py, agregar un espacio a cualquier lugar y luego eliminar. Y luego ejecute su setup.py nuevamente, lo que generará un nuevo socket.pyc.

Ahora el problema esta resuelto.

Acabo de eliminar socket.pyc en c: \ Python27 \ lib, y ejecuto py2exe de nuevo. El error se ha ido.

He cambiado la versión de python de 2.7.12 a 2.7.9 y el problema desapareció.

Reemplazará los archivos de Python pero le dejará los paquetes como están.

Buena suerte.