2011-03-12 2 views
4

Установлен последний 64-разрядный Python 2.5. Я бегу скорлупу и попытаться import socket и получить:64-битный python 2.5/2.6 + windows 7 «импорт сокета» Ошибка загрузки DLL

>>> import socket 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "c:\python25\lib\socket.py", line 45, in <module> 
    import _socket 
ImportError: DLL load failed with error code 193 

я попробовать то же самое с 64-битным Python 2.6.6, и получите:

>>> import socket 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "c:\python26-64\lib\socket.py", line 46, in <module> 
    import _socket 
ImportError: DLL load failed: %1 is not a valid Win32 application. 

чем дело? (Я дважды проверял, да, ОС 64-бит).

UPDATE: У меня также есть 32-разрядный питон, установленный на этом компьютере. Если это конфликт, как я могу установить обе версии python и заставить их вести себя красиво?

ответ

8

Эти две ошибки являются одной и той же ошибкой, код 193, сообщается двумя разными способами. Это вызвано тем, что ваш 64-разрядный Python пытается загрузить 32-битную DLL.

Трудно точно сказать, почему это произошло. Возможно, вы по ошибке установили 32-битные модули Python. Возможно, в путях есть путаница.

Однако часто самый простой способ обойти эту проблему - переключиться на 32-битный Python, который безупречно работает на 64-битной Windows. Побочным преимуществом является то, что вы иногда захотите использовать модули, доступные только в 32-битной форме. Поддержка 64-битного модуля все еще немного неоднородна.

+0

У меня установлен 32-разрядный питон. Проблема заключается в том, что я использую virtualboxapi, который использует COM, который требует, чтобы python имел такую ​​же битту, как виртуальный бокс, который является 64-битным = (иначе я бы все, только для 32-разрядных. – Claudiu

+0

Хм. Очевидно, что импорт _socket приводит к попытке загрузить 32-битную DLL. Было бы неплохо, если сообщение об ошибке сообщило вам, какой из них:% 1 не очень полезен. я бы не стал пытаться отключить переменную среды PATH на barebones. Возможно, что-то из вашего PATH вызывает проблемы. Сделайте это в командной строке, а затем запустите Python, чтобы ваш эксперимент был локальным в этом окне консоли! –

+1

oh проблема заключалась в том, что я был замедлен, то есть в директории, в которой я запускал скрипт, у меня была левая вещь py2exe, которая, как я полагаю, имела в ней 32-разрядные DLL. спасибо за помощь! – Claudiu

0

У меня это случилось со мной, когда я использовал py2exe для сборки (32-битного) двоичного файла, а затем запустил 64-битный интерпретатор в том же каталоге. По-видимому (и разумно) он выберет локальный экземпляр модуля сокета (который затем загружает 32-разрядную dll) через модуль сокета интерпретатора (который правильно загружает 64-разрядную dll).

Смежные вопросы