에러내용

httpd: Syntax error on line 151 of /usr/local/apache/conf/httpd.conf: Cannot load modules/mod_wsgi.so into server: libpython3.7.so.1.0: cannot open shared object file: No such file or directory

 

아파치 실행하는 계정의 .bashrc에 내용 추가

 

# .bashrc
...
export LD_LIBRARY_PATH="/usr/local/lib/"
# usr/local/lib python library 경로

'개발 > Python' 카테고리의 다른 글

Flask 로깅 설정  (0) 2020.11.25
Python3.8 가상환경 pip 이슈  (0) 2020.10.29
Flask에서 Excel 읽어오기(flask-excel)  (0) 2020.07.05
wtforms-json 사용하여 유효성 확인  (0) 2020.07.05
Python VirtualHost 설정  (0) 2020.06.03

문제 : Flask 로깅을 위해서 Python의 기본 logging 패키지를 사용했을 경우 config값을 사용할 수 없어서 서버별로 파일 디렉토리가 다른 경우가 존재

 

해결 : 로깅설정을 Flask App에 설정하여 config 값에 따라 경로 및 설정 변경 가능하도록 변경

 

 

...

def create_app(config_name: str):
	from config import config
    current_confg = config[config_name]
    
    app = Flask(__name__)
    
    configure_app(app. current_config)
    configure_logging(app)
    ...
    
    return app
    
    
def configure_logging(app: Flask) -> None:
	import logging
    
    from logging import FileHandler
    from logging import Formatter
    
    logger = logging.getLogger('로거명')
    logging.basicConfig()
    
    log_file_handler = FileHandler(filename=app.config["LOGGER_PATH"], encoding="utf-8", mode="a")
    log_formatter = Formatter("[%(process)d:%(processName)s:%(thread)d:%(threadName)s] %(asctime)s : %(message)s [in %(filename)s:%(lineno)d]")
    
    log_file_handler.setFormatter(log_formatter)
    
    app.logger = logger
    
    if app.config["DEBUG"] is True:
    	app.logger.setLevel(logging.DEBUG)
    else:
    	app.logger.setLevel(logging.INFO)
        
    app.logger.addHandler(log_file_handler)

내용


  • Python3.8 설치 후 Pycharm에서 생성해주는 가상환경의 경우 설치한 pip 버전이 다르게 나오는 이슈 확인
  • CLI에서 해당 Python 버전으로 가상환경 생성해주면 pip 버전 동일

 

'개발 > Python' 카테고리의 다른 글

Python, mod_wsgi, Apache 설정 시 libpython 에러  (0) 2020.12.02
Flask 로깅 설정  (0) 2020.11.25
Flask에서 Excel 읽어오기(flask-excel)  (0) 2020.07.05
wtforms-json 사용하여 유효성 확인  (0) 2020.07.05
Python VirtualHost 설정  (0) 2020.06.03

소개

  • flask-excel은 flask에서 excel 데이터를 읽을 수 있는 패키지 중 하나
  • flask-excel은 pyexcel에 기반하여 만들어짐

설치 및 실행

  1. pip install Flask-Excel
  2. pip install python-xls
  3. import flask_excel
    1. excel.init_excel(app)
import flask_excel as excel
...
excel.init_excel(app)

from flask import Flask, request, jsonify
import flask_excel as excel

app = Flask(__name__)


@app.route("/upload", methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
    	# post_data의 타입은 리스트
        post_data = request.get_array(field_name='filename')})
    """
    생략
    """


@app.route("/download", methods=['GET'])
def download_file():
    return excel.make_response_from_array([[1, 2], [3, 4]], "csv")


@app.route("/export", methods=['GET'])
def export_records():
    return excel.make_response_from_array([[1, 2], [3, 4]], "csv",
                                          file_name="export_data")


@app.route("/download_file_named_in_unicode", methods=['GET'])
def download_file_named_in_unicode():
    return excel.make_response_from_array([[1, 2], [3, 4]], "csv",
                                          file_name=u"반갑습니다.")


if __name__ == "__main__":
    excel.init_excel(app)
    app.run()

출처 : https://flask-excel.readthedocs.io/en/latest/

json타입의 요청 파라미터를 wtforms를 사용하여 유효성 확인을 하고 싶은 경우 wtforms-json을 사용하여 유효성 확인이 가능

 

  • 초기 설정
import wtforms-json

wtforms-json.init()

 

  • 사용법
from flask import request
...
from wtforms import Form
from wtforms.fields import BooleanField, TextField


class EventForm(Form):
    name = TextField()
    is_public = BooleanField()


@event_view('/event', method=["POST"])
def event_view():
	event_json = request.get_json()
    form = EventForm.from_json(event_json)
    ...

 

 

<VirtualHost *:8090>
ServerName test.flask.com

ErrorLog "|/usr/local/apache/bin/rotatelogs /home/system/logs/test/error-%Y-%m-%d.log 86400 +540"
TransferLog "|/usr/local/apache/bin/rotatelogs /home/system/logs/test/error-%Y-%m-%d.log 86400 +540"

WSGIApplicationGroup %{GLOBAL}
WSGIDaemonProcess test_app user=wasd group=operators python-path=/usr/local/lib/python2.7/site-packages processes=4 threads=4 display-name=%{GROUP}

<Directory /home/service/was/test/ >
    WSGIProcessGroup test_app
    Require all granted
</Directory>

Alias /static /home/service/was/test/static

<Directory /home/service/was/test/static/ >
    Order allow,deny
    Allow from all
</Directory>

mod_wsgi 설치하고 나서 apache 실행할때 error 해결

 

