この記事の概要
- pythonの日本語処理ライブラリである
mojimoji
をpipenvでインストールしようとしたら失敗した。 -
sudo apt-get install python3-dev
してからやり直したら成功した。
症状
- OSはUbuntu16.04
- pythonは3.5
- 環境はpipenvで管理している。
pipenvでmojimojiをインストールしようとした。
command
$ pipenv install mojimoji
こんなエラーになった。
error
(hoge-1jnfWo2E) sabaku20XX@R7:~/Documents/hoge$ pipenv install mojimoji
Installing mojimoji...
Collecting mojimoji
Using cached https://files.pythonhosted.org/packages/6e/dd/b2fde54ecfd7f66e5a39ca0fd6245480af62e0d91dbe9d6a5d4551196e67/mojimoji-0.0.8.tar.gz
Building wheels for collected packages: mojimoji
Running setup.py bdist_wheel for mojimoji: started
Running setup.py bdist_wheel for mojimoji: finished with status 'error'
Complete output from command /home/sabaku20XX/.local/share/virtualenvs/hoge-1jnfWo2E/bin/python3.5m -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-_eyqujx6/mojimoji/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-_msrwezq --python-tag cp35:
running bdist_wheel
running build
running build_ext
building 'mojimoji' extension
creating build
creating build/temp.linux-x86_64-3.5
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.5m -I/home/sabaku20XX/.local/share/virtualenvs/hoge-1jnfWo2E/include/python3.5m -c mojimoji.cpp -o build/temp.linux-x86_64-3.5/mojimoji.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
mojimoji.cpp:4:20: fatal error: Python.h: No such file or directory
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
----------------------------------------
Running setup.py clean for mojimoji
Failed to build mojimoji
Installing collected packages: mojimoji
Running setup.py install for mojimoji: started
Running setup.py install for mojimoji: finished with status 'error'
Complete output from command /home/sabaku20XX/.local/share/virtualenvs/hoge-1jnfWo2E/bin/python3.5m -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-_eyqujx6/mojimoji/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-record-xtqn2oc_/install-record.txt --single-version-externally-managed --compile --install-headers /home/sabaku20XX/.local/share/virtualenvs/hoge-1jnfWo2E/include/site/python3.5/mojimoji:
running install
running build
running build_ext
building 'mojimoji' extension
creating build
creating build/temp.linux-x86_64-3.5
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.5m -I/home/sabaku20XX/.local/share/virtualenvs/hoge-1jnfWo2E/include/python3.5m -c mojimoji.cpp -o build/temp.linux-x86_64-3.5/mojimoji.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
mojimoji.cpp:4:20: fatal error: Python.h: No such file or directory
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
----------------------------------------
Error: An error occurred while installing mojimoji!
Failed building wheel for mojimoji
Command "/home/sabaku20XX/.local/share/virtualenvs/hoge-1jnfWo2E/bin/python3.5m -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-_eyqujx6/mojimoji/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-record-xtqn2oc_/install-record.txt --single-version-externally-managed --compile --install-headers /home/sabaku20XX/.local/share/virtualenvs/hoge-1jnfWo2E/include/site/python3.5/mojimoji" failed with error code 1 in /tmp/pip-install-_eyqujx6/mojimoji/
いろいろ書いてあるがmojimoji.cpp:4:20: fatal error: Python.h: No such file or directory
の部分に注目した。mojimoji内部のcppファイルが必要なファイルを見つけられなかったようだ。
対処
ここでpython3-dev
に含まれるパッケージの情報を見てみる。
これをインストールすれば良いのかも知れない。
- libpython3-dev (= 3.4.0-0ubuntu2)
header files and a static library for Python (default)
インストール
$ sudo apt-get install python3-dev
今度はうまく行った。
$ pipenv install mojimoji
Installing mojimoji...
Collecting mojimoji
Using cached https://files.pythonhosted.org/packages/6e/dd/b2fde54ecfd7f66e5a39ca0fd6245480af62e0d91dbe9d6a5d4551196e67/mojimoji-0.0.8.tar.gz
Building wheels for collected packages: mojimoji
Running setup.py bdist_wheel for mojimoji: started
Running setup.py bdist_wheel for mojimoji: finished with status 'done'
Stored in directory: /home/sabaku20XX/.cache/pipenv/wheels/dc/b6/da/975efa6e69b47502dacc80f5de51f73f07ee8a2d030c76a569
Successfully built mojimoji
Installing collected packages: mojimoji
Successfully installed mojimoji-0.0.8
Adding mojimoji to Pipfiles [packages]...
Pipfile.lock (506467) out of date, updating to (f78446)...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Updated Pipfile.lock (f78446)!
Installing dependencies from Pipfile.lock (f78446)...
🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 43/43 — 00:00:02
補足
-
mojimoji
はPython.h
が無いというエラーメッセージを出していた。 -
python3-dev
に含まれるlibpython3-dev
にheader files and a static library for Python
と書いてある。 - だから
python3-dev
をインストールすれば直るだろう。
このように推測してpython3-dev
をインストールしたが、本当にlibpython3-dev
にPython.h
が含まれているのか確認してみよう。
前にちょっと書いたが、/var/cache/apt/archives
にaptでインストールしたパッケージの.debファイルが残っている。
/var/cache/apt/archives$ sudo find . | grep libpython
./libpython3-dev_3.5.1-3_amd64.deb
./libpython3.5-dev_3.5.2-2ubuntu0~16.04.4_amd64.deb
-
dpkg --contents
コマンドでパッケージに含まれるファイルの一覧が出てくる。 - grepで
Python.h
を探す。
/var/cache/apt/archives$ dpkg --contents libpython3.5-dev_3.5.2-2ubuntu0~16.04.4_amd64.deb | grep Python.h
-rw-r--r-- root/root 2906 2017-11-29 01:51 ./usr/include/python3.5m/Python.h
あった。
Python.h
が無いと言われた時は、python3-dev
が無い可能性が高いという事がわかった。