hack のためのネタ帳, etc,,,

Cygwin に公式 package がなかったので pip 経由で install を試みた。
まず、python3 を install した。
$ apt-cyg install python3
...
$ python3 --version
Python 3.4.5
pip は公式 package 化されてないのだが、以下の Wikipedia の記事によれば Python 3.4 以降ではデフォルトで付属しているらしい。
  • Wikipedia / Pip
上記の通り、本日 2016-12-29 現在の Cygwin 公式 package は以下の通り 3.4.5 なんだけど、pip は動作しない。
検索してみると以下の blog が見つかった。 どうも -m オプションで library module として付属している ensurepip をスクリプトとして実行してやれば良いらしい。
使い方は以下の通り。
$ python3 -m ensurepip --help
usage: python -m ensurepip [-h] [--version] [-v] [-U] [--user] [--root ROOT]
                           [--altinstall] [--default-pip]

optional arguments:
  -h, --help     show this help message and exit
  --version      Show the version of pip that is bundled with this Python.
  -v, --verbose  Give more output. Option is additive, and can be used up to 3
                 times.
  -U, --upgrade  Upgrade pip and dependencies, even if already installed.
  --user         Install using the user scheme.
  --root ROOT    Install everything relative to this alternate root directory.
  --altinstall   Make an alternate install, installing only the X.Y
                 versionedscripts (Default: pipX, pipX.Y, easy_install-X.Y)
  --default-pip  Make a default pip install, installing the unqualified pip
                 and easy_install in addition to the versioned scripts
$ python3 -m ensurepip
Ignoring indexes: https://pypi.python.org/simple
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-8.1.1 setuptools-20.10.1
見ての通り setuptools と pip が導入されたのだが、これは付属とは言わない気がするのだが???

続いて、本題の matplotlib の install
$ pip3 install matplotlib
Collecting matplotlib
  Using cached matplotlib-1.5.3.tar.gz
    Complete output from command python setup.py egg_info:
    IMPORTANT WARNING:
        pkg-config is not installed.
        matplotlib may not be able to find some of its dependencies
    ============================================================================
    Edit setup.cfg to change the build options

    BUILDING MATPLOTLIB
                matplotlib: yes [1.5.3]
                    python: yes [3.4.5 (default, Oct 10 2016, 14:41:48)  [GCC
                            5.4.0]]
                  platform: yes [cygwin]

    REQUIRED DEPENDENCIES AND EXTENSIONS
                     numpy: yes [not found. pip may install it below.]
                  dateutil: yes [dateutil was not found. It is required for date
                            axis support. pip/easy_install may attempt to
                            install it after matplotlib.]
                      pytz: yes [pytz was not found. pip will attempt to install
                            it after matplotlib.]
                    cycler: yes [cycler was not found. pip will attempt to
                            install it after matplotlib.]
                   tornado: yes [tornado was not found. It is required for the
                            WebAgg backend. pip/easy_install may attempt to
                            install it after matplotlib.]
                 pyparsing: yes [pyparsing was not found. It is required for
                            mathtext support. pip/easy_install may attempt to
                            install it after matplotlib.]
                    libagg: yes [pkg-config information for 'libagg' could not
                            be found. Using local copy.]
                  freetype: no  [The C/C++ header for freetype2 (ft2build.h)
                            could not be found.  You may need to install the
                            development package.]
                       png: no  [pkg-config information for 'libpng' could not
                            be found.]
                     qhull: yes [pkg-config information for 'qhull' could not be
                            found. Using local copy.]

    OPTIONAL SUBPACKAGES
               sample_data: yes [installing]
                  toolkits: yes [installing]
                     tests: yes [nose 0.11.1 or later is required to run the
                            matplotlib test suite. Please install it with pip or
                            your preferred tool to run the test suite / using
                            unittest.mock]
            toolkits_tests: yes [nose 0.11.1 or later is required to run the
                            matplotlib test suite. Please install it with pip or
                            your preferred tool to run the test suite / using
                            unittest.mock]

    OPTIONAL BACKEND EXTENSIONS
                    macosx: no  [Mac OS-X only]
                    qt5agg: no  [PyQt5 not found]
                    qt4agg: no  [PySide not found; PyQt4 not found]
                   gtk3agg: no  [Requires pygobject to be installed.]
                 gtk3cairo: no  [Requires cairocffi or pycairo to be installed.]
                    gtkagg: no  [Requires pygtk]
                     tkagg: yes [installing; run-time loading from Python Tcl /
                            Tk]
                     wxagg: no  [requires wxPython]
                       gtk: no  [Requires pygtk]
                       agg: yes [installing]
                     cairo: no  [cairocffi or pycairo not found]
                 windowing: no  [Microsoft Windows only]

    OPTIONAL LATEX DEPENDENCIES
                    dvipng: no
               ghostscript: no
                     latex: no
                   pdftops: no

    OPTIONAL PACKAGE DATA
                      dlls: no  [skipping due to configuration]

    ============================================================================
                            * The following required packages can not be built:
                            * freetype, png

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-pseyx_0h/matplotlib/
You are using pip version 8.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
required packages である freetype, png がないので build 出来ないと言われる。
これは、以下のようにして解決しておいた。
$ apt-cyg install libfreetype-devel libpng-devel python3-devel

