2016-03-12 3 views
0

Я пытаюсь запустить f2py example создать скомпилированный расширение module¶:Установка компилятора Фортрана в f2py

# import os 
# os.environ["CC"] = "gcc" 
# os.environ["CXX"] = "g++" 

# Using post-0.2.2 scipy_distutils to display fortran compilers 
from scipy_distutils.fcompiler import new_fcompiler 
compiler = new_fcompiler() # or new_fcompiler(compiler='intel') 
compiler.dump_properties() 

#Generate add.f wrapper 
from numpy import f2py 
with open("add.f") as sourcefile: 
    sourcecode = sourcefile.read() 
    print 'Fortran code' 
    print sourcecode 

# f2py.compile(sourcecode, modulename='add', extra_args = '--compiler=gnu --fcompiler=gnu') 
f2py.compile(sourcecode, modulename='add', extra_args = '--fcompiler=gfortran') 
# f2py.compile(sourcecode, modulename='add') 

import add 

Однако код не работает. Я считаю, что это потому, что он не использует установленный компилятор (оперативная система - ubuntu 12.04). Однако, несмотря на использование аргумента «-fcompile» или изменение записей «CC» и «CXX», он все еще не работает.

Это полный журнал ошибок. Важные замечания:

Could not locate executable g77 
Could not locate executable f77 
customize GnuFCompiler 
Could not locate executable ifort 
Could not locate executable ifc 
Could not locate executable efort 
Could not locate executable efc 
Could not locate executable ifort 
customize IntelFCompiler 
customize LaheyFCompiler 
customize PGroupFCompiler 
customize AbsoftFCompiler 
customize NAGFCompiler 
customize VastFCompiler 
customize GnuFCompiler 
customize CompaqFCompiler 
customize IntelItaniumFCompiler 
customize G95FCompiler 
customize GnuFCompiler 
GnuFCompiler instance properties: 
    archiver  = ['ar', '-cr'] 
    compile_switch = '-c' 
    compiler_f77 = ['f77', '-Wall', '-fno-second-underscore'] 
    compiler_f90 = None 
    compiler_fix = None 
    libraries  = [] 
    library_dirs = [] 
    linker_so  = ['f77', '-Wall'] 
    object_switch = '-o ' 
    ranlib   = ['ranlib'] 
    version_cmd  = ['f77', '--version'] 
Fortran code 
C 
     SUBROUTINE ZADD(A,B,C,N) 
C 
     DOUBLE COMPLEX A(*) 
     DOUBLE COMPLEX B(*) 
     DOUBLE COMPLEX C(*) 
     INTEGER N 
     DO 20 J = 1, N 
     C(J) = A(J)+B(J) 
20 CONTINUE 
     END 

Unknown vendor: "gfortran" 
running build 
running config_cc 
unifing config_cc, config, build_clib, build_ext, build commands --compiler options 
running config_fc 
unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options 
running build_src 
build_src 
building extension "add" sources 
f2py options: [] 
f2py:> /tmp/tmpNKECn3/src.linux-x86_64-2.7/addmodule.c 
creating /tmp/tmpNKECn3/src.linux-x86_64-2.7 
Reading fortran codes... 
    Reading file '/tmp/tmpi2WwBV.f' (format:fix,strict) 
Post-processing... 
    Block: add 
      Block: zadd 
Post-processing (stage 2)... 
Building modules... 
    Building module "add"... 
     Constructing wrapper function "zadd"... 
getarrdims:warning: assumed shape array, using 0 instead of '*' 
getarrdims:warning: assumed shape array, using 0 instead of '*' 
getarrdims:warning: assumed shape array, using 0 instead of '*' 
      zadd(a,b,c,n) 
    Wrote C/API module "add" to file "/tmp/tmpNKECn3/src.linux-x86_64-2.7/addmodule.c" 
    adding '/tmp/tmpNKECn3/src.linux-x86_64-2.7/fortranobject.c' to sources. 
    adding '/tmp/tmpNKECn3/src.linux-x86_64-2.7' to include_dirs. 
