Conda Python 3を使用してApache mod_wsgi - モジュールをロードできません

Conda Python 3を使用してApache mod_wsgi - モジュールをロードできません

最近投稿しました。この問題Amazon ec2 RedHat 7インスタンスでFlask Webアプリケーションを起動するための障害物を取り除きます。

つまり、Python 3.6を使用してAnaconda環境を介してFlask Webアプリケーションを起動しようとしています。現在、シンプルなHello World Flaskアプリがあります/var/www/html/example。見つけた指示に従ってください。ここ。以前は、プリインストールされたPython 2.7.5(参考資料にあります)を使用してこのスクリプトを実行することができました。/usr/bin/pythonその後、Python 3.6を使用して同じアプリケーションを実行しようとしました。

私は同様の問題についていくつかの記事に言及してきました。これこれこれしかし、私はまだ少し迷っています。

conda環境(3.6用)でmod_wsgiを設定しました。

いくつかの関連システム情報:

$ which python
~/anaconda3/envs/myenv/bin/python (abspath is /home/ec2-user/anaconda3/envs/myenv/bin/python)
$ python -V
Python 3.6.2 :: Continuum Analytics, Inc.
$ which mod_wsgi-express
~/anaconda3/envs/myenv/bin/mod_wsgi-express
$ mod_wsgi-express module-config
LoadModule wsgi_module "/home/ec2-user/anaconda3/envs/myenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
WSGIPythonHome "/home/ec2-user/anaconda3/envs/myenv"

文書の内容/etc/httpd/conf/httpd.conf:

DocumentRoot "/var/www/html"
WSGIDaemonProcess myenv python-path=/home/ec2-user/anaconda3/envs/myenv/lib/python3.6/site-packages
WSGIScriptAlias / /var/www/html/examples/example.wsgi process-group=myenv application-group=%{GLOBAL}
LoadModule wsgi_module "/home/ec2-user/anaconda3/envs/myenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
WSGIPythonHome /home/ec2-user/anaconda3/envs/myenv

<Directory example>
    WSGIProcessGroup myenv
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
</Directory>

を実行しようとすると、sudo apachectl restart次の出力が表示されますsystemctl status httpd.service

httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sun 2018-04-08 21:41:38 UTC; 3min 7s ago
  Docs: man:httpd(8)
         man:apachectl(8)
  Process: 20541 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
  Process: 20540 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 20540 (code=exited, status=1/FAILURE)

Apr 08 21:41:38 [ip].compute.internal systemd[1]: Starting The Apache HTTP Server...
Apr 08 21:41:38 [ip].compute.internal httpd[20540]: httpd: Syntax error on line 125 of /etc/httpd/conf/httpd.conf: Cannot load /home/ec2-user/anaconda3/envs/myenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so into server: : /home/ec2-user/anaconda3/envs/myenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so: cannot open shared object file: Permission denied

問題のファイル(mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so)には、すべてのユーザーに対する実行権限があります。

また。/var/log/httpd/error_logImportError: No module named sitesite/var/www/html/example

ベストアンサー1

解決策home:私のPythonが私のディレクトリにインストールされているので、このエラーが発生したことに気づきました。したがって、Apacheはこの環境にアクセスできません。

この問題を解決するために、次のことを行いました。

私のanaconda3のインストールを削除しました。

[ec2-user@ip] ~ $ rm -rf anaconda3/
# -- be sure to remove directories .conda/ and .anaconda_backup/ -- #
# -- these should be in the same directory as the anaconda3/ directory -- #

anaconda3をディレクトリにルートとして再インストールします/usr/local(Apacheで使用するためにすべてのユーザーがアクセス可能)。

[ec2-user@ip] ~ $ sudo su -
[root@ip] ~ $ cd /usr/local
[root@ip] ~ $ wget https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86_64.sh 
                  # ^ whichever version you want. Go to https://repo.continuum.io/archive/
[root@ip] ~ $ bash Anaconda3-5.1.0-Linux-x86_64.sh
    # specify your path when prompted --> /usr/local/anaconda3
    # note that directory /usr/local/anaconda3 cannot exist prior to running the command

rootユーザーとして、この行をexport PATH='/usr/local/anaconda3/bin:$PATH'/ root / .bashrcファイルの末尾に追加してください。 (ファイルの最後に古いanaconda3パスがすでに存在する場合は編集してください)

[root@ip] ~ $ vi /root/.bashrc # -- add/edit the line here -- #
[root@ip] ~ $ source /root/.bashrc

rootユーザーが正しいPythonバージョンを使用していることを確認してください。

[root@ip] ~ $ which python
/usr/local/anaconda3/bin/python

rootユーザーで終了します。

[root@ip] ~ $ exit

デフォルトのユーザーとして正しいPythonバージョンが利用可能であることを確認してください。

[ec2-user@ip] ~ $ which python
/usr/local/anaconda3/bin/python

/usr/bin/pythonprints または Excepts 以外の項目がある場合は、上記で/usr/local/anaconda3/bin/python指定した PATH をユーザーの ~/.bashrc ファイルに追加する必要があります (root ユーザーのように)。

注:すべての新しいインストール/環境構成は、ROOTで実行する必要があります。つまり:

[ec2-user@ip] ~ $ sudo su -
[root@ip] ~ $ conda install flask
...
[root@ip] ~ $ exit
# -- open Python to verify that your installation worked -- #
[ec2-user@ip] ~ $ python
Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 18:10:19)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import flask
# -- shouldn't throw an ImportError -- #
>>> exit()

後でこの問題を発見した人がいる場合は、コメントしてください!喜んでお手伝いします。

頑張ってください!

おすすめ記事