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 gfortran
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了。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值