Вопрос: почему dllwrap выдает эту ошибку в пипсах?
_foo.exp: file not recognized: File format not recognized
Краткий ответ: проверьте свой PATH.MinGW \ bin должен быть ближе к началу.
Длинный ответ: Некоторое время я использовал обходной путь.Я взял команду dllwrap из pip.log и выполнил ее напрямую.Это завершило работу .pyd и позволило установить pip для завершения работы.
Я передал флаг --verbose этим двум различным способам вызова dllwrap.Под пипом это делалось.
dlltool: Opened temporary file: dumlc.s
dlltool: run: as -o _bcrypt.exp dumlc.s
dlltool: Generated exports file
Вызов dllwrap из командной строки дал это.
C:\MinGW\bin\dlltool: Opened temporary file: demmc.s
C:\MinGW\bin\dlltool: run: C:\MinGW\bin\as -o _bcrypt.exp demmc.s
C:\MinGW\bin\dlltool: Generated exports file
Мой компьютер работает под управлением Windows 7 64-bit, но с 32-bit Python 2.7,Это новое, но, похоже, предустановленный AMD APP SDK.Это as.exe, который по умолчанию имеет 64-битный вывод.
Я решил исправить PATH так, чтобы C: \ MinGW \ bin опережал C: \ Program Files (x86) \ AMD APP \bin \ x86_64
Эта проблема может быть исправлена более надежно в коде Python, хотя я не определил, где в virtualenv, pip или distutils это следует сделать.
Есть еще две вещи, которые необходимодля создания расширений с использованием MinGW, который я здесь кратко повторю.
Настройте distutils для использования компилятора MinGW
Это может быть сделано в различных файлах или параметрах командной строки.Я выбрал файл в своем домашнем каталоге.
$ cat ~/pydistutils.cfg
[build]
compiler = mingw32
Патч distutils для исключения ключа -mno-cygwin
Как администратор отредактируйте Lib / distutils / cygwinccompiler.py.Удалите четыре параметра -mno-cygwin.
s/ -mno-cygwin//
-mno-cygwin устарел в gcc некоторое время и теперь является ошибкой.
См. http://bugs.python.org/issue12641