Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 10, 2021 11:22:51

lyuda@
Зарегистрирован: 2021-11-18
Сообщения: 20
Репутация: +  1  -
Профиль   Отправить e-mail  

Не могу программу на Фортране ввести для работы в Python

Добрый день. Для изучения использую статью:
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: Не найден указанный модуль.
Как указать путь не понимаю, вижу, что занесение идет во временные файлы.
Л.В.

Офлайн

#2 Дек. 10, 2021 21:12:23

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Не могу программу на Фортране ввести для работы в Python

По этим материалам учись
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 . Скорее всего, это поможет обнаружить его. Возможно, он собрался правильно и всё работает. Если не работает, используй исходные материалы для обучения, а не перепечатки.



Отредактировано py.user.next (Дек. 10, 2021 23:05:22)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version