blog.tmp.tokyo

No Promises Await at Journey's End

「ゼロから作るDeep Learning」をiPhoneのPythonistaだけで学ぶ(3)

前回記事で iPhone の部分は諦めると書いたのですが,どうしても諦めきれずに原因を探っています。

www.blog-tmp.tokyo

少し進展して,またつまづいています。ほとんど備忘録に近いですが,記録しておきます。

作業の方向性としては,NumPy の最新版を入れようと思います。前回までは自分で入れた NumPy を参照してもらえなくて古い方を見ているということを書きましたが,Pythonista3 のドキュメントやあちこち情報を調べていたらアプリを再起動すると pip で入れた NumPy の方も参照してくれます。外部ライブラリはアプリの再起動が必要な様子。

外部ライブラリの導入と失敗

まずは少し状況を整理するためにどうやって外部ライブラリを入れているか。

hitoriblog.com

この記事を参考に,StaSh という Pythonista3 上でコマンドラインであれこれ実行できるようになる機能を追加します。StaSh を入れると pip が使えるようになるので,

pip install numpy

とすれば NumPy がインストールされる,はずです。残念ながらここでつまづきます。

[~/Documents]$ pip install numpy
Querying PyPI ... 
Downloading package ...
Opening: https://pypi.python.org/packages/16/f5/b432f028134dd30cfbf6f21b8264a9938e5e0f75204e72453af08d67eb0b/numpy-1.11.2.tar.gz
Save as: /private/var/mobile/Containers/Data/Application/.../tmp/numpy-1.11.2.tar.gz (4178447 bytes)
   4178447  [100.00%]
Extracting archive file ...
Archive extracted.
Running setup file ...
Running from numpy source directory.

Note: if you need reliable uninstall behavior, then install
with pip instead of using `setup.py install`:

  - `pip install .`       (from a git repo or downloaded source
                           release)
  - `pip install numpy`   (last Numpy release on PyPi)


TypeError('can only concatenate list (not "OmniClass") to list',)
Failed to run setup.py
Fall back to directory guessing ...
Package installed: numpy

という感じ。最終行に Package installed: numpy とあるのでインストールできたように見えますが,少し上にエラーが出ています。実際はある程度ものがダウンロードされてきているので中途半端に終わった感じですね。この状態で Pythonista3 の console からプログラムを実行してみます。

>> import numpy as np

と実行すると,

Traceback (most recent call last):
  File "/private/var/mobile/Containers/Shared/AppGroup/.../Pythonista3/Documents/site-packages/numpy/__init__.py", line 126, in <module>
    from numpy.__config__ import show as show_config
ImportError: No module named 'numpy.__config__'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/private/var/mobile/Containers/Shared/AppGroup/.../Pythonista3/Documents/site-packages/numpy/__init__.py", line 131, in <module>
    raise ImportError(msg)
ImportError: Error importing numpy: you should not try to import numpy from
        its source directory; please exit the numpy source tree, and relaunch
        your python interpreter from there.

というエラーを吐きます。少し落ち着いて考えてみたのですが,pip でのインストールで,TypeError('can only concatenate list (not "OmniClass") to list',) という行があります。これは連結の処理で list と list じゃないと繋がらないぜ,と言っていて変なものを list と繋げようとしているみたいな感じです。これは完全にバグな気がしたので,StaSh の GitHub のサイトを見てみることにしました。

pip.py の修正

ここを見てみました。

github.com

英語。ハワイで 4 日間日本語だけで過ごした驚異の語学力の持ち主としては少しハードルが高いのですが,issue というところに問題などが挙がっていることを期待します。

github.com

あった。世の中,同じ問題に苦しむ人がいるのです。世界のどこかの見知らぬ人ですが,先人の知恵を拝借することにします。読み進めると pip.py のソースを直接修正するようなことが書いてあります。

class OmniClass(object):

というクラスの定義を,

class OmniClass(list):

とせよ,とのことです。修正して,注意点としては Pythonista3 のアプリを再起動します。そのあとに StaSh から再度実行。

[~/Documents]$ pip install numpy
Querying PyPI ... 
Downloading package ...
Opening: https://pypi.python.org/packages/16/f5/b432f028134dd30cfbf6f21b8264a9938e5e0f75204e72453af08d67eb0b/numpy-1.11.2.tar.gz
Save as: /private/var/mobile/Containers/Data/Application/.../tmp/numpy-1.11.2.tar.gz (4178447 bytes)
   4178447  [100.00%]
Extracting archive file ...
Archive extracted.
Running setup file ...
Running from numpy source directory.

Note: if you need reliable uninstall behavior, then install
with pip instead of using `setup.py install`:

  - `pip install .`       (from a git repo or downloaded source
                           release)
  - `pip install numpy`   (last Numpy release on PyPi)


DistutilsPlatformError('invalid Python installation: unable to open /var/containers/Bundle/Application/.../Pythonista3.app/Frameworks/PythonistaKit.framework/pylib/lib/python2.7/config/Makefile (No such file or directory)',)
Failed to run setup.py
Fall back to directory guessing ...
Package installed: numpy

またエラーが。ただ前回とは違うエラーになりました。今度は Makefile がないとか言ってます。まだまだ前途多難ですが,もう少し調べてみることにします。