ImportError: Ошибка загрузки DLL: %1 не является допустимым приложением Win32. Только за пределами каталога Python27.

У меня есть странный вариант распространенной ошибки "ImportError: Ошибка загрузки DLL: %1 не является допустимым приложением Win32". Я эта ошибка появляется только при попытке импортировать стороннюю библиотеку во время запуска скрипта python за пределами каталога python27. Например, если я делаю «import numpy», находясь внутри python27, он работает нормально, но если я пытаюсь импортировать numpy, находясь в любом другом каталоге, я получаю указанную выше ошибку. По сути, я могу запускать «python» в любом каталоге, но могу импортировать сторонние библиотеки только в том случае, если запускаю его из каталога python27. Если у кого-то есть какие-либо идеи относительно того, почему это может быть, я был бы очень признателен. Вот некоторая информация о моих системных путях.

Применимые системные пути Windows:

ПУТЬ_ПИТОН = C:\Python27\Lib

ПИТОНДОМА = C:\Python27

sys.path равен:

['', 'C:\Python27\Lib', 'C:\WINDOWS\SYSTEM32\python27.zip', 'C:\Python27\DLLs', 'C:\Python27\lib\plat-win', 'C :\Python27\lib\libtk', 'C:\Python27', 'C:\Python27\lib\site-packages', ' C:\Python27\lib\site-packages\win32', 'C:\Python27\ lib\site-packages\win32\lib', 'C:\Python27\lib\site-packages\Pythonwin']

И если я запускаю win_add2path.py, я получаю: Путь не добавлен

PATH теперь: C:\Users\Mike\AppData\Local\Enthought\Canopy\User;C:\Users\Mike\AppData\Local\Enthought\Canopy\User\Scripts;C:\Python27;C:\Python27\ Скрипты

Расширенный: C:\Users\Mike\AppData\Local\Enthought\Canopy\User;C:\Users\Mike\AppData\Local\Enthought\Canopy\User\Scripts;C:\Python27;C:\Python27\Scripts

Часть меня чувствует, что путь Enthought Canopy все портит (этого каталога больше не существует), но путь Python27 также существует, так что это не должно быть проблемой...

EDIT: кажется, теперь я знаю, в чем причина проблемы, но не знаю, как ее исправить. Так что, очевидно, в папке enthought canopy был python.exe, и это тот, который использовал мой компьютер, а не тот, что в python27 (что странно, потому что я удалил enthought canopy). Однако теперь мой компьютер не может найти python.exe в python27, даже несмотря на то, что этот каталог добавлен в мой системный путь... Это дает мне старую «питон не распознан как внутренняя или внешняя команда» shindig.

Редактировать Что ж, я перезапустил командную строку, и теперь она работает... Я думаю, что удаление переменной enthought canopy path еще не повлияло.


person Msquared    schedule 11.06.2015    source источник
comment
Попробуйте выполнить свой скрипт, установив что-то вроде текущего рабочего каталога. Посмотрите, сможете ли вы это сделать. или, может быть, вы можете включить свои пути перед оператором импорта. потом надо работать   -  person coder3521    schedule 11.06.2015
comment
Что ж, я нашел это, что указывает на то, что я могу сделать это stackoverflow.com/questions/4383571/ Но дело в том, какой путь я бы вообще добавил? Путь для пакетов сайта уже находится в sys.path, где находится модуль. Это должно быть найдено так, как пути прямо сейчас.   -  person Msquared    schedule 11.06.2015


Ответы (2)


Модули Python представляют собой либо простые скрипты Python (здесь я их проигнорирую), либо библиотеки DLL, даже если их имя файла не указывает на то, что это так. Что вы можете сделать, так это запустить dependencywalker для такого модуля, чтобы узнать, от каких других DLL он зависит. Если соответствующая DLL находится не в обычных местах системы, MS Windows будет искать ее в текущем рабочем каталоге, что объясняет различия, с которыми вы сталкиваетесь. Для получения дополнительной информации см. документацию по функции win32 LoadLibrary() и связанные функции для получения информации о том, как разрешаются пути DLL, которые также сообщают вам параметры, которые вы можете настроить, чтобы помочь системе найти зависимые библиотеки DLL.

person Ulrich Eckhardt    schedule 11.06.2015

Итак, для справки, источником проблемы были остатки старой установки Enthought Canopy. Компьютер использовал эту установку python (на которой не были установлены сторонние библиотеки) вместо той, что была в Python27. Я удалил эту установку из системного пути и перезапустил командную строку, и теперь все в порядке.

person Msquared    schedule 11.06.2015