[celery] ImportError: The curl client requires the pycurl library.

nikevapormax·2023년 12월 19일
0

TIL

목록 보기
113/116

Celery

  • celery의 브로커를 redis가 아닌 sqs로 변경하면서 로컬 celery 테스트에서 ImportError: The curl client requires the pycurl library.를 만나게 되었다.
  • 여러 가지 해결방법들을 구글링하였고, 그 중에서 나에게 적용되었던 해결방법이다.

해결방법

curl-openssl 설치

  • 현재 나는 macOS를 사용하고 있다. 구글링했을 때 나왔던 해결방법 중 하나가 아래 명령어를 통해 openssl을 설치하는 것이었다. 하지만 아래 에러가 발생하였다.

    $ sudo apt-get install libssl-dev libcurl4-openssl-dev python-dev
    
    >> sudo: apt-get: command not found
    • 위의 에러가 발생하는 이유는 아래와 같다.
      • macOS는 Debian 계열의 Linux가 아니다.
      • apt-get은 Debian과 Ubuntu와 같은 Debian 계열의 Linux 배포판에서 사용되는 패키지 관리자이다.
      • macOS에서는 brew가 주로 사용되는 패키지 관리자이며, 따라서 macOS에서는 brew 명령어를 사용하여 패키지를 설치하고 관리한다.
  • 따라서 아래와 같은 명령어를 통해 curl-openssl을 설치해준다.

    $  brew install curl-openssl
  • 그러면 아래와 같이 설치가 된 것을 확인할 수 있다. 그리고 나에게 필요한 값은 아래의 빨간 박스 안에 있다.

pycurl 설치

  • 위의 빨간 박스에서 얻은 값을 사용해 pycurl을 설치하면 된다.
  • 여기서 LDFLAGSCPPFLAGS의 의미를 한 번 알아보고 넘어가자.
    • LDFLAGS
      • 링커(Linker)에 전달되는 플래그(Flags) 중 하나로, 컴파일된 프로그램을 링크할 때 사용되는 설정을 지정
      • 주로 라이브러리 및 라이브러리 경로, 링크 옵션 등을 설정하는 데에 활용
        • 라이브러리 경로 설정 : -L
        • 라이브러리 링크 설정 : -l (소문자 L)
      • 현재 나는 라이브러리의 경로를 설정해줘야 하므로 -L 플래그를 사용할 것이다.
    • CPPFLAGS
      • C Preprocessor에게 전달되는 플래그(Flags) 중 하나로, C 소스 코드를 전처리할 때 사용되는 설정을 지정하는 데에 활용
      • 주로 헤더 파일의 위치, 전처리기에 전달되는 옵션 등을 설정하는 데에 사용
        • 헤더 파일 경로 지정 : -I (대문자 I)
        • 매크로 정의 : -D
      • 현재 나는 헤더 파일의 경로를 지정해주어야 하므로 -I 플래그를 사용할 것이다.
$ export LDFLAGS="-L/opt/homebrew/opt/curl/lib"
$ export CPPFLAGS="-I/opt/homebrew/opt/curl/include"

$ PYCURL_SSL_LIBRARY=openssl LDFLAGS=$LDFLAGS CPPFLAGS=$CPPFLAGS pip install --no-cache-dir pycurl

celery 실행

  • 아래 명령어를 통해 celery를 실행하면 에러가 해결된 것을 볼 수 있다.
    $ celery -A config worker -l info
profile
https://github.com/nikevapormax

0개의 댓글