python调⽤fortran学习笔记
起因:不想把fortran结果⼿动搬到excel⾥画图表
先在window系统试,
使⽤f2py⽅法的时候总是报错has fortran sources but no fortran compiler found,或者not supported between instances of
'nonetype' and 'str'。
使⽤dll+ctypes库的时候,总是报错try using the full path with constructor syntax,或者could not find module 'xx.dll' (or one of its dependencies)。
⽹上的各种解决⽅法都试过了,都没⽤,可能是因为我的python和fortran编译器装在不同的盘⾥?⾮计算机类专业,⽆法理解环境变量之类的东西。
为了实现⽤python调⽤fortran的执念,我给电脑装了ubuntu,不是虚拟机,然后装了conda(⽹上有很多教程,tb也有代装)。这时候系统已经带有python了。⽽且没有安装编译器,点开py⽂件和f90⽂件,⾥⾯已经有那种彩⾊标注⽅便阅读了,没有撤销选项,但⽤ctrl+z 可以撤销,所以不⽤安装编译器了。
建⽴⼀个⽂件夹,右键在终端打开。先了解两个linux系统常⽤操作:cd和touch
touch cal_es.py !建⽴⼀个py⽂件
touch test.f90 !建⽴⼀个f90⽂件
cd where\where !从当前⽂件夹进⼊⾥⾯的哪个⽂件夹
cd .. !退出⼀层⽂件夹
按下⾯这样在终端输⼊,来安装gfortran,⼀点⼩问题就是输密码的时候密码不会显⽰在终端上,正常输就好了。我写了⼀个名为test.f90的简单program试⽤⼀下。遇到⼀个报错-Werror=line-truncation,原因是把⼀⾏写得太长了,解决⽅法是在较长的⾏⾥插⼊换⾏连续符&并换⾏。
sudo apt-get install gfortranpython怎么读文件夹下的文件夹
gfortran --version
touch test.f90!创建,然后点开这个⽂件写⼀段可执⾏的fortran代码
gfortran test.f90!⽣成a.out
./a.out!执⾏结果
然后写了⼀个名为es.f90的subroutine,如下。注意subroutine⾥⾯要写标签,就是以!f2py开头的那两句,以及⼀个f90⽂件⾥可以有多个subroutine。
subroutine es1(t,e)
implicit none
double precision t,e
!f2py intent(in)::t
!f2py intent(out)::e
e=t+1
return
end
⽤f2py⽣成把它转换成包,这是在终端输⼊的:
f2py -c es.f90 -m es !⽣成es.os
报错python.h:no such file or directory,就在终端如下输⼊,来安装python.h。
sudo apt-get install python-dev
os⽂件就⽣成在当前⽂件夹⾥了,这时候python还缺很多包,可以⽤sudo直接安装,也可以安装pip然后安装,但⽐如sudo能安装的python-tk这个包pip反⽽安装不了。
pydoc modules !查看安装了哪些python包
pip --version !查看是否安装了xx
sudo apt-get install python-pip !⽅法⼀,sudo安装
pip install matplotlib !⽅法⼆:pip安装
sudo apt-get install python-tk !解决matplotlib缺少python-tk
然后就可以⽤之前提到的touch建⽴py⽂件,点进去写代码,像这样使⽤Fortran⽣成的包:
import es
print(es.es1(2))
es是我取的os⽂件名,es1是我取的subroutine名,然后开始画我的图了。在linux下python调⽤fortran算是没怎么遇到error了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论