また、上記の blog で報告されているのと同様で、ensurepip で install された pip が最新版じゃないので、upgrade を考慮すべきと警告が出る。
ensurepip には -U オプションがあるのだが、どうも 8.1.1 を名指しているらしく、最新版に upgrade はされないようだ。
pip に表示された指示に従い、以下のようにすれば pip を upgrade 出来た。
$ pip3 install --upgrade pip
Collecting pip
  Using cached pip-9.0.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 8.1.1
    Uninstalling pip-8.1.1:
      Successfully uninstalled pip-8.1.1
Successfully installed pip-9.0.1

build には当然 gcc が必要で、入ってない場合は以下のようにエラーが出る。
$ pip3 install matplotlib
...
      File "numpy/core/setup.py", line 665, in get_mathlib_info
    RuntimeError: Broken toolchain: cannot link a simple C program
    sh: gcc: コマンドがè‹ã¤ã‹ã‚Šã¾ã›ã‚“

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-ha3xej_j/matplotlib/
同様に python3-devel も必要であり、入ってない場合は以下のようにエラーが出る。
$ pip3 install matplotlib
...
      File "numpy/core/setup.py", line 275, in check_types
        zip_safe=False,
    SystemError: Cannot compile 'Python.h'. Perhaps you need to install python-dev|python-devel.
    _configtest.c:1:20: 致命的エラー: Python.h: No such file or directory
    コンパイルを停止しました。

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-ha3xej_j/matplotlib/
以上の解決は
$ apt-cyg install gcc-core python3-devel
更に、
$ pip3 install matplotlib
...
    numpy/core/src/multiarray/numpyos.c:18:21: 致命的エラー: xlocale.h: No such file or directory
    コンパイルを停止しました。

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-e03214gb/matplotlib/
となり、これは以下のようにすれば見つかる。
$ cygcheck -p /xlocale.h
Found 4 matches for /xlocale.h
libwx_gtk2u3.0-devel-3.0.2.0-1 - libwx_gtk2u3.0-devel: wxWidgets C++ application framework (development) (installed binaries and support files)
libwx_gtk2u3.0-devel-3.0.2.0-2 - libwx_gtk2u3.0-devel: wxWidgets C++ application framework (development) (installed binaries and support files)
mingw64-i686-wxWidgets3.0-3.0.2.0-3 - mingw64-i686-wxWidgets3.0: wxWidgets C++ application framework for Win32 toolchain (installed binaries and support files)
mingw64-x86_64-wxWidgets3.0-3.0.2.0-3 - mingw64-x86_64-wxWidgets3.0: wxWidgets C++ application framework for Win64 toolchain (installed binaries and support files)
これは wxWidget 周りの devel がごっそり入るのでかなり依存関係が多く install に 15 分近く要した。
$ apt-cyg install libwx_gtk2u3.0-devel
ところが、/usr/include/wx-3.0/wx/xlocale.h には INCLUDE パスが通らないらしく、上記のエラーは解決されない。

