広告 プログラミング

【解説】Homebrewを使ってXserverにPython+pipenvをインストールする

※本ページには、プロモーション(広告)が含まれています。

悩んでいる人

XserverでDjangoを利用する必要が生じたために、環境構築をしたい。

管理者権限(root権限)が与えられていないため、ユーザ権限の下で環境構築する方法を教えて欲しい。

こんなお悩みを解決します。

諸般の事情により、Xserverに設定している同一ドメインを用いて、WordPressとDjangoを動作させることになりました。

VPSサーバであれば、管理者権限が与えられているため、環境構築には困らないのですが、共有サーバ上(Xserver上)となると対応が異なってきます。

今回は、Homebrew(Linuxbrew)を用いて、ユーザ管理下にPython+pipenv(Pythonの仮想環境)を構築する方法を解説します。

参考情報としてご覧ください。

素早く環境構築したい方へ

環境構築が比較的容易で、共有サーバよりも、カスタマイズの自由度が高いものを求めている場合、仮想専用サーバ(VPS)を利用することをおすすめします。

詳細は、以下の記事をご覧ください。

あわせて読みたい
【比較】おすすめのVPS 4選

続きを見る

参考サイト

今回の方法で環境構築を行う上で、以下のサイトを参考にさせていただきました。

https://qiita.com/joshnn/items/244ca701c1bf9be8f350

また、上記のリンクでは、一部非公式なやり方が採用されており、今後の不具合にも直結しそうだったため、私の方で原因を解消した状態の手順に更新したものを環境構築時の方法として紹介します。

前提

Xserverで作業するためには、SSH接続が必要となります。

今回は、SSH接続の準備はすでに完了しているものとします。

Homebrewインストール時の問題

ユーザ環境下でPythonをインストールするためにHomebrewというツールを利用します。

しかし、Xserver上にインストールされている依存ライブラリgitcurlが古いため、Homebrewでエラーが発生します。

Error: Please update your system curl or set HOMEBREW_CURL_PATH to a newer version.
Minimum required version: 7.41.0
Your curl version: 7.29.0
Your curl executable: /usr/bin/curl
Error: Please update your system Git or set HOMEBREW_GIT_PATH to a newer version.
Minimum required version: 2.7.0
Your Git version: 1.8.3.1
Your Git executable: /usr/bin/git

今回は、ソースコードからgitcurlをビルドすることでこれらのエラーを解決します。

ディレクトリ構成

作業を進める上で、全体像が把握できている方が良いため、ディレクトリ構成を示しておきます。


