Gfortran无法编译NumPy

时间:2018-04-13 15:20:19

标签: python numpy scipy fortran gfortran

我正在开发一个需要SciPy,NumPy和scikit-learn的基于Raspberry的项目。我们需要将我们的虚拟环境打包在.deb中进行分发。为此,我们使用dh_virtualenv,到目前为止工作得很好。

当我在venv上安装我们的要求时,就像这样:

myvenv/bin/pip install numpy
myvenv/bin/pip install scipy
myvenv/bin/pip install sklearn

依赖关系安装得很好,尽管它们需要花费很长时间才能完成。

当我们尝试按照以下步骤制作包时出现问题:

mkdir myvenv-0.1
cd myvenv-0.1
dh_make --createorig
nano ./debian/rules

然后我找到" dh $ @"部分在编辑器中,我用这个

替换它
%:
    dh $@ --with python-virtualenv --python /path/to/myvenv/bin/python

然后我修改debian/control

nano ./debian/control

并填写:

Source: myvenv
Maintainer: My Name <mymail@mymail.com>
Build-Depends: debhelper (>= 9)
Standards-Version: 3.9.5
Homepage: <insert the upstream URL, if relevant>

Package: myvenv
Version: 0.1-1
Architecture: armhf
Pre-Depends: dpkg (>= 1.16.1), python2.7 | python2.6
Section: python
Priority: extra
Description: My Description

然后我冻结了我的要求:

/path/to/myvenv/bin/pip freeze > requirements.txt
纳米加入其中:

nano requirements.txt

然后我寻找myvenv需求行并删除它,否则venv需要自己,这会在以后打破整个过程(我知道这太好了。)

此时我为myvenv包生成了一个setup.py文件,该文件必须实现一个假的单元测试命令,因为dh_virtualenv默认尝试运行单元测试,并且禁用它们的标志不是没有工作。这是文件:

from distutils.core import setup
from distutils.cmd import Command


class TestCommand(Command):
  user_options=[]
  description = ''
  def initialize_options(self):
    pass

  def finalize_options(self):
    pass

  def run(self):
    self.announce('test')


setup(
      cmdclass={
             'test': TestCommand
      },
      name='myvenv',
      version='0.1',
      description='desc')

然后我导出需要安装myvenv的路径:

export DH_VIRTUALENV_INSTALL_ROOT=/path/

最后,我可以构建包,但我需要先提交,所以我做

dpkg-source --commit

我按字面意思给我的补丁任何名字然后按回车键,然后我:

dpkg-buildpackage -us -uc

这个程序运行得很好,直到现在我有一个python类自动执行此操作。

这些库也可以安装在venv本身上。

但是,无论出于何种原因,包装virtualenv只会导致gfortran爆炸。

错误回溯是巨大的,它基本上是这样结束的:

  File "/path/to/myvenv-0.1/debian/myvenv/path/to/myvenv/lib/python3.4/site-packages/setuptools/command/easy_install.py", line 1066, in run_setup

    raise DistutilsError("Setup script exited with %s" % (v.args[0],))

distutils.errors.DistutilsError: Setup script exited with error: Command "/usr/bin/gfortran -Wall -g -Wl,-z,relro build/temp.linux-armv7l-3.4/numpy/linalg/lapack_litemodule.o build/temp.linux-armv7l-3.4/numpy/linalg/lapack_lite/python_xerbla.o -L/usr/lib/atlas-base/atlas -L/usr/lib/atlas-base -L/usr/lib/gcc/arm-linux-gnueabihf/4.9 -L/usr/lib/gcc/arm-linux-gnueabihf/4.9 -Lbuild/temp.linux-armv7l-3.4 -llapack -lf77blas -lcblas -latlas -lf77blas -lcblas -lgfortran -o build/lib.linux-armv7l-3.4/numpy/linalg/lapack_lite.cpython-34m.so" failed with exit status 1



----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /tmp/pip-build-ouvtjhcw/scipy
Storing debug log for failure in /home/admin/.pip/pip.log
Traceback (most recent call last):
  File "/usr/bin/dh_virtualenv", line 85, in <module>
    sys.exit(main() or 0)
  File "/usr/bin/dh_virtualenv", line 67, in main
    deploy.install_dependencies()
  File "/usr/lib/python2.7/dist-packages/dh_virtualenv/deployment.py", line 112, in install_dependencies
    subprocess.check_call(self.pip('-r', requirements_path))
  File "/usr/lib/python2.7/subprocess.py", line 540, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['debian/myvenv/path/to/myvenv/bin/python', 'debian/myvenv/path/to/myvenv/bin/pip', 'install', '--log=/tmp/tmpRjP02B', '-r', './requirements.txt']' returned non-zero exit status 1
debian/rules:22: recipe for target 'binary' failed
make: *** [binary] Error 1
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2

进一步说它正在安装lapack_lite。抱歉,我不得不重新启动计算机,需要很长时间再次运行它。我只保留了最后一部分用于进一步的网络搜索(迄今为止没有发现任何内容。)

平台是Raspbian。 Python也是3.4.4版。 Pip是版本1.5.6

更新

经过45分钟的纯粹幸福之后,我还有另一个日志。我有整个事情。事实上,我必须put it on pastebin这么大。

1 个答案:

答案 0 :(得分:1)

TL; DR:使用piwheels。

我经历了很多努力解决这个问题,基本上我已经放弃了,直到我找到了piwheels。

它是合理的最新版本,也许你会得到scipy 1.0.0而不是1.0.1但真的,谁在乎。 它还可以大大减少打包你的静脉所需的时间。

只需在debian / rules文件中覆盖dh_virtualenv,如下所示:

[...]
override_dh_virtualenv:
    dh_virtualenv --python /path/to/myvenv/bin/python -v --extra-index-url https://www.piwheels.org/simple
%:
[...]