[issue17213] ctypes loads wrong version of C runtime, leading to error message box from system
Igor Skochinsky
report at bugs.python.org
Tue Aug 6 18:13:42 CEST 2013
Igor Skochinsky added the comment:
Just had this issue when using networkx (which imports uuid). One keyword that would help visibility is R6034 (the runtime error number). A couple of reports related to this:
https://projects.blender.org/tracker/index.php?func=detail&aid=27666
http://forums.boxee.tv/showthread.php?t=15425
The proper solution is to fix ctypes, but in the meantime we can at least fix uuid. The error seems to be triggered by this snippet:
# The uuid_generate_* routines are provided by libuuid on at least
# Linux and FreeBSD, and provided by libc on Mac OS X.
for libname in ['uuid', 'c']:
try:
lib = ctypes.CDLL(ctypes.util.find_library(libname))
except:
continue
if hasattr(lib, 'uuid_generate_random'):
_uuid_generate_random = lib.uuid_generate_random
if hasattr(lib, 'uuid_generate_time'):
_uuid_generate_time = lib.uuid_generate_time
Since this code is useless on Windows, protecting it in "if os.name not in ['nt', 'ce']" does the trick.
BTW, instead of going all way with activation context etc., a simpler solution would be to add to ctypes something like this in CDLL.__init__:
if os.name in ['nt', 'ce'] and name == util.find_msvcrt(): # TODO: handle the extension
self._handle = windll.kernel32.GetModuleHandleA(self._name)
i.e. use the already present runtime DLL instead of trying to load it again.
----------
nosy: +Igor.Skochinsky
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue17213>
_______________________________________
More information about the Python-bugs-list
mailing list