2017-06-24 255 views
0

我正在嘗試構建一個Docker應用程序,該應用程序使用Python的gensim庫2.1.0版,該應用程序通過來自requirements.txt文件的pip進行安裝。Docker無法安裝numpy,scipy或gensim

但是,Docker似乎無法安裝numpy,scipy和gensim。我搜索了錯誤消息,發現了其他遇到同樣問題的用戶,但在其他環境中。他們的許多解決方案在Docker中似乎都不起作用。

以下是錯誤消息:

<pre> Step 4 : RUN pip install -r requirements.txt 
---> Running in a86d07e229d7 
Collecting Flask==0.12 (from -r requirements.txt (line 1)) 
    Downloading Flask-0.12-py2.py3-none-any.whl (82kB) 
Collecting requests==2.17.3 (from -r requirements.txt (line 2)) 
    Downloading requests-2.17.3-py2.py3-none-any.whl (87kB) 
Collecting numpy==1.12.1 (from -r requirements.txt (line 3)) 
    Downloading numpy-1.12.1.zip (4.8MB) 
Collecting nltk==3.2.2 (from -r requirements.txt (line 4)) 
    Downloading nltk-3.2.2.tar.gz (1.2MB) 
Collecting scipy==0.19.0 (from -r requirements.txt (line 5)) 
    Downloading scipy-0.19.0.zip (15.3MB) 
    Complete output from command python setup.py egg_info: 
    /bin/sh: svnversion: not found 
    /bin/sh: svnversion: not found 
    non-existing path in 'numpy/distutils': 'site.cfg' 
    Could not locate executable gfortran 
    Could not locate executable f95 
    Could not locate executable ifort 
    Could not locate executable ifc 
    Could not locate executable lf95 
    Could not locate executable pgfortran 
    Could not locate executable f90 
    Could not locate executable f77 
    Could not locate executable fort 
    Could not locate executable efort 
    Could not locate executable efc 
    Could not locate executable g77 
    Could not locate executable g95 
    Could not locate executable pathf95 
    don't know how to compile Fortran code on platform 'posix' 
    Running from numpy source directory. 
    /tmp/easy_install-ocgjhe9m/numpy-1.13.0/setup.py:367: UserWarning: Unrecognized setuptools command, proceeding with generating Cython sources and expanding templates 
     run_build = parse_setuppy_commands() 
    /tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/system_info.py:572: UserWarning: 
     Atlas (http://math-atlas.sourceforge.net/) libraries not found. 
     Directories to search for the libraries can be specified in the 
     numpy/distutils/site.cfg file (section [atlas]) or by setting 
     the ATLAS environment variable. 
     self.calc_info() 
    /tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/system_info.py:572: UserWarning: 
     Blas (http://www.netlib.org/blas/) libraries not found. 
     Directories to search for the libraries can be specified in the 
     numpy/distutils/site.cfg file (section [blas]) or by setting 
     the BLAS environment variable. 
     self.calc_info() 
    /tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/system_info.py:572: UserWarning: 
     Blas (http://www.netlib.org/blas/) sources not found. 
     Directories to search for the sources can be specified in the 
     numpy/distutils/site.cfg file (section [blas_src]) or by setting 
     the BLAS_SRC environment variable. 
     self.calc_info() 
    /tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/system_info.py:572: UserWarning: 
     Lapack (http://www.netlib.org/lapack/) libraries not found. 
     Directories to search for the libraries can be specified in the 
     numpy/distutils/site.cfg file (section [lapack]) or by setting 
     the LAPACK environment variable. 
     self.calc_info() 
    /tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/system_info.py:572: UserWarning: 
     Lapack (http://www.netlib.org/lapack/) sources not found. 
     Directories to search for the sources can be specified in the 
     numpy/distutils/site.cfg file (section [lapack_src]) or by setting 
     the LAPACK_SRC environment variable. 
     self.calc_info() 
    /usr/local/lib/python3.5/distutils/dist.py:261: UserWarning: Unknown distribution option: 'define_macros' 
     warnings.warn(msg) 
    Traceback (most recent call last): 
     File "/usr/local/lib/python3.5/site-packages/setuptools/sandbox.py", line 158, in save_modules 
     yield saved 
     File "/usr/local/lib/python3.5/site-packages/setuptools/sandbox.py", line 199, in setup_context 
     yield 
     File "/usr/local/lib/python3.5/site-packages/setuptools/sandbox.py", line 254, in run_setup 
     _execfile(setup_script, ns) 
     File "/usr/local/lib/python3.5/site-packages/setuptools/sandbox.py", line 48, in _execfile 
     exec(code, globals, locals) 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/setup.py", line 392, in <module> 
     # higher up in this file. 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/setup.py", line 384, in setup_package 
     if "--force" in sys.argv: 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/core.py", line 169, in setup 
     File "/usr/local/lib/python3.5/distutils/core.py", line 148, in setup 
     dist.run_commands() 
     File "/usr/local/lib/python3.5/distutils/dist.py", line 955, in run_commands 
     self.run_command(cmd) 
     File "/usr/local/lib/python3.5/distutils/dist.py", line 974, in run_command 
     cmd_obj.run() 
     File "/usr/local/lib/python3.5/site-packages/setuptools/command/bdist_egg.py", line 152, in run 
     self.run_command("egg_info") 
     File "/usr/local/lib/python3.5/distutils/cmd.py", line 313, in run_command 
     self.distribution.run_command(command) 
     File "/usr/local/lib/python3.5/distutils/dist.py", line 974, in run_command 
     cmd_obj.run() 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/command/egg_info.py", line 26, in run 
     File "/usr/local/lib/python3.5/distutils/cmd.py", line 313, in run_command 
     self.distribution.run_command(command) 
     File "/usr/local/lib/python3.5/distutils/dist.py", line 974, in run_command 
     cmd_obj.run() 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/command/build_src.py", line 148, in run 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/command/build_src.py", line 159, in build_sources 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/command/build_src.py", line 294, in build_library_sources 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/command/build_src.py", line 377, in generate_sources 
     File "numpy/core/setup.py", line 674, in get_mathlib_info 
    RuntimeError: Broken toolchain: cannot link a simple C program 

    During handling of the above exception, another exception occurred: 

    Traceback (most recent call last): 
     File "<string>", line 1, in <module> 
     File "/tmp/pip-build-j8py_tat/scipy/setup.py", line 416, in <module> 
     setup_package() 
     File "/tmp/pip-build-j8py_tat/scipy/setup.py", line 412, in setup_package 
     setup(**metadata) 
     File "/usr/local/lib/python3.5/distutils/core.py", line 108, in setup 
     _setup_distribution = dist = klass(attrs) 
     File "/usr/local/lib/python3.5/site-packages/setuptools/dist.py", line 320, in __init__ 
     self.fetch_build_eggs(attrs['setup_requires']) 
     File "/usr/local/lib/python3.5/site-packages/setuptools/dist.py", line 377, in fetch_build_eggs 
     replace_conflicting=True, 
     File "/usr/local/lib/python3.5/site-packages/pkg_resources/__init__.py", line 852, in resolve 
     dist = best[req.key] = env.best_match(req, ws, installer) 
     File "/usr/local/lib/python3.5/site-packages/pkg_resources/__init__.py", line 1124, in best_match 
     return self.obtain(req, installer) 
     File "/usr/local/lib/python3.5/site-packages/pkg_resources/__init__.py", line 1136, in obtain 
     return installer(requirement) 
     File "/usr/local/lib/python3.5/site-packages/setuptools/dist.py", line 445, in fetch_build_egg 
     return cmd.easy_install(req) 
     File "/usr/local/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 673, in easy_install 
     return self.install_item(spec, dist.location, tmpdir, deps) 
     File "/usr/local/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 699, in install_item 
     dists = self.install_eggs(spec, download, tmpdir) 
     File "/usr/local/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 880, in install_eggs 
     return self.build_and_install(setup_script, setup_base) 
     File "/usr/local/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 1119, in build_and_install 
     self.run_setup(setup_script, setup_base, args) 
     File "/usr/local/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 1105, in run_setup 
     run_setup(setup_script, args) 
     File "/usr/local/lib/python3.5/site-packages/setuptools/sandbox.py", line 257, in run_setup 
     raise 
     File "/usr/local/lib/python3.5/contextlib.py", line 77, in __exit__ 
     self.gen.throw(type, value, traceback) 
     File "/usr/local/lib/python3.5/site-packages/setuptools/sandbox.py", line 199, in setup_context 
     yield 
     File "/usr/local/lib/python3.5/contextlib.py", line 77, in __exit__ 
     self.gen.throw(type, value, traceback) 
     File "/usr/local/lib/python3.5/site-packages/setuptools/sandbox.py", line 170, in save_modules 
     saved_exc.resume() 
     File "/usr/local/lib/python3.5/site-packages/setuptools/sandbox.py", line 145, in resume 
     six.reraise(type, exc, self._tb) 
     File "/usr/local/lib/python3.5/site-packages/pkg_resources/_vendor/six.py", line 685, in reraise 
     raise value.with_traceback(tb) 
     File "/usr/local/lib/python3.5/site-packages/setuptools/sandbox.py", line 158, in save_modules 
     yield saved 
     File "/usr/local/lib/python3.5/site-packages/setuptools/sandbox.py", line 199, in setup_context 
     yield 
     File "/usr/local/lib/python3.5/site-packages/setuptools/sandbox.py", line 254, in run_setup 
     _execfile(setup_script, ns) 
     File "/usr/local/lib/python3.5/site-packages/setuptools/sandbox.py", line 48, in _execfile 
     exec(code, globals, locals) 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/setup.py", line 392, in <module> 
     # higher up in this file. 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/setup.py", line 384, in setup_package 
     if "--force" in sys.argv: 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/core.py", line 169, in setup 
     File "/usr/local/lib/python3.5/distutils/core.py", line 148, in setup 
     dist.run_commands() 
     File "/usr/local/lib/python3.5/distutils/dist.py", line 955, in run_commands 
     self.run_command(cmd) 
     File "/usr/local/lib/python3.5/distutils/dist.py", line 974, in run_command 
     cmd_obj.run() 
     File "/usr/local/lib/python3.5/site-packages/setuptools/command/bdist_egg.py", line 152, in run 
     self.run_command("egg_info") 
     File "/usr/local/lib/python3.5/distutils/cmd.py", line 313, in run_command 
     self.distribution.run_command(command) 
     File "/usr/local/lib/python3.5/distutils/dist.py", line 974, in run_command 
     cmd_obj.run() 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/command/egg_info.py", line 26, in run 
     File "/usr/local/lib/python3.5/distutils/cmd.py", line 313, in run_command 
     self.distribution.run_command(command) 
     File "/usr/local/lib/python3.5/distutils/dist.py", line 974, in run_command 
     cmd_obj.run() 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/command/build_src.py", line 148, in run 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/command/build_src.py", line 159, in build_sources 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/command/build_src.py", line 294, in build_library_sources 
     File "/tmp/easy_install-ocgjhe9m/numpy-1.13.0/numpy/distutils/command/build_src.py", line 377, in generate_sources 
     File "numpy/core/setup.py", line 674, in get_mathlib_info 
    RuntimeError: Broken toolchain: cannot link a simple C program 
    /bin/sh: gcc: not found 
    /bin/sh: gcc: not found 

    ---------------------------------------- 
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-j8py_tat/scipy/ 
Removing intermediate container a86d07e229d7 
The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 1 </pre> 

我使用的python:3.5-alpine圖像。軟件包的版本爲numpy==1.12.1,scipy==0.19.0gensim==2.1.0

+0

看起來你需要'gcc'才能正常工作。在你的蹤跡中有一個提到:'/ bin/sh:gcc:not found'。在dockerfile中添加一個圖層以確保安裝了'gcc'。確保在執行Python包安裝之前將該圖層放置在*之前。 – idjaw

+0

有人提到,以確保你有一個更新的點子以及。您可以使用堆棧跟蹤中的不同錯誤查找解決方案的解決方法,並且可以將其應用於dockerfile以確保處理必要的案例。 – idjaw

+1

在som情況下,在高山形象'pip'構建C模塊而不是使用二進制版本。有時它有助於在之前運行'pip install -U pip'。 –

回答

1

要安裝numpy的,SciPy的,或gensim,以下行需要RUN pip install -r requirements.txt之前加入到Dockerfile:

RUN apt-get -y install libc-dev 
RUN apt-get -y install build-essential 
RUN pip install -U pip 

前兩行安裝庫所需的C編譯工具。 tihrd行將pip升級到最新的可用版本。

+0

從我看過的其他文章中,你可能需要: RUN set -x \ && apk add --no-cache build-base \ && apk add --no-cache libexecinfo-dev – cs94njw