copying /usr/local/lib/python2.7/dist-packages/numpy/f2py/src/fortranobject.c -> /tmp/tmpNKECn3/src.linux-x86_64-2.7 
copying /usr/local/lib/python2.7/dist-packages/numpy/f2py/src/fortranobject.h -> /tmp/tmpNKECn3/src.linux-x86_64-2.7 
build_src: building npy-pkg config files 
running build_ext 
customize UnixCCompiler 
customize UnixCCompiler using build_ext 
customize Gnu95FCompiler 
Found executable /usr/bin/gfortran 
Found executable /home/vital/Iraf/unix/hlib/f77.sh 
Found executable /usr/bin/ranlib 
customize Gnu95FCompiler using build_ext 
building 'add' extension 
compiling C sources 
C compiler: gfortran -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC 

creating /tmp/tmpNKECn3/tmp 
creating /tmp/tmpNKECn3/tmp/tmpNKECn3 
creating /tmp/tmpNKECn3/tmp/tmpNKECn3/src.linux-x86_64-2.7 
compile options: '-I/tmp/tmpNKECn3/src.linux-x86_64-2.7 -I/usr/local/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c' 
gfortran: /tmp/tmpNKECn3/src.linux-x86_64-2.7/addmodule.c 
In file included from /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/ndarraytypes.h:1781:0, 
       from /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/ndarrayobject.h:18, 
       from /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/arrayobject.h:4, 
       from /tmp/tmpNKECn3/src.linux-x86_64-2.7/fortranobject.h:13, 
       from /tmp/tmpNKECn3/src.linux-x86_64-2.7/addmodule.c:19: 
/usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning "Using deprecated NumPy API, disable it by " "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp] 
#warning "Using deprecated NumPy API, disable it by " \ 
^
/tmp/tmpNKECn3/src.linux-x86_64-2.7/addmodule.c:105:12: warning: ‘f2py_size’ defined but not used [-Wunused-function] 
static int f2py_size(PyArrayObject* var, ...) 
      ^
gfortran: /tmp/tmpNKECn3/src.linux-x86_64-2.7/fortranobject.c 
In file included from /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/ndarraytypes.h:1781:0, 
       from /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/ndarrayobject.h:18, 
       from /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/arrayobject.h:4, 
       from /tmp/tmpNKECn3/src.linux-x86_64-2.7/fortranobject.h:13, 
       from /tmp/tmpNKECn3/src.linux-x86_64-2.7/fortranobject.c:2: 
/usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning "Using deprecated NumPy API, disable it by " "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp] 
#warning "Using deprecated NumPy API, disable it by " \ 
^
compiling Fortran sources 
Fortran f77 compiler: /home/vital/Iraf/unix/hlib//f77.sh -Wall -g -ffixed-form -fno-second-underscore -fPIC -O3 -funroll-loops 
Fortran f90 compiler: /usr/bin/gfortran -Wall -g -fno-second-underscore -fPIC -O3 -funroll-loops 
Fortran fix compiler: /usr/bin/gfortran -Wall -g -ffixed-form -fno-second-underscore -Wall -g -fno-second-underscore -fPIC -O3 -funroll-loops 
compile options: '-I/tmp/tmpNKECn3/src.linux-x86_64-2.7 -I/usr/local/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c' 
f77.sh:f77: /tmp/tmpi2WwBV.f 
Cannot open file tmpi2WwBV.f 
gcc: error: tmpi2WwBV.c: No such file or directory 
gcc: fatal error: no input files 
compilation terminated. 
Cannot open file tmpi2WwBV.f 
gcc: error: tmpi2WwBV.c: No such file or directory 
gcc: fatal error: no input files 
compilation terminated. 
error: Command "/home/vital/Iraf/unix/hlib//f77.sh -Wall -g -ffixed-form -fno-second-underscore -fPIC -O3 -funroll-loops -I/tmp/tmpNKECn3/src.linux-x86_64-2.7 -I/usr/local/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c -c /tmp/tmpi2WwBV.f -o /tmp/tmpNKECn3/tmp/tmpi2WwBV.o" failed with exit status 4 
Traceback (most recent call last): 
    File "/home/vital/git/pyResources/pyResources/Tutorials/test_f2py.py", line 21, in <module> 
    import add 
ImportError: No module named add 

P.S. Ираф - это астрономическое программное обеспечение, а не компилятор.

Edit 1:

Использование правильного импорта, как было предложено jthomas я получаю меньшую ошибку, но все же пытается использовать скрипт в папке IrAF. Это полное сообщение об ошибке с помощью этого кода:

Gnu95FCompiler instance properties: 
    compile_switch = '-c' 
    libraries  = [] 
    library_dirs = [] 
    object_switch = '-o ' 
Fortran code 
C 
     SUBROUTINE ZADD(A,B,C,N) 
C 
     DOUBLE COMPLEX A(*) 
     DOUBLE COMPLEX B(*) 
     DOUBLE COMPLEX C(*) 
     INTEGER N 
     DO 20 J = 1, N 
     C(J) = A(J)+B(J) 
20 CONTINUE 
     END 

Unknown vendor: "gfortran" 
running build 
running config_cc 
unifing config_cc, config, build_clib, build_ext, build commands --compiler options 
running config_fc 
unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options 
running build_src 
build_src 
building extension "add" sources 
f2py options: [] 
f2py:> /tmp/tmp_KRxI5/src.linux-x86_64-2.7/addmodule.c 
creating /tmp/tmp_KRxI5/src.linux-x86_64-2.7 
Reading fortran codes... 
    Reading file '/tmp/tmph5mvme.f' (format:fix,strict) 
Post-processing... 
    Block: add 
      Block: zadd 
Post-processing (stage 2)... 
Building modules... 
    Building module "add"... 
     Constructing wrapper function "zadd"... 
getarrdims:warning: assumed shape array, using 0 instead of '*' 
getarrdims:warning: assumed shape array, using 0 instead of '*' 
getarrdims:warning: assumed shape array, using 0 instead of '*' 
      zadd(a,b,c,n) 
    Wrote C/API module "add" to file "/tmp/tmp_KRxI5/src.linux-x86_64-2.7/addmodule.c" 
    adding '/tmp/tmp_KRxI5/src.linux-x86_64-2.7/fortranobject.c' to sources. 
    adding '/tmp/tmp_KRxI5/src.linux-x86_64-2.7' to include_dirs. 
copying /usr/local/lib/python2.7/dist-packages/numpy/f2py/src/fortranobject.c -> /tmp/tmp_KRxI5/src.linux-x86_64-2.7 
copying /usr/local/lib/python2.7/dist-packages/numpy/f2py/src/fortranobject.h -> /tmp/tmp_KRxI5/src.linux-x86_64-2.7 
build_src: building npy-pkg config files 
running build_ext 
customize UnixCCompiler 
customize UnixCCompiler using build_ext 
customize Gnu95FCompiler 
Found executable /usr/bin/gfortran 
Found executable /home/vital/Iraf/unix/hlib/f77.sh 
Found executable /usr/bin/ranlib 
customize Gnu95FCompiler using build_ext 
building 'add' extension 
compiling C sources 
C compiler: gcc -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC 

creating /tmp/tmp_KRxI5/tmp 
creating /tmp/tmp_KRxI5/tmp/tmp_KRxI5 
creating /tmp/tmp_KRxI5/tmp/tmp_KRxI5/src.linux-x86_64-2.7 
compile options: '-I/tmp/tmp_KRxI5/src.linux-x86_64-2.7 -I/usr/local/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c' 
gcc: /tmp/tmp_KRxI5/src.linux-x86_64-2.7/addmodule.c 
In file included from /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/ndarraytypes.h:1781:0, 
       from /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/ndarrayobject.h:18, 
       from /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/arrayobject.h:4, 
       from /tmp/tmp_KRxI5/src.linux-x86_64-2.7/fortranobject.h:13, 
       from /tmp/tmp_KRxI5/src.linux-x86_64-2.7/addmodule.c:19: 
/usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning "Using deprecated NumPy API, disable it by " "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp] 
#warning "Using deprecated NumPy API, disable it by " \ 
^
/tmp/tmp_KRxI5/src.linux-x86_64-2.7/addmodule.c:105:12: warning: ‘f2py_size’ defined but not used [-Wunused-function] 
static int f2py_size(PyArrayObject* var, ...) 
      ^
gcc: /tmp/tmp_KRxI5/src.linux-x86_64-2.7/fortranobject.c 
In file included from /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/ndarraytypes.h:1781:0, 
       from /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/ndarrayobject.h:18, 
       from /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/arrayobject.h:4, 
       from /tmp/tmp_KRxI5/src.linux-x86_64-2.7/fortranobject.h:13, 
       from /tmp/tmp_KRxI5/src.linux-x86_64-2.7/fortranobject.c:2: 
/usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning "Using deprecated NumPy API, disable it by " "#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp] 
#warning "Using deprecated NumPy API, disable it by " \ 
^
compiling Fortran sources 
Fortran f77 compiler: /home/vital/Iraf/unix/hlib//f77.sh -Wall -g -ffixed-form -fno-second-underscore -fPIC -O3 -funroll-loops 
Fortran f90 compiler: /usr/bin/gfortran -Wall -g -fno-second-underscore -fPIC -O3 -funroll-loops 
Fortran fix compiler: /usr/bin/gfortran -Wall -g -ffixed-form -fno-second-underscore -Wall -g -fno-second-underscore -fPIC -O3 -funroll-loops 
compile options: '-I/tmp/tmp_KRxI5/src.linux-x86_64-2.7 -I/usr/local/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c' 
f77.sh:f77: /tmp/tmph5mvme.f 
Cannot open file tmph5mvme.f 
gcc: error: tmph5mvme.c: No such file or directory 
gcc: fatal error: no input files 
compilation terminated. 
Cannot open file tmph5mvme.f 
gcc: error: tmph5mvme.c: No such file or directory 
gcc: fatal error: no input files 
compilation terminated. 
error: Command "/home/vital/Iraf/unix/hlib//f77.sh -Wall -g -ffixed-form -fno-second-underscore -fPIC -O3 -funroll-loops -I/tmp/tmp_KRxI5/src.linux-x86_64-2.7 -I/usr/local/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c -c /tmp/tmph5mvme.f -o /tmp/tmp_KRxI5/tmp/tmph5mvme.o" failed with exit status 4 
Traceback (most recent call last): 
    File "/home/vital/git/pyResources/pyResources/Tutorials/test_f2py.py", line 42, in <module> 
    import add 
ImportError: No module named add 

EDIT 2: При изменении расширения для .f90 и определения местоположения FORtran компилятора (с помощью WhereIs) Я получаю следующее сообщение об ошибке:

Gnu95FCompiler instance properties: 
    compile_switch = '-c' 
    libraries  = [] 
    library_dirs = [] 
    object_switch = '-o ' 
Fortran code 
C 
     SUBROUTINE ZADD(A,B,C,N) 
C 
     DOUBLE COMPLEX A(*) 
     DOUBLE COMPLEX B(*) 
     DOUBLE COMPLEX C(*) 
     INTEGER N 
     DO 20 J = 1, N 
     C(J) = A(J)+B(J) 
20 CONTINUE 
     END 

Unknown vendor: "/usr/bin/gfortran" 
running build 
running config_cc 
unifing config_cc, config, build_clib, build_ext, build commands --compiler options 
running config_fc 
unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options 
running build_src 
build_src 
building extension "add" sources 
f2py options: [] 
f2py:> /tmp/tmpHgqM4n/src.linux-x86_64-2.7/addmodule.c 
creating /tmp/tmpHgqM4n/src.linux-x86_64-2.7 
Reading fortran codes... 
    Reading file '/tmp/tmpiLO46g.f' (format:fix,strict) 
Post-processing... 
    Block: add 
      Block: zadd 
Post-processing (stage 2)... 
Building modules... 
    Building module "add"... 
     Constructing wrapper function "zadd"... 
getarrdims:warning: assumed shape array, using 0 instead of '*' 
getarrdims:warning: assumed shape array, using 0 instead of '*' 
getarrdims:warning: assumed shape array, using 0 instead of '*' 
      zadd(a,b,c,n) 
    Wrote C/API module "add" to file "/tmp/tmpHgqM4n/src.linux-x86_64-2.7/addmodule.c" 
    adding '/tmp/tmpHgqM4n/src.linux-x86_64-2.7/fortranobject.c' to sources. 
    adding '/tmp/tmpHgqM4n/src.linux-x86_64-2.7' to include_dirs. 
