0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS EC2でPHPのexec()でpython3系実行

Posted at

Amazon LinuxでPython3系を使う
こちらのブログの方法で解決しましたが、少し自分なりに足りないと思ったところを補足して紹介します。

大前提:Pyenvのインストール先は、/usr/bin/..にしよう。

他のブログでは、pyenvのインストール先は/home/ec2-user/...のところにあると思うのですが、ec2-userディレクトリは権限が厳しいので、その中にpython3をインストールして、例えば、exec(/home/ec2-user/.../bin/python3.7)とかしても、

permission denied

になります。
だからといって、homeディレクトリや、ec2-userディレクトリの権限を書き換えると、セキュリティの仕様?か何かで、scpやsshでサーバーに入れなくなるという恐ろしいことが起きます。(もしそうなっちゃったら、AWS ec2のインスタンスページからターミナルを開けば解決できます。)

1. pyenvを使用するために必要なライブラリのインストール

$ sudo yum install gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel

2. pyenvのインストール、権限・パスの設定

$ sudo git clone https://github.com/yyuu/pyenv.git /usr/bin/.pyenv
$ cd /usr/bin/.pyenv
$ sudo mkdir shims
$ sudo mkdir versions

3.インストールしたフォルダの権限をexecからアクセスできるように、変えよう。

$ sudo chown -R ec2-user:apache /usr/bin/.pyenv

# あるいはapacheがインストールされていない場合は
$ sudo chown -R ec2-user:ec2-user /usr/bin/.pyenv

4.パスを設定しよう

パスの設定については他のブログで詳しく紹介されてるのがあるのでそちらをどうぞ。
vimエディタを使い、.bashrcを開きます。

vi ~/.bashrc

これを追記。

export PYENV_ROOT="/usr/bin/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
fi

書き換えた状態で、リロード。

$ source ~/.bashrc

5.普通にpyenvで、pythonインストール

今回は適当にpython3.7.0をインストールしてみます。
インストールしても、既存のシステムのpythonのままなので

$ pyenv install 3.7.0
$ python -V
Python 2.7.12

こうやって、python3.7.0にモードチェンジします。

$ pyenv global 3.7.0
$ python -V
Python 3.7.0

6.phpでpython3を実行。

さっきインストールした場所をもぐっていくと、python3.7がインストールされている場所が見つかります。
「/usr/bin/.pyenv/versions/3.7.0/bin/python3.7」
これを使えば、python3.7を使えます。
パスを通して同じように見せてるだけで、以下の二つは同じものです。

$ python
$ /usr/bin/.pyenv/versions/3.7.0/bin/python3.7

これで、python3.7.0を、phpで使えるようになりました。
試しに、こんな感じでexec()を使ってみましょ〜。ちゃんとpython3.7使えます。

$command = "/usr/bin/.pyenv/versions/3.7.0/bin/python3.7 -V";
exec($command, $output, $return_var);
$json_array = json_encode($output);
echo $json_array
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?