最近投稿しました。この問題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_log
ImportError: No module named site
site
/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/python
prints または 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()
後でこの問題を発見した人がいる場合は、コメントしてください!喜んでお手伝いします。
頑張ってください!