본문 바로가기

분류 전체보기225

파이썬 SSL 오류 발생시 ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1002)from OpenSSL import SSLfrom socket import socketfrom datetime import datetimedef get_ssl_expiry_datetime(hostname: str) -> datetime: ssl_socket = SSL.Connection(SSL.Context(SSL.SSLv23_METHOD), socket()) ssl_socket.connect((hostname, 443)) ssl_sock.. 2023. 7. 12.
amazon linux 2 - 파이썬 3.11 설치 sqlite와 ssl 사용시 문제 나올 수 있으니 주의 (아직 해결책 못찾음) ModuleNotFoundError: No module named '_sqlite3' ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1002) --- 필요한 도구들 사전 설치 파이썬 3.10 부터는 openssl1.1.1 이상이 필요 (링크) sudo yum update -y sudo yum groupinstall "Development Tools" -y sudo yum erase openssl-devel -y sudo yum in.. 2023. 7. 10.
tkinter - 입력란 내용 없으면 버튼 비활성화 예제에 따라 bind와 trace가 섞여있어서 햇갈렸으나 trace가 더 적절하다고 판단됨 구글 바드에 의하면 차이가 이렇다 bind와 trace는 모두 Tkinter에서 이벤트에 응답하는 데 사용되는 메서드이지만 작동 방식이 다릅니다. bind 메서드는 이벤트와 이벤트에 대한 응답으로 호출되는 함수를 연결하는 데 사용됩니다. trace 메서드는 변수의 값이 변경될 때마다 호출되는 함수를 연결하는 데 사용됩니다. 버튼 배치의 경우 그리드와 팩이 있는데 여기서는 팩 사용 (출처 : 뤼튼) pack(): pack은 요소를 부모 위젯 안에서 가능한 한 작은 공간에 맞추어 배치합니다. 위젯들은 기본적으로 상단에서 아래로 쌓이며, 옵션으로 왼쪽에서 오른쪽으로 배치할 수도 있습니다. pack은 간단한 인터페이스에 .. 2023. 5. 11.
판다스 치트시트 # 한글 깨짐 방지 (윈도우) plt.rcParams["font.family"] = "Malgun Gothic" plt.rcParams["axes.unicode_minus"] = False # 결측치 0으로 채우기 df = df.fillna(0) # 컬럼 리네임 df.columns = ["apple", "banana"] # 컬럼 선택 또는 순서 변경 df = df[["banana", "apple"]] # 정렬 df.sort_values(by=['age','name'], ascending=[True,False]) #x틱 회전 plt.xticks(rotation=45) # 모든 셀에 함수 적용하기 df = df.applymap(lambda x: x+5) # 누적영역 차트 모든 컬럼 선택 plt.stackpl.. 2023. 4. 27.
비동기로 웹크롤링 from bs4 import BeautifulSoup as bs import aiohttp import asyncio async def fetch(session, url, i): async with session.get(url) as res: html = await res.text() soup = bs(html, "html.parser") tag = soup.find("span", class_="title") # 첫번째 글제목만 print(f"{i+1} : {tag.text}") async def main(): BASE_URL = "https://myinbox.tistory.com/" urls = [f"{BASE_URL}?page={i}" for i in range(1, 11)] async with ai.. 2023. 4. 1.
[장고] 알아두면 좋은 내용 * 프로젝트 생성 별도로 경로 지정 안하면 하위 폴더를 루트로 사용함 https://learn.microsoft.com/ko-kr/training/modules/django-get-started/5-exercise-first-project * 사이트와 앱 메인 사이트의 자식으로 앱 폴더가 위치할거 같지만 실제로는 메인 사이트와 여러 앱이 동일 경로에 위치 개념적으로는 사이트 안에 설문조사 앱, 고객센터 앱 등으로 사용 * 뷰 용어는 뷰인데 실제로는 컨트롤러 뷰에서 HTML을 직접 심기도 가능하지만 일반적으로 모델과 템플릿 중간에서 중재하는 역할 * URL 루트에서 바로 처리 가능하긴 한데 앱으로 보낸 후 앱에서 처리하도록 하는 것이 관리적으로 용이 (앱이 늘어날 수 있으므로) 실제 주소 대신 변수 패턴으.. 2023. 2. 14.
[홈어시스턴트] 아이폰 배터리 부족시 구글홈 미니로 알리기 라즈베리파이에 도커 방식으로 홈어시스턴트 설치 후 아이폰 단축어를 통해 구글홈 미니 연동하기 데이터 관리용 폴더 생성 sudo mkdir -p /data/ha HA 설치 sudo docker run -d \ --name homeassistant \ --privileged \ --restart=unless-stopped \ -e TZ=Asia/Seoul \ -v /data/ha:/config \ --network=host \ ghcr.io/home-assistant/home-assistant:stable HA 실행 라즈베리IP:8123 아이폰 단축어 자동화 ---- https://www.home-assistant.io/installation/raspberrypi#install-home-assistant-c.. 2023. 1. 28.
pandas - 데이터프레임 변동 체크 주기적으로 실행하는 스크립트가 있는데 데이터프레임이 이전 값과 같은지 비교하려고 했다 처음엔 csv로 저장 후 해시값을 비교했는데 찾아보니 더 간단하게 구현 가능했다 import pandas as pd pkl_path = "./data/test.pkl" df1 = pd.DataFrame({"a": [1], "b": [1]}) df2 = pd.DataFrame({"a": [1], "b": [2]}) # 첫번째 df를 pickle 포맷으로 저장 df1.to_pickle(pkl_path) # 기존 피클 불러오기 df_old = pd.read_pickle(pkl_path) # 두번째 df와 비교 print(df2.equals(df_old)) 참고 - 파이썬 피클 https://aplab.tistory.com/e.. 2023. 1. 26.
아마존 리눅스 zsh 셋팅 zsh 설치 sudo yum install zsh 패스워드 없으면 생성 sudo passwd ec2-user 기본 쉘 변경 sudo yum install util-linux-user chsh -s $(which zsh) 터미널 재접속 후 기본 쉘 확인 (처음에 객관식 물어보면 0번) echo $SHELL oh-my-zsh 설치 sudo yum install git sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" 다른 테마로 변경 vim ~/.zshrc # vscode에서는 code ~/.zshrc ZSH_THEME 항목 수정 (ex. ZSH_THEME="agnoster") 테마 리스.. 2023. 1. 26.