在Windows 10上用f2py和Python 3.6编译fortran模块
我正在尝试(并且失败)编译Fortran模块(特别是 我的设置: Python 3.6.3 | Anaconda Custom(64位)| (默认,2017年10月15日, 03:27:45)[MSC V.1900 64位(AMD64)] Win32 Windows 10 Enterprise(版本1703) numpy 1.14.0 我遵循 Scipy文档和一个非常有用的指南/a>来自Michael Hirsch博士. Hirsch博士创建了PYIGRF12模块,但是通过PIP安装对我来说是失败的,这最初激发了我对F2PY的兴趣. 我将概述使用的一些方法.无论方法如何,我总是从使用f2py igrf12.f -m pyigrf12 -h igrf12.pyf创建 *.pyf签名文件并适当地添加意图(in/out)属性开始. 方法1:使用C:\ mingw和--compiler=mingw32 方法2:使用C:\ mingw和--compiler=msvc
8 2024-01-26
编程技术问答社区
将python回调函数传递给Fortran子程序的开销是多少?
我刚刚使用F2PY包裹了一个Fortran 90子例程.这里的细微之处在于,Fortran Subroutine Aslo将Python呼叫函数作为其参数之一: SUBROUTINE f90foo(pyfunc, a) real(kind=8),intent(in) :: a !f2py intent(callback) pyfunc external pyfunc !f2py real*8 y,x !f2py y = pyfunc(x) !*** debug begins*** print *, 'Start Loop' do i=1,1000 p = pyfunc(a) end do total = etime(elapsed) print *, 'End: total=', total, ' user=', elapsed(1), ' system=', elapsed(2) stop !*** debug ends *** pyfunc是我的Python代码其他
2 2023-12-15
编程技术问答社区
radial.o : error LNK2001: unresolved external symbol lambda_fatal error LNK1120: 8 unresolved externals,error. failed with exit status 1120
我正在运行一个开源软件包,该软件包在Python 3.7中与Fortran FOR混合使用了一些代码.我使用Visual Studio 2019和Intel Parallel Studio 2019 Integrated. radial.o : error LNK2001: unresolved external symbol lambda_ fatal error LNK1120: 8 unresolved externals error: Command...failed with exit status 1120 所以我应该怎么做.我测试了我对Fortran Codes有问题.任何帮助都会不胜感激. 我的英特尔CMD: 有一些命令可能使其工作错误,但是现在我没有任何想法. ... running build running config_cc unifing config_cc, config, build_clib, build_ext, build co
4 2023-11-24
编程技术问答社区
Python错误。文件 ... spherical.py... import f_utils...ImportError: DLL加载失败。无法找到指定的模块
我在python 2.7中运行一些代码,MIN-GW - fortran77代码和Visual Studio 2010.我使用pip安装了所有要求,所以当我这样做时: python setup.py install 一切都是成功. f2py -c f_utils.for 创建 libf_utils.DLYOMDEGIW6SZRJNEZ2ZMRYPGQZ75ZH3.gfortran-win_amd64.dll in ..\untitled\.libs和untitled.pyd 但是,如python spherical.py install现在我得到了这个错误: Traceback (most recent call last): File "spherical.py", line 4, in import f_utils ImportError: DLL load failed: The specified module c
8 2023-11-23
编程技术问答社区
用F2PY在许多扩展模块之间共享Fortran 90模块数据
我想共享位于许多自我编译的F2PY扩展模块之间的fortran 90模块中的数据. F2PY的文档说,由于Python如何共享库,这是不可能的. f2py会生成包装器,以在例程中定义的常见块中 签名块.链接的所有fortran代码都可以看到常见块 使用当前的扩展模块,而不是其他扩展模块 (此限制是由于Python如何导入共享库). [...] Fortran 90模块数据的F2PY接口类似于Fortran 77 普通块. 链接到文档 由于我必须使用约100个嵌套的Fortran 90子例程,因此我需要在它们之间共享数据.有什么建议我如何实现? 我考虑将每个变量作为参数传递给每个子例程,然后返回变量,但这听起来有些错误. 解决方案 尽管只是一种试用方法,但是如何将可变模块和所有子例程放入一个文件中,然后用f2py(*1)将其编译为单个文件?例如... mytest.f90: include "vars.f90" include "su
4 2023-09-01
编程技术问答社区
使用setuptools将F2py生成的*.so文件链接到python包中
我希望使用SetUptools将软件包部署到PYPI.但是,包装的核心部分实际上是用Fortran编写的,我正在使用F2PY将其包裹在Python中.基本上,项目的结构看起来像这样: my_project 许可证 readme.md setup.py my_project init .py myfunc.py 你好. 模块myfunc.py导入hello.so(import my_project.hello),然后可以由myfunc.py中的函数使用.这在我的机器上非常有效. 然后,我尝试了标准的Setuptools安装:sudo python3 setup.py install在我的Ubuntu上,它可以完美地安装.但不幸的是,在导入时,它会引发ModuleNotFoundError: No module named 'hello'. 现在,据我了解,在基于Linux的系统上,对于Python,共享库 *.SO存储在/usr/lib/pytho
6 2023-08-31
编程技术问答社区
在使用numpy.distutils.core.setup之前安装numpy
我正在使用numpy.distutils设置具有Frotran模块的软件包(mypackage).问题是,如果我在没有numpy的环境上进行pip install mypackage,我会收到以下错误: modulenotfounderror:没有名为'numpy'的模块 简单的解决方案是在安装我的软件包之前询问用户(如果我设法有任何东西)pip install numpy,但我认为这不是一个非常 Extight> Elegand 解决方案. 我想到了在我导入numpy之前只用setup_requires=['numpy']调用setuptools.setup的想法,而且似乎很好.这是我的setup.py: import setuptools setuptools.setup( setup_requires=[ 'numpy' ],) from numpy.distutils.core import setup, Extensi
20 2023-08-31
编程技术问答社区
在 Python 中打包传统的 Fortran。使用 setuptools 和 numpy.distutils 可以吗?
我正在尝试为我所在领域的一些流行的Fortran代码进行Python软件包发行.我希望它使用setup.py文件的最标准方法.相关的qustion有助于学习如何包装fortran扩展. 使用这种方法时,我注意到混合setuptools和numpy.distutils时的一些令人困惑的行为.混合两者是不好的做法吗?截至2015年,似乎最好使用setuptools. 但是,我想以与numpy.兼容的方式构建Fortran扩展,因此我想从numpy.distutils中导入numpy.distutils获得Extension和setup. 我正在使用以下基本方法: from setuptools.command.develop import develop from numpy.distutils.core import Extension, setup ext_modules=[Extension("my_package.fortran_mod", sources=
6 2023-08-31
编程技术问答社区
使用F2py进行分割的故障
这是我在这里问的一个问题的后续. 我如何将输入阵列分配给f2py? > 我已经回答评论了这个问题.最初的问题不清楚,太长了.请参阅下面的评论1. 我正在尝试使用F2PY来包装各种fortran子例程/函数来读取用Fortran 77编写的各种原子物理代码输出的数据.我使用的是Anaconda Python分布(Python 3.4 64 bit)在Ubuntu 14.04(python 3.4 64位)( 64位)带GNU编译器套件(GCC,GFORTRAN等) 我有问题试图在Python中进行预言.我最初的问题涉及分配角色阵列.原来我的形状错误.我已经解决了这个问题(我认为),现在正在处理细分错误.我已经使用--debug-capi标志将fortran子例程与f2py编辑,以启用详细的错误报告. 这是我运行Python脚本时获得的终端输出的相关部分. debug-capi:Python C/API function adf04_2py.xxdata_04(
4 2023-08-25
编程技术问答社区
如何在导入F2Py模块时 "捕获 "一个seg故障?
一些背景,其相关性可能会波动: 我目前正在使用一些F2PY库 - F2PY从某些Fortran代码编辑的Python模块.出于所有意图和目的,您可以将这些模块视为"第三方";我目前无法访问Fortran源代码,也不负责编译过程. 模块本身被导入我正在帮助开发的程序中,该程序具有Python脚本支持,并且在多个平台上运行. 我试图防止由编译机上的库版本和用户机器上的库造成的兼容性问题引起的未来崩溃.已经发生了一个问题,即我们用户的一台机器已更改为不兼容的Numpy版本,这导致了导入模块时在启动时引起了不可接受的SEG故障. 问题: 我正在寻找一种导入F2PY模块的方法,但是以某种方式可以处理可能由于模块可能依赖的不兼容的库版本而可能发生的任何SEG故障.我目前在调用导入之前检查了numpy版本,但是我宁愿先导入,然后以后"捕获"任何问题: try: import module_name except SegFault: # Deal wi
2 2023-08-25
编程技术问答社区
在 Red Hat 上安装 SciPy
我正在尝试在Red Hat Enterprise Linux服务器版本6.3上安装Scipy软件包.但是,它失败了. 我正在使用的Python的版本为2.6,但是它似乎需要2.4.还有另一种与2.6兼容的Scipy版本吗?如果需要2.4,那么如何获得该建议?我遵循 python网页上的指示,但它们似乎已过时了.这也需要F2PY,我不确定如何获得. 有什么建议以更轻松的安装?我一直在按照指示进行谢谢! 解决方案 我能够通过下载最新版本的numpy(从源构建和安装该问题,因为Red Hat Package Manager上的一个版本已过时),然后安装Scipy(通过我下载的setup.py scipy文件). 其他解决方案 启用Epel存储库: https://fedoraproject.org/wiki/epel /p> 之后,只需" yum安装scipy" 其他解决方案 从RHEL 5上安装Scipy时,我遇到的问题是未定义的_GFORTRAN符号.
4 2023-08-22
编程技术问答社区
f2py:返回的一些数组没有变化/是空的
嗨,我正在使用f2py来包装lapack例程dgesvd,通过编译dgesvd.f文件并将其链接到llapack,如说明此处 根据Docstring,DGESVD模块具有签名: dgesvd - Function signature: dgesvd(jobu,jobvt,m,n,a,s,u,vt,work,lwork,info,[lda,ldu,ldvt]) Required arguments: jobu : input string(len=1) jobvt : input string(len=1) m : input int n : input int a : input rank-2 array('d') with bounds (lda,*) s : input rank-1 array('d') with bounds (*) u : input rank-2 array('d') with bounds (ldu,*) vt
8 2023-08-11
编程技术问答社区
使用 f2py 加快 Python 计算速度
我正在与python进行一个序列对齐项目,而python的循环太慢了. 所以,我决定使用f2py.我对Fortran了解不多,所以我一直呆在下面的点. 有两个命名为"列"的序列和"行"的类型为np.array 例如: column = ['A', 'T', 'G', 'C'] row = ['A', 'A', 'C', 'C'] 我为Needleman-Wunsch算法创建了一个矩阵,然后我得分了两个序列(列,行). import numpy as np column = np.array(list('ATGC')) row = np.array(list('AACC')) matrix = np.zeros((len(column) + 1, len(row) + 1), dtype='int') for i in range(1, len(column)+1): self.matrix[i]
114 2023-07-22
编程技术问答社区
f2py链接quadmath库?使用ctypes的fortran包装器代替?
更新11/23/2019: 这是一个问题,是一个问题,为什么我不能让F2PY为一个简单的Fortran包装纸工作.我的"答案"(下)是使用CTYPES. 原始文章: 在过去的三天中,我试图使用F2PY将Fortran与Python接口.我正在使用Cygwin和Mingw在Windows上工作.这篇文章是关于使用Cygwin的,但我担心两者之间的冲突. 这是源多X.f90: subroutine multxy(x,y,z) integer, parameter :: flt = selected_real_kind(15) real(flt), intent(in) :: x,y real(flt), intent(out) :: z write(*,'(a,3g12.5)')'multxy' write(*,'(a,3g12.5)')'multxy',
20 2023-07-15
编程技术问答社区
WinError 2 系统无法找到指定的文件(Python)。
我有一个fortran程序,想在Python中执行多个文件.我有2000个输入文件,但是在我的Fortran代码中,我一次只能运行一个文件.我应该如何称呼Python的Fortran程序? 我的脚本: import subprocess import glob input = glob.glob('C:/Users/Vishnu/Desktop/Fortran_Program_Rum/*.txt') output = glob.glob('C:/Users/Vishnu/Desktop/Fortran_Program_Rum/Output/') f = open("output", "w") for i in input: subprocess.Popen(["FORTRAN ~/C:/Users/Vishnu/Desktop/Fortran_Program_Rum/phase1.f", "--domain "+i]) f.write(i) 错误: runf
20 2023-07-12
编程技术问答社区
f2py与Intel Fortran编译器
我正在尝试使用F2PY将我的python程序与我的fortran模块接口. 我在Win7平台上. 我将最新的Anaconda 64(1.7)用作Python+Numpy堆栈. 我的Fortran编译器是最新的Intel Fortran编译器64(版本14.0.0.103 Build 20130728). 执行f2py -c -m PyModule FortranModule.f90 --fcompiler=intelvem 时,我一直在遇到许多问题 最后一个我似乎无法整理出的最后一个是,它看起来像是旗帜的序列f2py/distutils传递给编译器不符合ifort期望的内容. 我收到有关未知选项的一系列警告消息. ifort: command line warning #10006: ignoring unknown option '/LC:\Anaconda\libs' ifort: command line warning #10006: ig
52 2023-07-11
编程技术问答社区
f2py-f90wrap 错误 `undefined symbol: __test_mod_MOD_p"。
我试图使用F90Wrap包裹一些fortran,该F90Wrap是在F2PY上构建的. (我可以使用f2py,但我想扩展一些代码以使用派生类型). 这是我尝试包装的简单.f90测试代码: module test_mod integer::p end module 我已经编译并包装了以下命令: gfortran -fPIC -c test.f90 f90wrap -m test test.f90 f2py-f90wrap -c -m _test f90wrap_*.f90 我运行时: python test.py 在此生成的文件上: import _test import f90wrap.runtime import logging class Test_Mod(f90wrap.runtime.FortranModule): """ Module test_mod Defined at test.f90
24 2023-07-11
编程技术问答社区
在链接到PETSc的Fortran代码上使用f2py
我的问题与这篇文章有关: 在模块中用F2PY包装的模块(最小工作示例)? 海报试图用F2PY编译Fortran代码(test.f90),然后将其链接到预编译的库(或我的情况下,MyEx44f.o).答案使我能够编译Fortran代码并生成Python模块. 我的问题与上述海报问题不同,因为我的对象链接到PETSC.当我尝试将我的F2PY生成的库导入Python时,我会发现它无法找到PETSC Subroutine的" Vecdestroy".我最近的尝试是: f2py -c -fcompiler = gfortran -i. myex44f.o ../../../../codes/third_party/petsc/include/petsc/finclude/petscdef.h-mm test test.f90 这是代码test.f90: subroutine test USE petsctest call mainsub end subr
46 2023-07-10
编程技术问答社区
f2py:在创建二进制轮时需要特定的numpy版本
我们正在发布Python包装的Binry Wheels.该软件包具有我们使用F2PY生产的Fortran扩展. 我们的问题是CI图像(Linux的GitLab CI和Windows的AppVeyor)往往具有最新的Numpy版本.然后,当用户安装二进制轮时,除非用户也具有最新的numpy版本,否则Fortran扩展名. 在中也描述了这个问题. 接受的答案是添加一个pyproject.toml文件,该文件包含一个较旧的numpy版本作为构建,依赖性,这样: [build-system] requires = ['numpy==1.15', 'setuptools', 'wheel'] build-backend = "setuptools.build_meta" ,然后至少至少在用户计算机上通过setup.py中的install_requires上的版本,例如`''numpy> = 1.12.2'. 我尝试了一下,但是现在看来,在Gitlab CI中,PIP再
18 2023-07-09
编程技术问答社区
f2py:在fortran中使用openMP并行时失败了
我正在尝试编译使用openMP使用f2py的fortran例程. . 这是文件bsp.f90: module OTmod !$ use omp_lib implicit none public :: get_threads contains function get_threads() result(nt) integer :: nt nt = 0 !$ nt = omp_get_max_threads() !$omp parallel num_threads(nt) write( *, * ) 'hello world!' !$omp end parallel end function get_threads end module OTmod 如果我用 编译 f2py -m testmod --fcompiler=gfortran --f90flags='-fopenmp' -l
90 2023-07-08
编程技术问答社区