${HOME}/
|-- _tmp/
|-- opt/
|   |-- curl/
|   |-- gettext/
|   |-- git/
|   `-- ssl/
`-- .linuxbrew/
    |-- Homebrew/
    |-- bin/
    `-- (その他インストール済みライブラリ)

それぞれのディレクトリの意味は、以下のようになります。

ディレクトリ名説明
_tmp各種ライブラリをインストールするための作業場所
opt/curlHomebrewで利用するcurlのインストール先
opt/gettextgitインストール時の依存ライブラリのインストール先(gitは内部でmsgfmtを利用している)
opt/gitHomebrewで利用するgitのインストール先
opt/sslcurlインストール時の依存ライブラリのインストール先(curlは内部でopensslを利用している)
.linuxbrewHomebrewのインストール先
ディレクトリ構成

環境構築

実際に環境構築を進めていきます。

環境変数の設定

事前に必要な環境変数を設定しておきます。

エディタで~/.bash_profileを開き、下記のコードを記入し、保存します。(私は、viを利用して編集しました。)

# ~/.bash_profileに記載する内容
export HOMEBREW_FORCE_BREWED_GIT=
export HOMEBREW_FORCE_BREWED_CURL=
export HOMEBREW_CURL_PATH=${HOME}/opt/curl/bin/curl
export HOMEBREW_GIT_PATH=${HOME}/opt/git/bin/git
export HOMEBREW_PREFIX=${HOME}/.linuxbrew
export HOMEBREW_CELLAR=${HOME}/.linuxbrew/Cellar
export HOMEBREW_REPOSITORY=${HOME}/.linuxbrew/Homebrew
export MANPATH=${HOME}/.linuxbrew/share/man${MANPATH+:$MANPATH}
export INFOPATH=${HOME}/.linuxbrew/share/info:${INFOPATH:-}
export PATH=${HOME}/.linuxbrew/opt/binutils/bin:${HOME}/opt/curl/bin:${HOME}/opt/git/bin:${HOME}/opt/gettext/bin:${HOME}/opt/ssl/bin:${HOME}/.linuxbrew/bin:${HOME}/.linuxbrew/sbin${PATH+:$PATH}

それぞれの環境変数の意味は、以下のようになります。

環境変数名意味今回の設定値
HOMEBREW_FORCE_BREWED_GITHomebrewにインストールされているgitの利用を強制するFalseを表す意味で(空欄)とする。
※ソースコードからビルドしたgitを利用したいため。
HOMEBREW_FORCE_BREWED_CURLHomebrewにインストールされているcurlの利用を強制するFalseを表す意味で(空欄)とする。
※ソースコードからビルドしたcurlを利用したいため。
HOMEBREW_CURL_PATHcurlのパスコードにある通り
HOMEBREW_GIT_PATHgitのパス同上
HOMEBREW_PREFIXHomebrewのprefixコードにある通り
※Homebrewインストール後、下記のコマンドで得られたものをベースに設定
~/.linuxbrew/bin/brew shellenv
HOMEBREW_CELLARCELLARのパス同上
HOMEBREW_REPOSITORYREPOSITORYのパス同上
MANPATHmanファイルのパス同上
INFOPATHinfoファイルのパス同上
PATHライブラリ等のインストール先コードにある通り。詳細は下記の通り。
${HOME}/.linuxbrew/opt/binutils/bin
 python3のインストール時に参照する
${HOME}/opt/curl/bin
 curl実行時に参照する
${HOME}/opt/git/bin:${HOME}/opt/gettext/bin
 git実行時に参照する
${HOME}/opt/ssl/bin
 openssl利用時に参照する
${HOME}/.linuxbrew/bin:${HOME}/.linuxbrew/sbin
 Homebrew実行時に参照する
環境変数の意味と今回の設定値

その後、sourceコマンドを用いてパスを有効化します。

source .bash_profile

ディレクトリ作成

下記のコマンドを実行し、必要なディレクトリを作成します。

mkdir -p ~/opt/curl
mkdir -p ~/opt/git
mkdir -p ~/opt/gettext
mkdir -p ~/opt/ssl
mkdir ~/_tmp

依存ライブラリのインストール

以降では、依存ライブラリをインストールしていきます。

作業ディレクトリへの移動・環境変数の設定

作業ディレクトリに移動します。

また、ビルド時のオプションも環境変数に設定しておきます。

cd ~/_tmp
export CFLAGS=-fPIC

opensslのインストール

下記のコマンドを実行してください。

wget http://www.openssl.org/source/openssl-1.0.2k.tar.gz
tar xvfz openssl-1.0.2k.tar.gz
cd openssl-1.0.2k
./config shared --prefix=${HOME}/opt/ssl --openssldir=${HOME}/opt/ssl
make
make install
cd -

また、以下のコマンドを実行し、インストール結果を確認しておきます。

openssl version
OpenSSL 1.1.1t  7 Feb 2023
which openssl
~/opt/ssl/bin/openssl

curlのインストール

以下のコマンドを実行します。

wget https://curl.haxx.se/download/curl-7.65.3.tar.gz
tar zxvf curl-7.65.3.tar.gz
cd curl-7.65.3
./configure --with-ssl=${HOME}/opt/ssl --enable-libcurl-option --prefix=${HOME}/opt/curl --enable-shared
make
make install
# add symbolic link (important!)
pushd ~/opt/curl/lib
ln -s ../../ssl/lib/libssl.so.1.0.0 libssl.so.1.0.0
ln -s ../../ssl/lib/libcrypto.so.1.0.0 libcrypto.so.1.0.0
popd
cd -

Homebrew実行時に発生する下記のエラーを回避するために、curl側からopensslのライブラリが参照できるようにする必要があります。

curl: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory

pushd ~/opt/curl/lib
ln -s ../../ssl/lib/libssl.so.1.0.0 libssl.so.1.0.0
ln -s ../../ssl/lib/libcrypto.so.1.0.0 libcrypto.so.1.0.0
popd

上記の設定を行っておくことで、Homebrewがソースコードからビルドしたcurlを利用してくれるようになります。

また、以下のコマンドを実行し、インストール結果を確認しておきます。

curl -V
curl 7.65.3 (x86_64-pc-linux-gnu) libcurl/7.65.3 OpenSSL/1.0.2k zlib/1.2.7
Release-Date: 2019-07-19
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS HTTPS-proxy Largefile libz NTLM NTLM_WB SSL TLS-SRP UnixSockets
which curl
~/opt/curl/bin/curl

gettextのインストール

下記のコマンドを実行してください。

wget https://ftp.gnu.org/pub/gnu/gettext/gettext-0.21.tar.gz
tar zxvf gettext-0.21.tar.gz
cd gettext-0.21
./configure --prefix=${HOME}/opt/gettext
make
make install
cd -

gitのインストール

以下のコマンドを実行します。

wget https://www.kernel.org/pub/software/scm/git/git-2.17.0.tar.gz
tar zxvf git-2.17.0.tar.gz
cd git-2.17.0
./configure --prefix=${HOME}/opt/git --with-openssl=${HOME}/opt/ssl --with-curl=${HOME}/opt/curl
make
make install
cd -

また、以下のコマンドを実行し、インストール結果を確認しておきます。

git --version
git version 2.17.0
which git
~/opt/git/bin/git

作業ディレクトリの削除

一通りインストールが完了したため、作業ディレクトリを削除しておきます。

cd ~
rm -rf ~/_tmp

Homebrewのインストール

下記のコマンドを実行し、Homebrewをインストールします。

mkdir ~/.linuxbrew
git clone https://github.com/Homebrew/brew ~/.linuxbrew/Homebrew
mkdir ~/.linuxbrew/bin
ln -s ~/.linuxbrew/Homebrew/bin/brew ~/.linuxbrew/bin

また、以下のコマンドを実行し、インストール結果を確認しておきます。

brew help
Example usage:
  brew search TEXT|/REGEX/
  brew info [FORMULA|CASK...]
  brew install FORMULA|CASK...
  brew update
  brew upgrade [FORMULA|CASK...]
  brew uninstall FORMULA|CASK...
  brew list [FORMULA|CASK...]

Troubleshooting:
  brew config
  brew doctor
  brew install --verbose --debug FORMULA|CASK

Contributing:
  brew create URL [--no-fetch]
  brew edit [FORMULA|CASK...]

Further help:
  brew commands
  brew help [COMMAND]
  man brew
  https://docs.brew.sh

Pythonのインストール

本題となるPythonのインストールを進めます。

ただし、いきなりPythonをインストールすると、以下のようなメッセージが表示されてインストールできないため、先に依存関係を解決しておきます。

checking whether the C compiler works... no
configure: error: in `/tmp/pkg-config-22221111-63960-1oyxigf/pkg-config-0.29.2':
configure: error: C compiler cannot create executables