よく見ると numpy の build で躓いているみたいだ。
numpy は required packages だけど pip が自動で入れるみたいだからまかせとこうと思ったんだけど、変な所で躓いてる。
と言う事で、Cygwin 公式 package として python3-numpy が用意されてるのでこっちを使ってみる。
その依存関係で python3-setuptools も用意されているんだけど Cygwin 公式 package の python3-setuptools は 15.2 なので ensurepip で入った 20.10.1 と比べると若干古いのだが、一発で最新版 pip は入るし、特に警告も出ないので、こちらを使った方が時短で install になるだろう。
$ apt-cyg install python3-numpy
すると今度は以下のようになった。
$ pip3 install matplotlib
...
    running build_ext
    building 'matplotlib.ft2font' extension
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-md4ox6eo/matplotlib/setup.py", line 277, in <module>
        **extra_args
      File "/usr/lib/python3.4/distutils/core.py", line 148, in setup
        dist.run_commands()
      File "/usr/lib/python3.4/distutils/dist.py", line 955, in run_commands
        self.run_command(cmd)
      File "/usr/lib/python3.4/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/usr/lib/python3.4/site-packages/setuptools/command/install.py", lin                                     e 61, in run
        return orig.install.run(self)
      File "/usr/lib/python3.4/distutils/command/install.py", line 539, in run
        self.run_command('build')
      File "/usr/lib/python3.4/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/usr/lib/python3.4/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/usr/lib/python3.4/distutils/command/build.py", line 126, in run
        self.run_command(cmd_name)
      File "/usr/lib/python3.4/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/usr/lib/python3.4/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/usr/lib/python3.4/site-packages/setuptools/command/build_ext.py", l                                     ine 50, in run
        _build_ext.run(self)
      File "/usr/lib/python3.4/distutils/command/build_ext.py", line 339, in run
        self.build_extensions()
      File "/usr/lib/python3.4/distutils/command/build_ext.py", line 448, in bui                                     ld_extensions
        self.build_extension(ext)
      File "/usr/lib/python3.4/site-packages/setuptools/command/build_ext.py", l                                     ine 183, in build_extension
        _build_ext.build_extension(self, ext)
      File "/usr/lib/python3.4/distutils/command/build_ext.py", line 500, in bui                                     ld_extension
        include_dirs=ext.include_dirs,
      File "/tmp/pip-build-md4ox6eo/matplotlib/setupext.py", line 793, in __get_                                     _
        result = obj._hooks[self._name]() + result
      File "/tmp/pip-build-md4ox6eo/matplotlib/setupext.py", line 813, in includ                                     e_dirs_hook
        import numpy
      File "/usr/lib/python3.4/site-packages/numpy/__init__.py", line 170, in <m                                     odule>
        from . import add_newdocs
      File "/usr/lib/python3.4/site-packages/numpy/add_newdocs.py", line 13, in                                      <module>
        from numpy.lib import add_newdoc
      File "/usr/lib/python3.4/site-packages/numpy/lib/__init__.py", line 17, in                                      <module>
        from . import scimath as emath
    ImportError: cannot import name 'scimath'

    ----------------------------------------
Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-                                     build-md4ox6eo/matplotlib/setup.py';f=getattr(tokenize, 'open', open)(__file__);                                     code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec                                     '))" install --record /tmp/pip-4g8lb6_c-record/install-record.txt --single-versi                                     on-externally-managed --compile" failed with error code 1 in /tmp/pip-build-md4o                                     x6eo/matplotlib/

最後のは REQUIRED DEPENDENCIES AND EXTENSIONS には表示のなかった scimath に依存していて、躓いているように見える。
しかしこれは、cygwin 公式 package 存在しない。
仕方ないので pip で入れてみると以下のように躓く。
$ pip3 install scimath
Collecting scimath
  Downloading scimath-4.1.2.tar.gz (84kB)
    100% |&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;| 92kB 581kB/s
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-t2tygx61/scimath/setup.py", line 9, in <module>
        import numpy.distutils.core
      File "/usr/lib/python3.4/site-packages/numpy/__init__.py", line 170, in <module>
        from . import add_newdocs
      File "/usr/lib/python3.4/site-packages/numpy/add_newdocs.py", line 13, in <module>
        from numpy.lib import add_newdoc
      File "/usr/lib/python3.4/site-packages/numpy/lib/__init__.py", line 18, in <module>
        from .polynomial import *
      File "/usr/lib/python3.4/site-packages/numpy/lib/polynomial.py", line 19, in <module>
        from numpy.linalg import eigvals, lstsq, inv
      File "/usr/lib/python3.4/site-packages/numpy/linalg/__init__.py", line 51, in <module>
        from .linalg import *
      File "/usr/lib/python3.4/site-packages/numpy/linalg/linalg.py", line 29, in <module>
        from numpy.linalg import lapack_lite, _umath_linalg
    ImportError: No such file or directory

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-t2tygx61/scimath/
lapack_lite で躓いているように見えるけど、なんだこれ!?
ググってみると以下のページが見つかった。 どうも liblapack-0.dll に PATH が通ってないんだって。
python3-numpy の依存関係で入った liblapack0 覗いて見てみたら、/etc/profile.d/lapack0.sh なんてのが入ってて、要するに、shell 再起動して profile.d 処理しないと /usr/lib/lapack に PATH が通らんという事らしい。
とりあえず、以下のようにして読み込み。
source /etc/profile.d/lapack0.sh
そうするとこうなった
$ pip3 install scimath
Collecting scimath
  Using cached scimath-4.1.2.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-z8xpui7l/scimath/setup.py", line 13, in <module>
        execfile(join('scimath', '__init__.py'), info)
    NameError: name 'execfile' is not defined

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-z8xpui7l/scimath/
これは以下かな? Python3 では execfile() じゃなくて exec() になったって、どうしろと!?

コメントをかく


ユーザーIDでかく場合はこちら

画像に記載されている文字を下のフォームに入力してください。

「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

編集にはIDが必要です