최근에 포스팅했어요이 문제Amazon ec2 RedHat 7 인스턴스에서 Flask 웹 애플리케이션을 시작하기 위한 장애물을 제거합니다.
즉, Python 3.6을 사용하여 Anaconda 환경을 통해 Flask 웹 애플리케이션을 시작하려고 합니다. 현재 간단한 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
루트 사용자로서 이 행을 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
루트 사용자가 올바른 Python 버전을 사용하고 있는지 확인하십시오.
[root@ip] ~ $ which python
/usr/local/anaconda3/bin/python
루트 사용자로 종료합니다.
[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로 수행되어야 합니다. 즉:
[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()
나중에 이 문제를 발견한 사람이 있으면 댓글을 달아주세요! 기꺼이 도움을 드리겠습니다.
행운을 빌어요!