依存ライブラリbinutilsのインストール

下記のコマンドを実行します。

brew install binutils

インストール後、下記のようなメッセージが表示されるため、追加で環境変数を設定します。

binutils is keg-only, which means it was not symlinked into ${HOME}/.linuxbrew,
because it shadows the host toolchain.

If you need to have binutils first in your PATH, run:
  echo 'export PATH="${HOME}/.linuxbrew/opt/binutils/bin:$PATH"' >> ${HOME}/.bash_profile

For compilers to find binutils you may need to set:
  export LDFLAGS="-L${HOME}/.linuxbrew/opt/binutils/lib"
  export CPPFLAGS="-I${HOME}/.linuxbrew/opt/binutils/include"
# add environment variables
export LDFLAGS="-L${HOME}/.linuxbrew/opt/binutils/lib"
export CPPFLAGS="-I${HOME}/.linuxbrew/opt/binutils/include"

${HOME}/.linuxbrew/opt/binutils/binは、最初のPATH設定時に実施済みのため、以下の2点だけ追加で実施すればOKです。

  • export LDFLAGS="-L${HOME}/.linuxbrew/opt/binutils/lib"
  • export CPPFLAGS="-I${HOME}/.linuxbrew/opt/binutils/include"

Pythonのインストール

今回は、Python3.11をインストールするため、下記のコマンドを実行します。

brew install python@3.11

他のバージョンをインストールしたい場合、search引数を指定することで、Homebrewでインストール可能なバージョン確認できます。

brew search python@3
boost-python3
python@3.10
python@3.11
python@3.7
python@3.8
python@3.9
ipython
bpython
jython
cython

また、以下のコマンドを実行し、インストール結果を確認しておきます。

python3 -V
Python 3.11.3
pip3 -V
pip 23.0.1 from ${HOME}/.linuxbrew/opt/python@3.11/lib/python3.11/site-packages/pip (python 3.11)

