我正在尝试安装一个名为mtspec
的python包,它是一些Fortran 90代码的包装器。 (链接:https://pypi.python.org/pypi/mtspec)。但是,这个软件包相当陈旧(最后一次更新于2010年),我无法使用setup.py
脚本在Mac OSX 10.10.5上正确编译代码。由于setup.py
中的一些明显变化,我不得不自己破解distutils
脚本。最初,setup.py
中的第48行看起来像这样:
from distutils.unixccompiler import UnixCCompiler, _darwin_compiler_fixup
我改为
from distutils.unixccompiler import UnixCCompiler#, _darwin_compiler_fixup
from _osx_support import compiler_fixup as _darwin_compiler_fixup
如果没有这个,setup.py
只会抛出异常cannot import name _darwin_compiler_fixup
。我对distutils
了解不多,所以请告诉我这是不是错了。但是在更改之后它至少会尝试编译代码。但是,gfortran
现在会抛出以下错误:
/var/folders/vt/9jwlypbs5rz8hy6d_h02pg8xg967kg/T//ccm4Gy5y.s:25:suffix or operands invalid for `movq'
/var/folders/vt/9jwlypbs5rz8hy6d_h02pg8xg967kg/T//ccm4Gy5y.s:27:suffix or operands invalid for `movq'
/var/folders/vt/9jwlypbs5rz8hy6d_h02pg8xg967kg/T//ccm4Gy5y.s:28:suffix or operands invalid for `movq'
/var/folders/vt/9jwlypbs5rz8hy6d_h02pg8xg967kg/T//ccm4Gy5y.s:34:suffix or operands invalid for `movq'
/var/folders/vt/9jwlypbs5rz8hy6d_h02pg8xg967kg/T//ccm4Gy5y.s:79:suffix or operands invalid for `movq'
/var/folders/vt/9jwlypbs5rz8hy6d_h02pg8xg967kg/T//ccm4Gy5y.s:115:suffix or operands invalid for `movq'
我对Fortran不是很有经验,所以我不知道这意味着什么,并且在StackOverflow和Google上搜索没有找到任何解决这个问题的方法。我在另一个网站上看到的一条建议(不记得我在哪里看到这个)建议删除-O
编译器标志,但这会使问题变得更糟;错误更频繁地被抛出。在setup.py
虚拟环境中运行conda
也无济于事。我现在不知道该做什么。我之前已经在Cray Linux和Red Hat Linux上安装了这个软件包,只需在setup.py
中简单地注释掉所有对Darwin的引用;只有Mac才给我带来麻烦。
如果它有帮助,这里是配置编译器的setup.py
中的代码块:
from distutils.unixccompiler import UnixCCompiler#, _darwin_compiler_fixup
from _osx_support import compiler_fixup as _darwin_compiler_fixup
# Monkey patch UnixCCompiler for Unix, Linux and darwin
UnixCCompiler.src_extensions.append(".f90")
def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts):
compiler_so = self.compiler_so
if sys.platform == 'darwin':
compiler_so = _darwin_compiler_fixup(compiler_so, cc_args + extra_postargs)
if ext == ".f90":
if sys.platform == 'darwin' or sys.platform == 'linux2':
compiler_so = ["gfortran"]
cc_args = ["-O", "-fPIC", "-c", "-ffree-form"]
try:
self.spawn(compiler_so + cc_args + [src, '-o', obj] + extra_postargs)
except DistutilsExecError, msg:
raise CompileError, msg
UnixCCompiler._compile = _compile
# set library dir for mac and linux
libs=['gfortran']
答案 0 :(得分:4)
因为你提到它只会给Mac造成麻烦。可能是你的机器上安装了macports和homebrew吗?
我遇到了编译不同库的相同错误,以下链接为我解决了这个问题:https://github.com/Homebrew/legacy-homebrew/issues/45258
删除macports后(例如sudo mv / opt / local~ / macport)一切正常。