Conda Python 3을 사용하는 Apache mod_wsgi - 모듈을 로드할 수 없습니다.

Conda Python 3을 사용하는 Apache mod_wsgi - 모듈을 로드할 수 없습니다.

최근에 포스팅했어요이 문제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 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

루트 사용자로서 이 행을 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/pythonprints 또는 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()

나중에 이 문제를 발견한 사람이 있으면 댓글을 달아주세요! 기꺼이 도움을 드리겠습니다.

행운을 빌어요!

관련 정보