Не могу найти решение для правильного запуска f2py на моем компьютере с Windows 7

Может кто-то точно определить, где я делаю неправильно, ПОЖАЛУЙСТА? Я так истощен. Я установил MinGW 4.7, python2.7.8, numpy 1.7.1 и scipy0.13.2 в среду Anaconda (32bit) в Windows7.
Кроме того, для переменных окружения пользователя, я установил

C_INCLUDE_PATH: D:\Anaconda2\envs\arc103\MinGW\i686-w64-mingw32\include

Путь (переменная пользователя): C:\Program Files (x86)\ Код Microsoft VS \bin;D:\Anaconda2\Library\bin;D:\Anaconda2\envs\arc103\MinGW\bin

Связывание следующих команд в Anaconda Prompt

  1. "f2py -c --help-fcompiler" выводит "... Найдены компиляторы Fortran: --fcompiler=gnu95 Компилятор GNU Fortran 95 (4.7.0)...." "

  2. "f2py -c --help-compiler" выводит "Список доступных компиляторов: ...", хотя не найдено специально определенных компиляторов.

Запуск "f2py -c fib1.f -m fib1" в соответствии с "Руководством по NumPy v1.12.dev0" дает мне много ошибок, как показано ниже:

D:\Anaconda2\envs\arc103\Scripts\gfortran.bat -Wall -Wall -shared c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-.7\fib1module.oc:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-2.7\fortranobject.o c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\fib1.o -Ld:\anaconda2\envs\arc103\mingw\lib\gcc\i686-w64-mingw32\4.7.0 -LD:\Anaconda2\envs\arc103\libs -LD:\Anaconda2\envs\arc103\PCbuild -lpython27 -lgfortran -o .\fib1.pyd

c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-2.7\fib1module.o:fib1module.c:(.text+0x35): undefined reference to `__imp__PyNumber_Int'
c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-2.7\fib1module.o:fib1module.c:(.text+0x68): undefined reference to `__imp__PyComplex_Type'
c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-2.7\fib1module.o:fib1module.c:(.text+0x79): undefined reference to `__imp__PyType_IsSubtype'
c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-2.7\fib1module.o:fib1module.c:(.text+0x93): undefined reference to `__imp__PyErr_Occurred'

...  (Thousands of "undefined reference to" errors I didn't put it here) ...

collect2.exe: error: ld returned 1 exit statuserror: Command "D:\Anaconda2\envs\arc103\Scripts\gfortran.bat -Wall -Wall -shared c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-2.7\fib1module.o
c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\users\dkim1\appdata\local\temp\tmpvyedhg\src.win32-2.7\fortranobject.o 
c:\users\dkim1\appdata\local\temp\tmpvyedhg\Release\fib1.o -Ld:\anaconda2\envs\arc103\mingw\lib\gcc\i686-w64-mingw32\4.7.0 -LD:\Anaconda2\envs\arc103\libs
-LD:\Anaconda2\envs\arc103\PCbuild -lpython27 -lgfortran -o .\fib1.pyd" failed with exit status 1

Простите за беспорядок. Я потратил почти несколько месяцев, чтобы найти решение, но это слишком сложно для меня, и все безрезультатно. Буду очень признателен, если вы поможете мне. Благодарю.

1 ответ

Поскольку этому пару месяцев, я не уверен, помогут ли эти советы, но при сборке модуля Fortran to Python на Win 10 я обнаружил, что работает только компиляция для 32-битной системы, и вам нужно использовать файл сигнатуры, т.е. что-то вроде:

f2py.py -c cuncsd.pyf cuncsd.f

Вместо использования цепочки инструментов i686-w64-mingw32 я использовал прямую цепочку mingw32 (чтобы уменьшить риск того, что я случайно получу что-нибудь 64-битное).

Я также обнаружил, что вам нужно установить специальный экземпляр Visual Studio для Python, как описано здесь: Компилятор Microsoft Visual C++ для Python 3.4

Если вы используете Python 2.7, эта версия VSC должна помочь вам, только более новая версия (3.5, 3.6) в настоящее время не учитывается.

Для справки вот мой полный вызов f2py на консоли, который я в конечном итоге использовал (ни python, ни f2py не были в исполняемой переменной PATH):

python C:\Python34\Scripts\f2py.py -c cuncsd.pyf --opt="-frecursive -fmax-stack-var-size=66560" cuncsd.f -llapack -lrefblas -ltmglib

Этот конкретный модуль зависит от 32-битных разделяемых библиотек LAPCK, которые я скомпилировал ранее, и мы обнаружили, что он работает даже в системах XP.

Позже я вернулся и попытался скомпилировать это для 64 бит, но в конце концов сдался, когда всегда сталкивался с ошибками ld. Я думаю, что в будущем для Windows 10 будет гораздо проще использовать встроенную Ubuntu для запуска и расширения Python.

(См. Как включить Bash в предварительном просмотре для разработчиков в Windows 10? И Как PyCharm распознает python в подсистеме Linux Linux (bash в Windows))

Другие вопросы по тегам