pipenvのインストール

最後にpipenvをインストールしておきます。

brew install pipenv

また、以下のコマンドを実行し、インストール結果を確認しておきます。

pipenv --version
pipenv, version 2023.5.19

よくある質問

ここでは、私が作業を進める中で遭遇した問題をよくある質問として紹介しておきます。

Homebrew実行時にcurlのエラーが消えない

下記のエラーが解消されない場合、curl側からopensslのライブラリが参照できていることを確認してください。

Error: Please update your system curl or set HOMEBREW_CURL_PATH to a newer version.
Minimum required version: 7.41.0
Your curl version: 7.29.0
Your curl executable: /usr/bin/curl

確認方法

下記のコマンドを実行します。

ldd opt/curl/bin/curl
  linux-vdso.so.1 =>  (0x00007ffc06bab123)
  libcurl.so.4 => ${HOME}/opt/curl/lib/libcurl.so.4 (0x00007f7102805132)
  libssl.so.1.0.0 => not found
  libcrypto.so.1.0.0 => not found
  libz.so.1 => /lib64/libz.so.1 (0x00007f7101c2f623)
  libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7201913723)
  libc.so.6 => /lib64/libc.so.6 (0x00007f7103545523)
  libdl.so.2 => /lib64/libdl.so.2 (0x00007f7501341023)
  /lib64/ld-linux-x86-64.so.2 (0x00007f7102678000)

libssl.so.1.0.0libcrypto.so.1.0.0が「not found」となる場合、opensslのライブラリが参照できていないことなります。

解消方法

下記のコマンドを実行し、シンボリックリンクを作成してください。

pushd ~/opt/curl/lib
ln -s ../../ssl/lib/libssl.so.1.0.0 libssl.so.1.0.0
ln -s ../../ssl/lib/libcrypto.so.1.0.0 libcrypto.so.1.0.0
popd

先ほどの確認方法に示したコマンドを実行すると「not found」が無くなっていると思います。

ldd opt/curl/bin/curl
  linux-vdso.so.1 =>  (0x00007ffc06bab123)
  libcurl.so.4 => ${HOME}/opt/curl/lib/libcurl.so.4 (0x00007f7102805132)
  libssl.so.1.0.0 => ${HOME}/opt/curl/lib/libssl.so.1.0.0 (0x00007f7102a93153)  # <- updated
  libcrypto.so.1.0.0 => ${HOME}/opt/curl/lib/libcrypto.so.1.0.0 (0x00007f710cd45771) # <- updated
  libz.so.1 => /lib64/libz.so.1 (0x00007f7101c2f623)
  libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7201913723)
  libc.so.6 => /lib64/libc.so.6 (0x00007f7103545523)
  libdl.so.2 => /lib64/libdl.so.2 (0x00007f7501341023)
  /lib64/ld-linux-x86-64.so.2 (0x00007f7102678000)

Pythonインストール時にエラーが発生する

binutilsをインストールしても、下記のエラーが発生することがあります。

checking whether the C compiler works... no
configure: error: in `/tmp/pkg-config-22221111-63960-1oyxigf/pkg-config-0.29.2':
configure: error: C compiler cannot create executables

原因究明

私の環境では、binutilsが再インストールされ、ディレクトリ名が変わってしまっていたことが問題でした。

ls .linuxbrew/opt/binutils  -al
lrwxrwxrwx 1 xs012 members 22  11月 11 00:00 .linuxbrew/opt/binutils -> ../Cellar/binutils/2.40
ls .linuxbrew/Cellar/
2.40.reinstall

解消方法

binutilsを手動で再インストールすることで解決しました。

brew uninstall binutils
brew install binutils

まとめ

今回は、XserverでPython+pipenvの環境を構築する方法について解説しました。

特殊な環境下での作業のため、苦戦することが多かったですが、最低限の環境は構築できました。

引き続き、Homebrewを用いて必要なライブラリ(mariadbmariadb-connector-cなどのデータベースを操作するライブラリ等)をインストールしていきたいと思います。

素早く環境構築したい方へ

環境構築が比較的容易で、共有サーバよりも、カスタマイズの自由度が高いものを求めている場合、仮想専用サーバ(VPS)を利用することをおすすめします。

詳細は、以下の記事をご覧ください。

あわせて読みたい
【比較】おすすめのVPS 4選

続きを見る

スポンサードリンク

-プログラミング
-, ,