LoginSignup
5
8

More than 3 years have passed since last update.

sudoなしでpyenvでpythonビルド

Last updated at Posted at 2018-09-06

 環境

Ubuntu16.04

pyenv

[pyenv]はいろいろなpythonのバージョンを切り分けられる便利なツール.公式にサポートされているvenvがライブラリの切り分けツールとしてはスタンダートなのだろうが,なんだかんだ言って任意のバージョンをとってこれたり,pyenv localなどが使えるのは結構便利で使っている.
pipenvもpythonの自動インストールにはpyenvを利用している.
しかしpyenvはpythonをビルドするので,ちゃんとビルドに必要なツールがそろっている必要がある.ここでsudoがないと公式チュートリアルに従えない.
具体的には

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev

推奨されているが,sudoがないとpyenvが自動的に見つけてくれるデフォルトの位置にライブラリを配置できない.

自分の場合

WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?

なるエラーが出てきてしまい.最初は無視していたが,jupyter notebookを使うときに,sqlite3関連のエラーが出てきて困ってしまった.

解決策

https://github.com/pyenv/pyenv/issues/333
を参考に,ライブラリを書き込み権限がある場所において,パスを通してセットアップするようにした.
まずライブラリを以下のような手順で書き込み権限のあるところでビルドする.

apt-get source {package_name}
cd {package_folder}
./configure --prefix={インストール用のパス}
make
make install

自分はlibbz2-dev libreadline-dev libsqlite3-devの三つを入れたら大丈夫だった.
configureがない場合もあるので,その場合はMakefileのprefixを直接いじる.bzipはmakefileしかなかった.

以上のようにして必要なライブラリを好きな場所でビルドすれば以下のような手順でpythonをpyenvでビルドできるようになる.

PYTHON_CONFIGURE_OPTS="LDFLAGS=-L{インストール用のパス}/lib CFLAGS=-L{インストール用のパス}/include CPPF
LAGS=-L{インストール用のパス}/include" pyenv install 3.5.6

PYTHON_CONFIGURE_OPTSを適宜設定することで,コンパイラーに渡すオプションを変えることができるようだ.このようにしてやると,自前の環境にビルドしたライブラリもpyenvが見つけることができるようになるのだろう.

以上のような手順を踏むことで,sqlite3などが使えるpythonが使えるようになった.

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8