CentOS7+nginx+apache2.4+Python3の環境を作る-pipの設定

前回apacheとPythonのインストールと実行をしました。今回はpipの設定をしていきます。環境と手順は↓のようになってます

注意点

この記事の時点ではまだnginxはいないため、apacheは80番ポートで動いてます。今回の記事はmod_wsgiのインストールのためapacheと連携はしていません。

環境

  • ベンダー:さくらのクラウド
  • OS:CentOS7
  • フロント:nginx(80番ポート)
  • バックエンド:Apache2.4(8080番ポート)
  • Python:3系(pyenvを使用)
  • フレームワーク:bottle(8081番ポート)

基本的にsudo環境にする予定です。

手順

基本的には以下の手順になります

  1. Apacheのインストール
  2. Python(pyenv)のインストール
  3. pipの設定←ここ
  4. Apache+Pythonの連携
  5. nginxを使ってリバースプロキシ

今回の記事について

今回は手順の3を行います。

pipって何?

pipはPythonのパッケージをインストールするための物です。Pythonでかかれたパッケージソフトをインストールしたり、管理できるシステムです。多くのパッケージはPython Package Index というサイト上にあります

Python Package Indexから手動でダウンロードでもいいのでは?

そのやり方でも問題ないです。言ってしまえばwgetコマンド使ってもいいですが、zip形式でダウンロードになったり手間が増えるのでpipのほうが良いです。

なんでpipを使うの?

apacheとputhonを連携させるのに、mod_wsgiというのを使います。今回はこれのインストールになります。

yumでは駄目なの?

yumは主にシステム系(CentOSに関わる物)をインストールしたり管理したりする物に使います。例えばapacheやnginxなどはCentOSに関わる物です。サーバーとして提供するため。Pythonも関わっています(yum自体がPythonっだったりする)が今回はapacheとPythonの連携というのがあるため少し方向が違います。

また、yum自体Python2.7系のため今回Python3系とは違うため使用しません。Pythonでパッケージをインストールしたりするときはpipからと覚えておいてください。

mod_wsgiはyumもpipもインストールできる

結論からいうと、多くのサイトではpipとyumと紹介しているサイトがあります。mod_wsgiはapachのモジュールのためyumからインストールも可能です。Python3系ということもあり今回はpipからダウンロードします

pipを実際に使ってみる

pipを実際に使ってみたいと思います。Python3系ならデフォルトで入っていますが念のためインストールされているか確認します

[macan@localhost ~]$pip -V
pip 10.0.1 from /usr/local/pyenv/versions/3.6.7/lib/python3.6/site-packages/pip (python 3.6)

ちゃんと入ってました

pipのアップグレード

まずはpipのアップグレードを行います。pip関連はrootで行います。sudoでもできる方はsudoでも問題ありません。

[root@localhost ~]# pip install --upgrade pip

Collecting pip
  Downloading https://files.pythonhosted.org/packages/c2/d7/90f34cb0d83a6c5631cf71dfe64cc1054598c843a92b400e55675cc2ac37/pip-18.1-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 18.9MB/s
Installing collected packages: pip
  Found existing installation: pip 10.0.1
    Uninstalling pip-10.0.1:
      Successfully uninstalled pip-10.0.1
Successfully installed pip-18.1

アップグレードできました。

[root@localhost ~]# pip -V
pip 18.1 from /usr/local/pyenv/versions/3.6.7/lib/python3.6/site-packages/pip (python 3.6)

バージョンが上がっていました。

pipのインストールを試してみる

実際にmod_wsgiのインストールをしてみます

