[サクラレンタルサーバー] (初心者向け) PythonとpyenvとFlaskの環境構築方法。| cshの場合


サクラレンタルサーバー(スタンダード)にFlask環境を作ろうと思ったが、sudoが使えない事と、デフォルトのシェルがcshellであるために、webにある参考記事から少し変更が必要だったので手こずった備忘録。(初心者用です)

![スクリーンショット 2015-05-17 12.23.02.png](https://qiita-image-store.s3.amazonaws.com/0/62413/6c3ac04e-6ae7-93ef-627e-099b64783c9d.png)
[さくらのレンタルサーバー](http://www.sakura.ne.jp/standard.html)

### 内容
- 0.環境の確認
- 1. pyenvを使って、python環境の構築
- 2. 構築したpython環境でpipを使ってflaskのインストール
- 3. cgiの設定を行い、Flaskアプリの動作を確認

 

###0. 環境の確認

サクラレンタルサーバーでのユーザーディレクトリは/home/<username>/です。
($HOME/や~/でもアクセスできます)

#### ユーザーディレクトリへのアクセス方法

```bash:
$ cd /home/<username>/
$ cd $HOME
$ cd ~/
$ cd /home/fififactory/
```
この後は、ユーザーディレクトリ以下に構成をくんでいきます。

デフォルトでインストールされているPythonの場所とバージョンの確認

```bash:
$ which python
/usr/local/bin/python
$ python -V
2.7.3
``` 

シェルの確認

```bash:
$ echo $SHELL
csh
```

ここで、bashやzshの人は、この記事の範囲外です。

### 1. pyenvを使って、python環境の構築

#### pyenvのダウンロード

サクラレンタルサーバではgitが使えるのでダウンロードしてきます。

練習がてらシェルスクリプトでコマンドを書いていきます。(のちのち見返すときにも役にたちます。直接コマンドをたたけば実行はできますので、面倒な方はそれで良いと思います)



```bash:
# ファイル名: pyenv-download.sh

#!/bin/csh   <- cshellで動作させる事を明示します。
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
```

このコマンドは、gitを使って、https://github.com/yyuu/pyenv.gitから、pyenvのリポジトリを~/.pyenvフォルダに保存しろと言ってます。

次にシェルスクリプト(pyenv-download.sh)をユーザーディレクトリに保存し、シェルを実行します。

```bash:
# 実行権限を付加しておきます。
$ chmod 755 pyenv-download.sh
# シェルスクリプトの実行
$ ~/pyenv-download.sh
```

#### pyenvのインストール

pyenvのダウンロードができたので、次はインストールを行っていきます。

.cshrc

```bash:
# $FreeBSD: src/share/skel/dot.cshrc,v 1.14.6.1 2008/11/25 02:59:29 kensmith Exp $
#
# .cshrc - csh resource script, read at beginning of execution by each shell
#
# see also csh(1), environ(7).
#


.....
(末尾に入力)

# Setting for pyenv
# *****************
if ( -e $HOME/.pyenv/bin/pyenv ) then
        echo '>> Exist pyenv'
        # pyenvのルートパスを設定
        setenv PYENV_ROOT $HOME/.pyenv
        # pyenvのディレクトリをPATHに追加
        setenv PATH $PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH
        # デフォルトテンポラリディレクトリを~/tmpに変更
        setenv TMPDIR $HOME/tmp
        # pyenvの再起動
        pyenv rehash
else
        echo '>> NO INSTALL pyenv'

endif
```

このコマンドは、もし$HOME/.pyenv/bin/pyenvが存在するならばとif文を使って条件処理をしています。そして、pyenvが存在しているときには、かくディレクトリとパスの設定を通します。(TMDIRはif文内に含む必要はないかもしれません。)

 

#### Cシェルを立ち上げ直す。
シェルを書き換えたので、一度再読みさせておきます。

```bash:
$ source $HOME/.cshrc
```

それでは、pyenvを使って、pythonの環境を構築します。

#### pyenvでpythonの環境構築。

まずは、利用するpythonのバージョンをダウンロードします。コマンドはpyenv installです。

```bash:
$ pyenv install --list  # インストールリストの確認
$ pyenv install 2.7.9   # python2.7.9をインストール
```

ただし、これではまだ使えません。pyenvのディレクトリ内にそのヴァージョンのpythonが準備されただけです。

pyenvはディレクトリ毎に環境を管理しますので、適当な場所にディレクトリを作ります。

```bash:
# 仮想環境用のディレクトリを作成(場所は任意)
$ mkdir $HOME/tmp/python
$ cd $HOME/tmp/python
```

一度その時点でのpythonのパスとヴァージョンを調べておきます。

```bash:
$ which python           # 現状のpythonを確認
/usr/local/bin/python
$ pyton -V
2.7.3
```

上の用にでるはずです。まだ、サクラのデフォルトのままであることを確認してください。

```bash:
$ pyenv local 2.7.9      # ローカルpythonを構築
$ pyenv local　　　　　　　#  設定がされているか確認
```

```bash:
$ whitch python
/home/fififactory/.pyenv/shims/python
$ python -V
2.7.9
```

これで、pythonがpyenvの中の/shims/pythonに指定されているのがわかります。これは.cshrcでパスに通したところになってます。ので、.cshrcのパスの設定がうまくいってないとはまります。(はまりました)

 

python環境構築完了

 

### 2. pipを使ってflaskのインストール

 

さてpyenvのおかげでpipが使えるようになりましたので、ローカルのpython環境にflaskを入れていきましょう。

 

まずはvirtualenvでFlask用の環境を作成します。

```bash:
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
$ pyenv virtualenv 3.4.2 3.4.2-flask
```

pythonのヴァージョン3.4.2をベースにした環境として、3.4.2-flask(名前は任意)という名前の仮想環境を作りました。

Flaskをpipでインストールします。先ほどと同様に、環境をセットしたいディレクトリに移動し以下のコマンドを打ちます。

```bash:
$ pyenv local 3.4.2-flask
$ pip install Flask
```

pip listでFlaskがあれば完了です。

 

 

### 3. cgiの設定を行い、Flaskアプリの動作を確認

ユーザディレクトリのwwwディレクトリ配下にアクセステスト用のディレクトリを準備します。

```bash:
mkdir ~/www/flask-cgi-test
mkdir ~/www/flask-cgi-test/hello
cd ~/www/flask-cgi-test/hello
```

/hello/ディレクトリ配下に3つのファイルを準備します。

(1) .htaccess

```txt:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /flask-cgi-test/hello/index.cgi/$1 [QSA,L]
```

(2) appFlask.py

```python3:
# coding: utf-8

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return "Hello!"

if __name__ == '__main__':
    app.run()
```

(3) index.cgi

```bash:
#!/home/fififactory/.pyenv/versions/3.4.2-flask/bin/python

import cgitb
cgitb.enable()

from wsgiref.handlers import CGIHandler
from appFlask import app
CGIHandler().run(app)
```


`http://<username>.sakura.ne.jp/flask-cgi-test/hello`にアクセス

![スクリーンショット 2015-05-17 12.04.35.png](https://qiita-image-store.s3.amazonaws.com/0/62413/b9717c7a-866e-fe27-5775-58387e1911d4.png)

helloがでれば成功です。



### 結

webアプリを作ろうと、意気揚々とサクラに登録して、Flaskを動かそうと思っていたのですが、ローカル環境とは異なり、sudoが使えなかったり管理者権限がなくてインストールできなかったりと、この記事をことを動かすだけでも4日程かかってしまいました。一番ハマっていたのはシェルスクリプトが良くわかっていなく、デフォルトのシェルがchsであることに気づくまでが遅かったです。初心者の備忘録ですが、同じように環境構築にハマっている人へ少しでも手助けになればと思い投稿しました。間違え等ありましたらコメント頂けると幸いです。

ご観覧ありがとうございました。

 

 

 

### 参考 

[.cshrc - csh、tcshの設定](http://technique.sonots.com/?UNIX%2F%E8%A8%AD%E5%AE%9A%E3%80%81%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%2F.cshrc)

[さくらのレンタルサーバでpyenv、Flaskを使う](http://tech.motop3j.net/archives/45)