Найти - Пользователи
Полная версия: Не могу программу на Фортране ввести для работы в Python
Начало » Python для новичков » Не могу программу на Фортране ввести для работы в Python
1
lyuda@
Добрый день. Для изучения использую статью:
https://russianblogs.com/article/8944324994/
создала fib3.f запустила командой python -m numpy.f2py -c -m fib3 fib3.f
Все транслируется верно. В директории появляется файл fib3.cp39-win_amd64.pyd и папка fid3.
Далее в файле вызова пишу import fib3
выдает ответ ImportError: DLL load failed while importing fib3: Не найден указанный модуль.
Как указать путь не понимаю, вижу, что занесение идет во временные файлы.
Л.В.

py.user.next
По этим материалам учись
https://numpy.org/doc/stable/f2py/
https://numpy.org/doc/stable/f2py/f2py.getting-started.html
По русским перепечаткам учишься - в итоге не знаешь ничего.

Вот это пишешь в файл fib1.f
C FILE: FIB1.F
SUBROUTINE FIB(A,N)
C
C CALCULATE FIRST N FIBONACCI NUMBERS
C
INTEGER N
REAL*8 A(N)
DO I=1,N
IF (I.EQ.1) THEN
A(I) = 0.0D0
ELSEIF (I.EQ.2) THEN
A(I) = 1.0D0
ELSE
A(I) = A(I-1) + A(I-2)
ENDIF
ENDDO
END
C END FILE FIB1.F

Дальше в консоли выполняешь
python3 -m numpy.f2py -c fib1.f -m fib1
Так как у меня Linux, запуск третьего питона идёт в виде python3. В Windows это будет python.exe .

В директории появляется файл
fib1.cpython-36m-x86_64-linux-gnu.so
Так как у меня Linux, файл динамической библиотеки имеет расширение .so . В Windows это будет файл с расширением .dll .

Дальше я его копирую в fib1.so
cp fib1.cpython-36m-x86_64-linux-gnu.so fib1.so
Так как у меня Linux, я копирую его в файл с расширением .so . В Windows это будет файл с расширением .dll .

В директории появляется файл
fib1.so
Так как у меня Linux, файл динамической библиотеки имеет расширение .so . В Windows это будет файл с расширением .dll .

Отличия pyd-файлов от dll-файлов
https://docs.python.org/3/faq/windows.html#is-a-pyd-file-the-same-as-a-dll
Если создаётся pyd-файл у тебя, то и копируй его в pyd-файл.

И дальше я запускаю питон (третий питон) в консоли в этой директории
[guest@localhost f2py_test]$ python3
Python 3.6.1 (default, Jun 27 2017, 14:35:15)
[GCC 7.1.1 20170622 (Red Hat 7.1.1-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Дальше я в консоли питона, запущенного в той же директории, где лежит динамическая библиотека, выполняю
  
>>> import fib1
>>> 
>>> print(fib1.fib.__doc__)
fib(a,[n])
 
Wrapper for ``fib``.
 
Parameters
----------
a : input rank-1 array('d') with bounds (n)
 
Other Parameters
----------------
n : input int, optional
    Default: len(a)
 
>>>
>>> import numpy
>>> 
>>> a = numpy.zeros(8, 'd')
>>> 
>>> fib1.fib(a)
>>> 
>>> a
array([  0.,   1.,   1.,   2.,   3.,   5.,   8.,  13.])
>>>

Так что, думаю, тебе надо просто свой dll-файл, который получился, скопировать в файл fib1.dll . Скорее всего, это поможет обнаружить его. Возможно, он собрался правильно и всё работает. Если не работает, используй исходные материалы для обучения, а не перепечатки.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB