Django 내 SMTP를 활용한 이메일 발송 기능을 사용하고 있었는 데, 어느 날부터 발송이 안 되었다.  


 물론 단순히 진짜 계정 정보랑 비밀번호가 안 맞아서 생기는 문제는 아닌 걸 확인했다고 가정하고 쓰겠다. 이 문제가 왜 생겼나 설명하기 전에, 아마 90% 이상의 사람들은 파이썬을 이용하여 gmail을 보낼 수 있도록 세팅을 하다가, 이 옵션을 만졌을 것이다.

 

 

이 옵션을 켜야 파이썬 안에서 구글 이메일/비밀번호만 가지고 로그인해서 이메일을 보낼 수 있었다. 그런데, 이 옵션이 흥미로운 게 무려 2단계 인증을 꺼야 활성화가 되고, 구글에서도 사용을 권장하지 않는 꺼림칙한 옵션이다. 그래서 원인은 간단하다.

 

 

 

이 옵션이 22년 5월 30일자로 막혔기 때문이다. 이메일이랑 비번 가지고 접속하는 행위가 안 통한다.

 

 

그러면 어떻게 해야 하느냐? 안타깝게도 이 '보안 수준이 낮은 앱 액세스'라는 방법의 대안을 설명한 글은 쉽게 눈에 띄지 않았다. 약간의 구글링 끝 방법을 찾을 수 있었다.

https://levelup.gitconnected.com/an-alternative-way-to-send-emails-in-python-5630a7efbe84

 

An Alternative Way to Send Emails in Python

Stop using your Google password to programmatically log in and send emails in Python.

levelup.gitconnected.com

 

 이 방법에 따르면, 우선 계정에 2단계 인증(SMS 인증 등등)을 건다. 그러면, 

 

 

 이제 보안 탭에서 '앱 비밀번호' 메뉴가 눈에 띌 것이다.

 

앱 선택에선 '기타'를 고르고, 이름은 원하는 거 아무거나 입력한다. 사실 이 부분은 뭘 선택하든 크게 상관 없어 보이긴 하는데, 그래도 '메일' '유튜브' 이런 이름보단 좀 더 명확한 이름이 나을 것 같다.

 

 

 

 그러면 이제 여기 앱 비밀번호 16글자가 나온다. 이제 이걸 기존 비밀번호 대용으로 쓰면 된다.

 

 

 

 이게 끝이다.

생각보다 엄청 간단한데, 구글의 안내 페이지에서 그냥 옵션을 막기만 하고 이걸 제대로 설명해주지 않아서 당황스러웠다. ㅡㅡ;

 

 

 결론

 아래와 같이 입력하면 된다. 윈도우 기준이고 다른 os에서는 시도해 보진 않았다.

easy_install pip

 

대충 보충설명

 아마 저 증상 있으면 프롬프트에 관리자 권한 줘도 마찬가지고, python -m pip install --upgrade pip 이 명령어도 안 먹히고 있을 것이다. 이게 딴 라이브러리는 install이나 uninstall이 자유로운데 pip 자기 자신만 건드려고 하면 항상 저런 이슈가 있었다.

easy_install은 pip로 대체된, 현재는 deprecate 된 파이썬의 패키지 다운로더이다. easy_install도 결국은 pip와 똑같은 역할을 하는 프로그램이니, 다운로드를 받을 수 있는 것이다.

 

 

 사실 이 문제가 왜 생기냐가 궁금한데, 대부분 이렇게 해라라는 말만 있고 원인에 대해서는 명쾌하게 설명한 글을 찾지 못했다. 그래서 내 생각엔, 다른 패키지 설치나 제거가 자유로운데 pip 스스로에 대해서만 권한 문제 운운하는 걸로 봐서는 실제 폴더 권한 문제는 아닌거 같다. 사실은, pip 프로그램이 열린 상태로 자기 자신을 삭제하려고 해서 접근이 안 되고, 그래서 권한 문제처럼 보이지 않을까 한다. 엑셀 파일을 열어둔 채로, 해당 파일 삭제를 시도했을 때 안 되는 것과 똑같은 이치이다. easy_install은 pip와 별개의 프로그램이니까 접근이 자유로워서 업그레이드(=삭제 후 재설치)가 가능하다고 생각된다.

 

 

 heidisql 등의 원격 접속 툴을 이용해도 접속이 안 됐다. 포트, 방화벽 설정 등등 모두 확인해 봤고 로컬에서 잘 돌아가는 데도 원격 접속이 안됐다. 사실 원격 접속만 안 되면 상관 없는데, codeigniter에서도 똑같이 로그인을 못해서 자꾸 에러가 났었다.

 

 일단, MariaDB는 10.4부터 root 권한 소유자에게 따로 비밀번호를 물어보지 않는다. 즉, 루트 계정으로 로그인했으면 그냥 콘솔에 mysql 치면 접속이 된다. 물론 다른 유저는 전처럼 비밀번호를 물어본다. 나는 이 root 계정으로 로그인을 며칠째 계속 시도해 봤는데 계속 안됐다.... 포트 문제도 아니었고 딱히 통신 문제도 아니었다. 심지어 SSH 접속 계정도 root 였다.

 

해답은 새로운 계정을 파서, 그 계정으로 접속을 하니까 잘 됐다. 계정 만드는 SQL 문이야 검색하면 바로 나올 거니까 따로 적진 않겠다.사실 별 내용 없는 건 아는데 새 계정을 파서 시도하란 말을 며칠 내내 구글을 뒤진 다음에야 본 것 같아서, 혹시 같은 어려움을 겪는 사람들이 있다면 빨리 해결할 수 있었으면 좋겠다. 

  일단 글을 읽기 전에, 이 문제는 정말 여러 가지 원인일 수 있다. 한 마디로 요약하자면 가장 가능성이 높은 요인은 CUDA랑 Cudnn 라이브러리를 제대로 못 불러온 건데, 이걸 못 불러오는 원인이 천차만별이다. 심지어 아예 안깔렸을수도 있고. 내 경우에는 다른 텍스트 에디터(주피터 노트북 등등)에서 import tensorflow로 구동을 확인했고, 오직 pycharm 18.2 버젼에서만 저 오류가 떴었다. 심지어 내장된 파이썬 콘솔에서도 오류 없이 정상 작동했었다. ㅡㅡ;

 

 

https://pythonkim.tistory.com/137

 

윈도우10 + 텐서플로 GPU 버전 설치

얼마만인지 모르겠다. 블로그에 올린 많은 글들 중에 나름 봐줬으면 하는 글들이 꽤 있는데 통계를 보면 우분투에 텐서플로 GPU 버전을 설치하는 글이 가장 인기가 많다. 왜 그런지는 모르겠다. 아직 그 부분이 해..

pythonkim.tistory.com

 

 일단 이 블로그를 참조하면 좋겠다. 정말 잘 쓰셨고 나도 이 블로그를 참조해서 구동했다.

CUDA,cuDnn을 깔고 환경 변수까지 제대로 설정하고, cmd든 vscode든 다른 에디터로 일단 구동을 확인하면 좋겠다.

밑에서 설명할 해결법은 일단 정상적으로 타 환경에서는 작동한다는 것을 전제로 하기에, 이 단계에서 막히면 여기서는 아마 답을 찾기 힘들 것이니 이 블로그를 끄고 열심히 구글에서 검색하는 게 빠를 것이다.

 

 

 그리고 이제 본인이 파이참을 쓴다면 파이참의 버젼을 확인해보자. 19.1 이하의 버젼이라면 새로 업데이트 해 주자.

19.7월 기준으로 19.2 버젼이 나와있다.

18.x ->19.x는 바로 업데이트가 안 되고 19.x 인스톨러를 실행해서 구버젼을 지우고 새로 설치하게 된다. 물론 내부 설정은 그대로 연동할 수 있다. 구버젼 삭제 때 slient uninstall에 체크하고, 새 버젼 설치 때 기존 설정 폴더(아마 자동으로 선택되어 있을 것)을 선택하면 그 설정 그대로 설치된다.

 

 

 설치가 끝나면 프로젝트를 열고, 설정값을 불러오도록 좀 기다린 후 문제가 됐던 파일을 다시 실행시켜보니 잘 됐다.

그럼 문제해결인데...

 

 

 왜 이런 문제가 생겼냐, 그건 구 버젼 파이참에서 버그가 있었기 때문이다.

conda 가상환경을 사용할 때, 시스템 환경변수 중 PATH의 값이 정상적으로 불러와지지 않는 문제가 있었다.

tensorflow-gpu는 환경변수를 통해 cuda 같은 관련 라이브러리의 위치를 불러오니, 당연히 관련 dll이 정상적으로 import 될 리가 없다.

 

 

참고:

https://youtrack.jetbrains.com/issue/PY-27234

 

PyCharm incorrectly set PATH after conda venv activation : PY-27234

To reproduce: *create conda environment with Python 3.5 *install cvxopt *try to open Python console and run import cvxopt *result: `ImportError: DLL load failed: The specified module could not be…

youtrack.jetbrains.com

 19.1 까지도 안된다는 댓글이 몇 보이는데, 19.2 버젼에서는 해결됐다고 하고 나 역시 19.2 버젼으로 해결했다.

 

 버젼업을 하지 않고 해결하는 법은 자세히는 설명하지 않겠지만, 시스템 환경변수에서 PATH의 값을 긁어와서 파이참의 프로젝트 실행환경 설정에서 환경 변수 값에 방금 긁은 값을 복붙해서 넣으면 된다.

 

 

 교훈:

뭔가 안될땐 실행 환경도 바꿔보자. ide 자체 버그일수도 있다.

 

 

 

해답 : pip install opencv_contrib_python 를 사용해 보자. 

 

1. pip install opencv_python 으로 설치 시 실행은 되지만 import 에러가 발생했다.

2. 직접 whl를 다운받은 후 pip를 통해 설치했을 때도 에러가 발생했다.

3. 아예 opencv 라이브러리를 통째로(대략 1기가) 받은 후, python 폴더 안의 pyd 파일을 찾아서

로컬 라이브러리 폴더에 넣었을 때도 에러가 떴었다.

 

 나는 위와 같은 시행착오를 거치고 해답을 얻었다.

주의할 점으론, opencv 라이브러리는 여러 가지 버젼이 있는데, namespace가 겹치기 때문에 반드시 하나의 버젼만 설치해야 한다. 여러 개가 설치되어 있다면 하나만 남기고 uninstall 해주자. 공식 문서의 맨 위에 있는 내용이다.

 

참고 : https://stackoverflow.com/questions/43184887/dll-load-failed-error-when-importing-cv2

파이썬 3.7 / windows 10 사용.

+ Recent posts