copying /usr/local/lib/python2.7/dist-packages/numpy/f2py/src/fortranobject.c -> /tmp/tmpHgqM4n/src.linux-x86_64-2.7 
copying /usr/local/lib/python2.7/dist-packages/numpy/f2py/src/fortranobject.h -> /tmp/tmpHgqM4n/src.linux-x86_64-2.7 
build_src: building npy-pkg config files 
running build_ext 
customize UnixCCompiler 
customize UnixCCompiler using build_ext 
don't know how to compile Fortran code on platform 'posix' with '/usr/bin/gfortran' compiler. Supported compilers are: g95,compaq,none,intele,ibm,gnu,mips,lahey,nag,pathf95,intelem,gnu95,intelv,intelvem,absoft,intelev,pg,sun,hpux,vast,intel) 
warning: build_ext: f77_compiler=/usr/bin/gfortran is not available. 

building 'add' extension 
error: extension 'add' has Fortran sources but no Fortran compiler found 

EDIT 3:

Используя аргументы:

f2py.compile(sourcecode, modulename='add', extra_args = '-c --help-fcompiler') 

я получаю следующее outpu t:

Gnu95FCompiler instance properties: 
    archiver  = ['/usr/bin/gfortran', '-cr'] 
    compile_switch = '-c' 
    compiler_f77 = ['/home/vital/Iraf/unix/hlib//f77.sh', '-Wall', '-g', '- 
        ffixed-form', '-fno-second-underscore', '-fPIC', '-O3', '- 
        funroll-loops'] 
    compiler_f90 = ['/usr/bin/gfortran', '-Wall', '-g', '-fno-second- 
        underscore', '-fPIC', '-O3', '-funroll-loops'] 
    compiler_fix = ['/usr/bin/gfortran', '-Wall', '-g', '-ffixed-form', '- 
        fno-second-underscore', '-Wall', '-g', '-fno-second- 
        underscore', '-fPIC', '-O3', '-funroll-loops'] 
    libraries  = ['gfortran'] 
    library_dirs = [] 
    linker_exe  = ['/usr/bin/gfortran', '-Wall', '-Wall'] 
    linker_so  = ['/usr/bin/gfortran', '-Wall', '-g', '-Wall', '-g', '- 
        shared'] 
    object_switch = '-o ' 
    ranlib   = ['/usr/bin/ranlib'] 
    version   = LooseVersion ('4.8') 
    version_cmd  = ['/usr/bin/gfortran', '-dumpversion'] 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/numpy/f2py/f2py2e.py", line 648, in main 
    run_compile() 
    File "/usr/local/lib/python2.7/dist-packages/numpy/f2py/f2py2e.py", line 633, in run_compile 
    setup(ext_modules=[ext]) 
    File "/usr/local/lib/python2.7/dist-packages/numpy/distutils/core.py", line 169, in setup 
    return old_setup(**new_attr) 
    File "/usr/lib/python2.7/distutils/core.py", line 137, in setup 
    ok = dist.parse_command_line() 
    File "/usr/lib/python2.7/distutils/dist.py", line 467, in parse_command_line 
    args = self._parse_command_opts(parser, args) 
    File "/usr/lib/python2.7/distutils/dist.py", line 576, in _parse_command_opts 
    func() 
    File "/usr/local/lib/python2.7/dist-packages/numpy/distutils/command/config_compiler.py", line 15, in show_fortran_compilers 
    show_fcompilers(dist) 
    File "/usr/local/lib/python2.7/dist-packages/numpy/distutils/fcompiler/__init__.py", line 889, in show_fcompilers 
    c.customize(dist) 
    File "/usr/local/lib/python2.7/dist-packages/numpy/distutils/fcompiler/__init__.py", line 502, in customize 
    get_flags('opt', oflags) 
    File "/usr/local/lib/python2.7/dist-packages/numpy/distutils/fcompiler/__init__.py", line 493, in get_flags 
    flags.extend(getattr(self.flag_vars, tag)) 
    File "/usr/local/lib/python2.7/dist-packages/numpy/distutils/environment.py", line 39, in __getattr__ 
    return self._get_var(name, conf_desc) 
    File "/usr/local/lib/python2.7/dist-packages/numpy/distutils/environment.py", line 53, in _get_var 
    var = self._hook_handler(name, hook) 
    File "/usr/local/lib/python2.7/dist-packages/numpy/distutils/fcompiler/__init__.py", line 700, in _environment_hook 
    return hook() 
    File "/usr/local/lib/python2.7/dist-packages/numpy/distutils/fcompiler/gnu.py", line 206, in get_flags_opt 
    v = self.get_version() 
    File "/usr/local/lib/python2.7/dist-packages/numpy/distutils/fcompiler/__init__.py", line 432, in get_version 
    version = CCompiler.get_version(self, force=force, ok_status=ok_status) 
    File "/usr/local/lib/python2.7/dist-packages/numpy/distutils/ccompiler.py", line 491, in CCompiler_get_version 
    version = matcher(output) 
    File "/usr/local/lib/python2.7/dist-packages/numpy/distutils/fcompiler/gnu.py", line 79, in version_match 
    v = self.gnu_version_match(version_string) 
    File "/usr/local/lib/python2.7/dist-packages/numpy/distutils/fcompiler/gnu.py", line 76, in gnu_version_match 
    raise ValueError(err + version_string) 
ValueError: A valid Fortran version was not found in this string: 
invalid parameter -dumpversion 
+0

Что возвращает 'f2py -c -help-fcompiler'? Найдите «найденные компиляторы Fortran». – unutbu

+0

@unutbu спасибо за ваш интерес Я добавил результат в Edit 3 – Delosari

+0

Что вы получаете, когда запускаете 'f2py -c -help-fcompiler' из командной строки? И нужно ли запускать 'f2py' из сценария Python? Или вы просто хотите скомпилировать модуль 'add' любым способом? – unutbu

ответ

1

Пер с tutorial docs, простой способ использовать f2py, чтобы запустить из командной строки

f2py -c -m add add.f 

Это создает файл модуля add.so (или add.pyd, в зависимости от вашей операционной системы), которая может быть импортировано в сценарий Python с

import add 

при условии add.so находится в директории, указанной в sys.path.

1

f2py теперь поддерживается как часть numpy. Изменение вашего примера следующим образом компилируется просто отлично.

# import os 
# os.environ["CC"] = "gcc" 
# os.environ["CXX"] = "g++" 

# Using post-0.2.2 scipy_distutils to display fortran compilers 
from numpy.distutils.fcompiler import new_fcompiler 
compiler = new_fcompiler() # or new_fcompiler(compiler='intel') 
compiler.dump_properties() 

#Generate add.f wrapper 
from numpy import f2py 
with open("add.f") as sourcefile: 
    sourcecode = sourcefile.read() 
    print 'Fortran code' 
    print sourcecode 

# f2py.compile(sourcecode, modulename='add', extra_args = '--compiler=gnu --fcompiler=g$ 
f2py.compile(sourcecode, modulename='add', extra_args = '--fcompiler=gfortran') 
# f2py.compile(sourcecode, modulename='add') 

import add 
+0

Большое спасибо за ваш ответ: я использовал ваш импорт, но я все равно получаю очень похожую ошибку ... Он пытается использовать скрипт IRAF как компилятор. У вас есть какие-нибудь предложения ?.Я включил новое сообщение об ошибке в вопрос – Delosari

+0

Я никогда не использовал IRAF, но из вашего сообщения об ошибке и оглядываясь в Интернете, он, как представляется, содержит компилятор Fortran 77, и ваш путь указывает на этот компилятор для компиляции Fortran 77. Поскольку ваша программа могут быть скомпилированы с использованием более поздних версий Fortran, попробуйте изменить расширение add.f с .f на .f90. Вам нужно будет изменить расширение самого файла, а также его ссылку в вашем .py-файле. Кроме того, для того, чтобы ваша скомпилированная программа была пригодной для использования, я думаю, вам нужно будет внести в нее несколько изменений, но, возможно, это будет лучше обратиться к другому вопросу после того, как она будет, по крайней мере, скомпилирована. – jthomas

+0

Еще раз спасибо за ваше время ... Я пробовал свой код, но с расширением f90, и я все равно получаю ту же ошибку ... Прикольная вещь, когда я пытаюсь дать полный адрес для компилятора: --fcompiler =/usr/bin/gfortran Я получаю ошибку: «Не знаю, как скомпилировать код Fortran на платформе« posix »с компилятором«/usr/bin/gfortran ». msgstr "предупреждение: build_ext: f77_compiler =/usr/bin/gfortran недоступен." – Delosari