httpd: Syntax error on line 151 of /usr/local/apache2/conf/httpd.conf: Cannot load modules/mod_wsgi.so into server: libpython3.7.so.1.0: cannot open shared object file: No such file or directory

 

find / -name libpython3.7.so.1.0

로 해당 파일의 경로를 찾아내고 파일이 위치한 lib 디렉토리를 LD_LIBRARY_PATH 로 변수에 추가해주면 된다.

 

아래와 같이 명령어를 사용하면 되고,

export LD_LIBRARY_PATH=/usr/local/python27/lib/

 

만약 로그인할때마다 저 명령어를 사용하기 싫다면

 

~/.bash_profile 저장

'개발 > Python' 카테고리의 다른 글

wtforms-json 사용하여 유효성 확인  (0) 2020.07.05
Python VirtualHost 설정  (0) 2020.06.03
Pybabel을 이용한 다국어 처리  (0) 2020.04.07
CentOS7 Python + Apache 설정  (0) 2020.03.22
다국어 설정(Django)  (0) 2019.05.10

1. Flask-babel(PyBabel) 설치

  - pip install flask-babel

2. babel.cfg 파일 작성

[python: **.py]
[jinja2: **/templates/**.html]

3. pybabel extract -F babel.cfg -o messages.pot ./
4. pybabel init -I messages.pot -d ./translations -l ko
5. pybabel compile -f -d translations

Python 설치

사전 확인사항

  • root권한 획득
  • umask 기본 값 확인
    • 파일 및 디렉터리 생성 시 755 권한 아닐 경우 별도 계정에서 pip 실행 시 오류 발생

설치

  1. Python 최신버전 다운로드 후 압축 풀기
    1. tar -zxvf Python-2.7.17.tar.gz
  2. configure and install
    1. cd /Python-2.7.17
    2. ./configure --prefix=/usr/local --enable-shared --enable-optimizations LDFLAGS="-Wl,--rpath=/usr/local/lib"
    3. make && make altinstall
  3. Python bin 설정
    1. cd /usr/bin
    2. python2 -> /usr/bin/python2.7 심볼릭 링크를 백업
      1. mv python2 python2_old
    3. 설치한 python 심볼링 링크 추가
      1. ln -s /usr/local/bin/python2.7 python2
    4. 아무 경로에서나 python 실행 시 새로 설치한 버전으로 실행
  4. PIP 설치
    1. wget https://bootstrap.pypa.io/get-pip.py
    2. python get-pip.py
    3. pip 설정
      1. cd /usr/bin
      2. ln -s /usr/local/bin/pip pip

Python 설치 시 유의사항

  1. 파이썬 설치 후 yum 실행되지 않을 때 에러나는 파일에서 아래와 같이 수정
#! /usr/bin/python -> #! /usr/bin/python2.7 으로 수정

Apache 설치

설치

  1. Apache 압축 해제
    1. tar -zxvf httpd-2.4.41.tar.gz
    2. cd httpd-2.4.41
  2. configure and install
    1. ./configure --prefix=/usr/local/apache --enable-ssl --enable-http --enable-info --enable-cgi --enable-so --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config --with-mpm=worker --enable-rewrite --enable-module=shared --enalbe-mod-shared=all --enable-libxml2 --with-z
    2. make && make install
  3. 확인
    1. /usr/local/apache/bin/apachectl -k start
  4. 해당 IP 접속하여 확인
    1. http://localhost
    2. It Works! 작동하면 확인 완료

mod_wsgi 설치

설치

  1. mod_wsgi 압축 해제
    1. tar -zxvf mod_wsgi-4.7.1.tar.gz
    2. cd mod_wsgi-4.7.1
  2. configure and install
    1. ./configure --with-apxs=/usr/local/apache/bin/apxs --with-python=/usr/local/bin/python2.7
    2. make && make install
  3. 설치 확인
    1. /usr/local/apache/modules/ 경로에 mod_wsgi.so 파일 있으면 완료
  4. Apache Config 수정
    1. vim /usr/local/apache/conf/httpd.conf
    2. LoadModule wsgi_module modules/mod_wsgi.so 해당 줄 추가
    3. apache 재시작
      1. /usr/local/apache/bin/apachectl -k restart

Django에서 i18n을 사용하여 다국어 처리가 가능

 

1. setting 설정

from django.utils.translation import ugettext_lazy as _

 

# 언어설정

LANGUAGE_CODE = 'ko-KR'

 

# 언어목록

LANGUAGES = [

  ('ko', _('Korean')),

  ('en', _('English')),

]

 

# 언어 파일 경로

LOCALE_PATHS = (

    os.path.join(BASE_DIR, 'locale'),

)

 

2. 프로젝트 안에 locale 디렉터리 생성

mkdir locale

 

3. 다국어 처리 가능한 파일 생성

django-admin makemessages -l ko

 

4. 다국어 처리 (경로 : locale/ko/LC_MESSAGES/django.po)

예)

.\...\templates\main.html:122 .\...\templates\main.py:127

msgid "Welcome to our page"

msgstr "홈페이지에 오신걸 환영합니다"

 

5. 다국어 처리 완료한 파일 적용

django-admin compilemessages -l ko

'개발 > Python' 카테고리의 다른 글

Pybabel을 이용한 다국어 처리  (0) 2020.04.07
CentOS7 Python + Apache 설정  (0) 2020.03.22
Apache/mod_wsgi 파이프 깨짐 현상  (0) 2019.03.27
Python isinstance Decimal 확인 오류  (0) 2019.03.20
pymssql transaction없이 실행  (0) 2019.03.05

+ Recent posts