work.log

元エンジニアの備忘録的ブログ

PyenvでCentOS6にPython3の開発環境を構築する

投稿:

今流行の人工知能(AI)開発に挑戦したい!と思いたち、プログラム言語の Python を覚える事にしました。

人工知能と言えば聞こえが良いですが、やりたいのは機械学習による結果予測で、簡単に言うと統計学を使ったデータ分析がしたいんです。

調べると、R言語かPythonがライブラリが充実していていいって事でここはPythonを選択します。

何故、Python かと言うと、Python は世界的にも幅広く使われている言語のため後々の肥やしにもなりそうだからです。

Python も統計学も全くの素人なのですが、まずは開発環境の構築から行います。

開発環境の概要

今回、下記条件で開発環境を構築しました。

  • OS: CentOS release 6.8 (Final)
  • Python 3.6.3 は Pyenv を使ってインストール(Python の仮想環境を構築)
  • OS 標準の Python 2.6.6 は残す(yum コマンド等に影響するため)

Python で書かれたプログラムは主に2系、3系が出回っているようですが、将来を考え Python3 を選択します。

しかし、CentOS 6系に標準インストールされる Python は2.6と古いです。でも、これを上書きしてしまうとyumとかに影響が出てしまうため、Pyenv という仮想環境を構築できるツールを使い Python 3.6.3 を新規インストールします。

こうすると、元の Python 2.6 と Python 3.6 が共存できるようになります。(ざっくり解説)

Python3 環境構築手順

プロンプトは「# = root」、「$ = 一般ユーザ」で記述していきます。

■ 各種依存パッケージのインストール

# yum -y install gcc bzip2 bzip2-devel openssl openssl-devel readline readline-devel sqlite-devel tk-devel

git も使うので無ければインストールしてください。

■ Pyenv のインストール

# cd /usr/local/
# git clone git://github.com/yyuu/pyenv.git ./pyenv

# mkdir -p ./pyenv/versions ./pyenv/shims
# cd pyenv/plugins/
# git clone git://github.com/yyuu/pyenv-virtualenv.git

■ Pyenv の Path 設定

# echo 'export PYENV_ROOT="/usr/local/pyenv"' >> /etc/profile.d/pyenv.sh
# echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/pyenv.sh

■ Pyenv の PATH, PYENV_ROOT 設定

# echo 'export PYENV_ROOT="/usr/local/pyenv"' >> /etc/profile.d/pyenv.sh
# echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/pyenv.sh

■ sudo 時も PATH, PYENV_ROOT を引き継げるよう設定

# visudo

----- 編集 -----
#Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin <- コメントアウト
# 以下を追加
Defaults        env_keep += "PATH"
Defaults        env_keep += "PYENV_ROOT"

■ Pyenv の確認

$ source /etc/profile.d/pyenv.sh
$ pyenv --version
pyenv 1.1.5-6-g656d7b1

■ Pyton3 のインストール

pyenv install -l」でインストールできるバージョンの一覧が表示されるので、どれを使うかを選択します。

$ pyenv install -l
~ 省略 ~
3.6.0
3.6-dev
3.6.1
3.6.2
3.6.3
3.7.0a1
~ 省略 ~

$ sudo pyenv install -v 3.6.3

これだけで簡単にインストールができます。

■ バージョンの切り替え

インストールが完了したらPythonのバージョンを切り替えてみます。

$ python --version
Python 2.6.6

$ mkdir ~/my_python/
$ cd ~/my_python/
$ sudo pyenv local 3.6.3

$ python --version
Python 3.6.3

こんな感じで簡単に切り替え可能です。切り替えは「local, global」があって、localだとコマンドを叩いたそこのディレクトリ内でのみ、globalだと全体で使うように設定されるみたいです。(他のユーザでも)

なので local で設定するとディレクトリを抜けてしまうと元に戻ります。

$ cd
$ python --version
Python 2.6.6

$ cd ~/my_python/
$ python --version
Python 3.6.3

とりあえず次に進みたかったので深く調べていませんが、Pyenv便利すぎです。

■ pip の調整

Python には pip と呼ばれる yum のようなパッケージ管理システムがありますが、この状態で pip list を実行すると下記メッセージが出力されるのでこれを止めます。

$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.

pip.conf が無いと言われているのでこれを作って、pip list での出力フォーマットを設定してあげます。

$ mkdir -p ~/.config/pip/
$ vi ~/.config/pip/pip.conf
----- 追加 -----
[list]
format = columns
----- ここまで -----

$ pip list

Package           Version    
----------------- -----------
beautifulsoup4    4.6.0      
bs4               0.0.1      
certifi           2017.7.27.1

これで環境構築は終了です。Perl とか PHP と比べると環境構築はだいぶ楽ですね。

Perl だとモジュールがまともにインストール出来ないとか多いので、環境構築には手こずったりしますが Python は爆速で環境構築が出来ます。

pip の使いやすさとか世界中で使われる理由がわかる気がします。

Python の文法を理解する

Python の開発環境構築は以上となりますが、余りにも簡単すぎるので実際に触った感想を少し。

自分が書けるプログラムは Perl, PHP, JavaScript 位なのですが Python はそれらとどの程度違うかを書いていきます。

プログラミングの経験がある方であれば Python はすんなり書けると思うのですが、やってみて自分的に気になった事を書いています。

インデントにはうるさい

Python はインデントのルールが結構うるさいです。

Perl とか PHP だと行頭にスペースやタブを入れて、自分なりのコード整形をしていましたが、Python はこのインデントでループ文や if 文の入れ子を判断しているっぽいので、この辺は Python のルールに従う必要があります。

また、タブとスペースの混在も NG です。

print 文がバージョンで違う

Python は print 文が2系と3系で違うようです。

## 2系
$ print "hellow python."

## 3系
$ print ("hellow python.")

個人的にはこの括弧が面倒だなと思うのですがこれは仕方がありません。

配列、ハッシュ操作が強力

Python は配列やハッシュ操作が非常に強力で楽だと思います。(Perl に比べて)

Python のハッシュは JSON みたいなので理解しやすいし、キーだけの取り出しとか、値だけの取り出し関数が最初からあるのはいいですね。

リファレンスは検索すれば出てきますが、シンプルでわかりやすい印象があります。

文字列の連結はJavascriptと一緒

Python の文字の連結は Javascript と同じで「+」で繋げられます。

ただ、数字を繋げたい場合は「”hoge” + “123”」と囲う必要があるのでちょっと面倒。Perl とか PHP みたく「.」が使えたら良かったなという印象です。

Python 最高!

以上、細かい部分はあるものの Python はとても使いやすく、多言語からの移行も簡単何じゃないかと思いました。

文法の学習もそこそこに、各種ライブラリを使って早速プログラミングをしていますが、やりたい事が瞬殺で出来るこの感覚は今まで経験した事がない位の楽さです。

例えば、HTML のテーブルからデータを読み込んで CSV 化する作業は、僅か5行のコードで完了してしまいます。

これまでは HTML データを取ってきてどこそこをスクレイピングして… ってやっていましたが、あまりの簡単さに驚愕です。

すごい便利な言語だと思うので気になっている人は是非!

コメント

コメントを残す

おすすめのVPSサーバ

  • OSが選べる
  • VPS同士でLANが組める
  • 複数台構成向き

このブログで使っています。

  • 転送量が多いサービスに
  • 借りてるのは3年間一度もdown無し!

よく見られている記事

  • 本日
  • 週間
  • 月間