2017-12-08 4 views
2

私はUbuntu 17.10でapache2を実行します。 PHPファイルの中にあります:ApacheはPythonのモジュール 'numpy'にアクセスできません - linux

<?php 
exec("python3 test_python.py 2>&1",$res); 
for ($i=0; $i < sizeof($res); $i++) { 
    echo $res[$i] . '<br>'; 
} 
?> 

test_python.pyの内側にあります:

import numpy as np 
print("it works from here."); 

は残念ながら、私が得る結果は次のとおりです。

トレースバック(最新の呼び出し最後): ファイル "test_python.py"、行1、 にインポートnumpy as np ModuleNotFoundError:モジュール 'numpy'

ように私は、端子を介してスクリプト私の自己を実行します。それは正常に動作します

python3 test_python.py 

。私はアクセス許可に問題があると思うが、私は解決策をまだ見つけていない。

答えて

0

PATH/PYTHONPATHのようになります。対話シェルから実行しているpython3は、Apache/PHPが実行しているものと同じでないかもしれません。および/またはsys.pathは両方のケースで異なる可能性があります。したがって、numpyは1つのケースでは見つかりますが、もう1つのケースでは見つかりません。その後、

cd /path/to/project    # go to your project dir 
virtualenv -p python3 env  # create python3-based virtual environment 
. env/bin/activate    # activate the virtual environment in env/ 
pip install numpy    # install all dependencies 
deactivate      # deactivate env 

と、単にあなたのPythonスクリプトを実行します。

最も安全と依存関係を使用してPythonスクリプトを実行するための最も強力な方法、virtualenvで仮想環境を作成することです、それをアクティブに、そこにあなたのDEPSをインストールPHPから作成した仮想環境(env/bin/python)からpythonを呼び出すことにより、仮想環境内にインストール

<?php 
exec("/path/to/project/env/bin/python test_python.py 2>&1", $res); 
... 

すべてのパッケージがで利用できるようになります。

他のパッケージを追加するには、もう一度virtual envを有効にして、pipをインストールしてください。

+1

ありがとうございました!これは本当に問題だったようです。 –

関連する問題