728x90

M1 silicon 맥북에서는 안되는게 참 많습니다. 새로운 CPU 아키텍쳐라서 여기저기서 패키지들이 오동작하거나 설치가 안되는 문제들이 많이 발생합니다. 오늘의 주인공인 파이썬 cryptography 패키지도 마찬가지입니다. 그나마 이 녀석은 에러가 나름 명확한 친구임에도 문제를 해결하기 위해 적지 않은 시간을 쏟아야 했습니다.

우선 에러 메세지 보고 가시겠습니다. :-) 이 에러 메세지는 pip install -r requirements.txt 를 수행하는 동안 발생헀고 requirements.txt 에는 cryptography가 기술되어 있었습니다. (드라마 24시에서 Following takes place... 하는 느낌이네요)

Building wheels for collected packages: cryptography
  Building wheel for cryptography (PEP 517) ... error
  ERROR: Command errored out with exit status 1:
...
...
 ...
    clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -iwithsysroot/System/Library/Frameworks/System.framework/PrivateHeaders -iwithsysroot/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/Headers -arch arm64 -arch x86_64 -Werror=implicit-function-declaration -I/Users/nopd/project/venv/include -I/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/include/python3.8 -c build/temp.macosx-10.14.6-arm64-3.8/_openssl.c -o build/temp.macosx-10.14.6-arm64-3.8/build/temp.macosx-10.14.6-arm64-3.8/_openssl.o -Wconversion -Wno-error=sign-conversion
  build/temp.macosx-10.14.6-arm64-3.8/_openssl.c:575:10: fatal error: 'openssl/opensslv.h' file not found
  #include <openssl/opensslv.h>
           ^~~~~~~~~~~~~~~~~~~~
  1 error generated.
  
      =============================DEBUG ASSISTANCE=============================
      If you are seeing a compilation error please try the following steps to
      successfully install cryptography:
      1) Upgrade to the latest pip and try again. This will fix errors for most
         users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip
      2) Read https://cryptography.io/en/latest/installation.html for specific
         instructions for your platform.
      3) Check our frequently asked questions for more information:
         https://cryptography.io/en/latest/faq.html
      =============================DEBUG ASSISTANCE=============================
  
  error: command 'clang' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for cryptography
Failed to build cryptography
ERROR: Could not build wheels for cryptography which use PEP 517 and cannot be installed directly

 

화려한 에러 메세지이지만 결론은 설치가 잘 안되었다 입니다. DEBUG ASSISTANCE의 내용은 평이합니다. PIP가 구버전이라 그럴 수 있으니 업데이터 해보고 cryptography 설치 가이드 문서를 읽어 본 다음, faq에 단서가 있을지도 모르니 찾아보라는 내용입니다. TL;DR 하자면 아래의 한줄이 모든 것을 이야기 해주고 있었습니다.

build/temp.macosx-10.14.6-arm64-3.8/_openssl.c:575:10: fatal error: 'openssl/opensslv.h' file not found

 

Trouble Shoot #1 - Install separate openssl with brew

구글 검색을 통해 살펴봤던 문서를 종합해보면 M1 silicon 기종에 선탑재되어 나오는 openssl이 cryptography 빌드에 필요한 버전과 상이하다고 합니다. 실제로 M1 silicon 탑재 기종에서 openssl version 명령으로 버전을 확인해보면 LibreSSL 이 설치되어 있는 것을 알 수 있습니다. 아래와 같이 brew 를 이용해 openssl 을 별도로 설치해 보도록 하겠습니다. 공식 가이드에서 안내하는 1.1 버전을 지정해서 설치 진행했습니다. 

cryptography 설치 가이드의 안내  (https://cryptography.io/en/latest/installation/)

% openssl version
LibreSSL 2.8.3
% brew install openssl@1.1 rust
Updating Homebrew...

 

Trouble Shoot #2 - Uninstall cffi then install cryptography again

별도의 openssl 설치와 혹시 몰라서 rust(cryptography는 rust를 사용합니다)를 설치하는 작업이 끝나면 이제 파이썬 패키지중에서 C언어를 호출할 때 사용되는 cffi 도 삭제후에 다시 설치해 주도록 하겠습니다. 아래의 명령을 순서대로 터미널에서 입력하면 cryptography 가 설치됩니다. 제 경우 cryptography를 3.3.1 버전으로 지정해서 사용할 일이 있어서 버전을 지정했습니다만 그렇지 않은 경우에는 버전 정보를 빼고 설치하면 되겠습니다. 

% pip uninstall cffi
% LDFLAGS=-L$(brew --prefix libffi)/lib CFLAGS=-I$(brew --prefix libffi)/include pip install cffi --no-binary :all:
% LDFLAGS="-L$(brew --prefix openssl@1.1)/lib" CFLAGS="-I$(brew --prefix openssl@1.1)/include" pip install cryptography==3.3.1

 

문제가 해결되었습니다. 비슷한 이슈를 겪는 분들은 정리된 내용대로 패키지 삭제, 재설치를 진행해 보시기 바랍니다. 영어로 된 자료도 흥미롭게 읽을 수 있다면 보다 깊은 내용과 관련 링크가 공유된 stackoverflow 의 아래 스레드를 읽어 보시면 도움이 되겠습니다!

 

Installing Cryptography on an Apple Silicon M1 Mac

Help! I'm trying to install cryptography on my m1. I know I can run terminal in rosetta mode, but I'm wondering if there is a way not to do that. Output: ERROR: Command errored out with exit st...

stackoverflow.com

 

Hope this helpful to someone who experiencing similar issue.

728x90

+ Recent posts