[root@localhost ~]# pip install mod-wsgi

    /bin/ld: /usr/local/pyenv/versions/3.6.7/lib/libpython3.6m.a(parser.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object。 -fPIC を付けて再コンパイルしてください。
    /bin/ld: 最終リンクに失敗しました: 出力に対応するセクションがありません
    collect2: エラー: ld はステータス 1 で終了しました
    error: command 'gcc' failed with exit status 1

    ----------------------------------------
Command "/usr/local/pyenv/versions/3.6.7/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-zbbqryed/mod-wsgi/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-muqp_1sw/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-install-zbbqryed/mod-wsgi/

となぜかエラーがでました。ここにきて一体なんだ・・・

python-develが不足

調べたらpython-develというのが足りなかったのでインストールしました

[root@localhost ~]# yum install python-devel
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * elrepo: ftp.ne.jp
 * epel: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ python-devel.x86_64 0:2.7.5-69.el7_5 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

=============================================================================================================================================================================================================================================================================================================================
 Package                                                                        アーキテクチャー                                                         バージョン                                                                          リポジトリー                                                               容量
=============================================================================================================================================================================================================================================================================================================================
インストール中:
 python-devel                                                                   x86_64                                                                   2.7.5-69.el7_5                                                                      updates                                                                   397 k

トランザクションの要約
=============================================================================================================================================================================================================================================================================================================================
インストール  1 パッケージ

総ダウンロード容量: 397 k
インストール容量: 1.1 M
Is this ok [y/d/N]: y
Downloading packages:
python-devel-2.7.5-69.el7_5.x86_64.rpm                                                                                                                                                                                                                                                                | 397 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : python-devel-2.7.5-69.el7_5.x86_64                                                                                                                                                                                                                                                           1/1
  検証中                  : python-devel-2.7.5-69.el7_5.x86_64                                                                                                                                                                                                                                                           1/1

インストール:
  python-devel.x86_64 0:2.7.5-69.el7_5

完了しました!

今度はどうかな・・・失敗しました。次のエラーは error: command ‘gcc’ failed with exit status 1でした。gcc関連はインストール済みだったので他のかと思い調べてインストールしてみました

[root@localhost ~]# yum install libxslt-devel libffi-devel
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * elrepo: ftp.ne.jp
 * epel: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ libffi-devel.x86_64 0:3.0.13-18.el7 を インストール
---> パッケージ libxslt-devel.x86_64 0:1.1.28-5.el7 を インストール
--> 依存性の処理をしています: pkgconfig(libxml-2.0) のパッケージ: libxslt-devel-1.1.28-5.el7.x86_64
--> 依存性の処理をしています: libgcrypt-devel のパッケージ: libxslt-devel-1.1.28-5.el7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ libgcrypt-devel.x86_64 0:1.5.3-14.el7 を インストール
--> 依存性の処理をしています: libgpg-error-devel のパッケージ: libgcrypt-devel-1.5.3-14.el7.x86_64
---> パッケージ libxml2-devel.x86_64 0:2.9.1-6.el7_2.3 を インストール
--> 依存性の処理をしています: xz-devel のパッケージ: libxml2-devel-2.9.1-6.el7_2.3.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ libgpg-error-devel.x86_64 0:1.12-3.el7 を インストール
---> パッケージ xz-devel.x86_64 0:5.2.2-1.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

=============================================================================================================================================================================================================================================================================================================================
 Package                                                                             アーキテクチャー                                                        バージョン                                                                          リポジトリー                                                           容量
=============================================================================================================================================================================================================================================================================================================================
インストール中:
 libffi-devel                                                                        x86_64                                                                  3.0.13-18.el7                                                                       base                                                                   23 k
 libxslt-devel                                                                       x86_64                                                                  1.1.28-5.el7                                                                        base                                                                  309 k
依存性関連でのインストールをします:
 libgcrypt-devel                                                                     x86_64                                                                  1.5.3-14.el7                                                                        base                                                                  129 k
 libgpg-error-devel                                                                  x86_64                                                                  1.12-3.el7                                                                          base                                                                   16 k
 libxml2-devel                                                                       x86_64                                                                  2.9.1-6.el7_2.3                                                                     base                                                                  1.0 M
 xz-devel                                                                            x86_64                                                                  5.2.2-1.el7                                                                         base                                                                   46 k

トランザクションの要約
=============================================================================================================================================================================================================================================================================================================================
インストール  2 パッケージ (+4 個の依存関係のパッケージ)

総ダウンロード容量: 1.6 M
インストール容量: 12 M
Is this ok [y/d/N]: y
Downloading packages:
(1/6): libffi-devel-3.0.13-18.el7.x86_64.rpm                                                                                                                                                                                                                                                          |  23 kB  00:00:00
(2/6): libgpg-error-devel-1.12-3.el7.x86_64.rpm                                                                                                                                                                                                                                                       |  16 kB  00:00:00
(3/6): libgcrypt-devel-1.5.3-14.el7.x86_64.rpm                                                                                                                                                                                                                                                        | 129 kB  00:00:00
(4/6): libxslt-devel-1.1.28-5.el7.x86_64.rpm                                                                                                                                                                                                                                                          | 309 kB  00:00:00
(5/6): xz-devel-5.2.2-1.el7.x86_64.rpm                                                                                                                                                                                                                                                                |  46 kB  00:00:00
(6/6): libxml2-devel-2.9.1-6.el7_2.3.x86_64.rpm                                                                                                                                                                                                                                                       | 1.0 MB  00:00:00
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                                                                                                                                                                         1.9 MB/s | 1.6 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : libgpg-error-devel-1.12-3.el7.x86_64                                                                                                                                                                                                                                                         1/6
  インストール中          : libgcrypt-devel-1.5.3-14.el7.x86_64                                                                                                                                                                                                                                                          2/6
  インストール中          : xz-devel-5.2.2-1.el7.x86_64                                                                                                                                                                                                                                                                  3/6
  インストール中          : libxml2-devel-2.9.1-6.el7_2.3.x86_64                                                                                                                                                                                                                                                         4/6
  インストール中          : libxslt-devel-1.1.28-5.el7.x86_64                                                                                                                                                                                                                                                            5/6
  インストール中          : libffi-devel-3.0.13-18.el7.x86_64                                                                                                                                                                                                                                                            6/6
  検証中                  : xz-devel-5.2.2-1.el7.x86_64                                                                                                                                                                                                                                                                  1/6
  検証中                  : libffi-devel-3.0.13-18.el7.x86_64                                                                                                                                                                                                                                                            2/6
  検証中                  : libxml2-devel-2.9.1-6.el7_2.3.x86_64                                                                                                                                                                                                                                                         3/6
  検証中                  : libxslt-devel-1.1.28-5.el7.x86_64                                                                                                                                                                                                                                                            4/6
  検証中                  : libgpg-error-devel-1.12-3.el7.x86_64                                                                                                                                                                                                                                                         5/6
  検証中                  : libgcrypt-devel-1.5.3-14.el7.x86_64                                                                                                                                                                                                                                                          6/6

インストール:
  libffi-devel.x86_64 0:3.0.13-18.el7                                                                                                                           libxslt-devel.x86_64 0:1.1.28-5.el7

依存性関連をインストールしました:
  libgcrypt-devel.x86_64 0:1.5.3-14.el7                                           libgpg-error-devel.x86_64 0:1.12-3.el7                                           libxml2-devel.x86_64 0:2.9.1-6.el7_2.3                                           xz-devel.x86_64 0:5.2.2-1.el7

完了しました!

解決しません。調べてみるとTheanoをpyenvでインストールしたPython3.4.2で動かそうとしたら「PICオプションつけて再コンパイルしろよ」と怒られた時にやった対処メモという記事が見つかりました

Pythonを削除してインストールし直す

とりあえずやってみます。

[root@localhost /]# pyenv uninstall 3.6.7
pyenv: remove /usr/local/pyenv/versions/3.6.7? y
[root@localhost /]# env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.6.7
Downloading Python-3.6.7.tar.xz...
-> https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz
Installing Python-3.6.7...
Installed Python-3.6.7 to /usr/local/pyenv/versions/3.6.7

削除と再インストールしました

再度挑戦

[root@localhost /]# pip install  mod-wsgi
Collecting mod-wsgi
  Using cached https://files.pythonhosted.org/packages/47/69/5139588686eb40053f8355eba1fe18a8bee94dc3efc4e36720c73e07471a/mod_wsgi-4.6.5.tar.gz
Installing collected packages: mod-wsgi
  Running setup.py install for mod-wsgi ... done
Successfully installed mod-wsgi-4.6.5

普通にうまくいきました。こういうの大事ですね

[root@localhost /]# pip list
Package    Version
---------- -------
mod-wsgi   4.6.5
pip        18.1
setuptools 39.0.1

インストールされています

パッケージのインストール場所を調べる

インストールされたパッケージの場所を調べてみます

[root@localhost /]# pip show mod-wsgi
Name: mod-wsgi
Version: 4.6.5
Summary: Installer for Apache/mod_wsgi.
Home-page: http://www.modwsgi.org/
Author: Graham Dumpleton
Author-email: Graham.Dumpleton@gmail.com
License: Apache License, Version 2.0
Location: /usr/local/pyenv/versions/3.6.7/lib/python3.6/site-packages
Requires:
Required-by:

Locationの位置になります。問題無く3のとこに入ってます

注意点

必ずLocationで3系のとこにいるのを確認してください。紐付けるのに必要になります。bottleを動かすだけならこれでよいのですが実際にテンプレートを使うとなるとエラーとなる可能性があります。詳しくは失敗談CentOS7+Apache2.4+mod_swgi+python3をやってみたら・・・を見てください。最終的にはモジュールは移動させるので意味無いのですが念のため

GCPだとpipで2になる?

さくらのクラウドはでは問題無く3に入りましたが、GCPで構築したときはここが上手くいきませんでした。GCPをお使いの方でもしpipやってもロケーションが2のとこに行く方は以下を試してみてください

#pipのインストール先を指定
[root@localhost /]# export PYTHONPATH=$HOME/local/lib/python/site-packages:$PYTHONPATH

#pipをインストール
[root@localhost /]# easy_install --prefix=$HOME/local pip

#pipでインストール
[root@localhost /]# pip install --install-option="--prefix=$HOME/local" mod-wsgi

これで3系のとこに入るかもしれません。今回は2.7に入っていても多分問題は無いです。4.6.5のmod_wsgiが必要なだけなのでインストール場所はそこまで大きくこだわりはありません。