IT/python 51

[python][virtualenv] 이미 가상 환경이 구축된 이후 설치된 전역 패키지 가져오기..

기록용으로 남깁니다. virtualenv 를 사용하다 보니 왠만한 것은 source ~/wiznet/venvA/bin/activate 한 다음에 정상적으로 pip3 로 설치 가능하지만 apt 패키지로 제공되는 것들은 root 계정 권한으로 설치되기 때문에 이미 virtualenv 를 구성한 다음에는 이를 자동적으로 참조할 방법은 없습니다. 현재 확인한 방법으로는 이를 찾아서 수동으로 복사하는 것입니다. 일단 제가 설치한 apt 패키지는 rpi.gpio 패키지입니다. sudo apt install rpi.gpio 전역 저장소를 찾습니다. find /usr -name 'site-packages' /usr/lib/pypy/lib-python/2.7/site-packages /usr/local/lib/pytho..

IT/python 2021.09.13

[python3] a bytes like object is required not 'str' 오류

기록용으로 남깁니다. 제목과 같은 오류 발생시 split() 등의 함수를 사용할 때 나타날텐데 넘어온 값이 str 이 아니라 bytes 로 되어 있어서 발생하는 오류입니다. 혹시 모르니 type 으로 자료형을 확인하거나 print 로 직접 출력해서 bytes 로 되어 있는 것을 확인해봅시다. bytes -> str 은 간단합니다. string_variable.decode() 하면 str로 변환됩니다. 이 결과물에 split()을 하던 다른 함수를 사용하면 되겠습니다.

IT/python 2021.07.16

[python] 윈도우10에서 python.exe 실행 경로 확인하기

venv 나 virtualenv 를 쓸 때 내 환경이 내가 지정한 env 에 잘 연결되었나 확인하고 싶을 때가 있습니다. 참고 글에 따르면 sys.path 를 출력해보면 알 수 있다고 합니다. 다만 vscode 기준 해당 폴더의 터미널에서 python3 를 실행시켜서 출력해보면 여전히 전역 python 경로가 출력됩니다. python3.exe 자체가 PATH 가 전역으로 잡혀있는 바이너리로 실행이 되었기 때문인데요 해당 테스트 코드를 cmd 상에서 하지 않고 빈 .py 파일을 만들어서 해당 코드에서 확인하면 현재 venv 에 포함된 경로를 의존하고 있음을 확인할 수 있습니다. import sys for p in sys.path: print(p) # or just sys.path # print(sys.pa..

IT/python 2021.07.01

[python3][vscode][pylance] operator "in" not supported for types literal and str int float 26,12 오류 끄기

기록용으로 남깁니다. vscode 에서 Ctrl + , 키를 눌러 설정 창을 엽니다. Search settings 항목에 pylance를 입력합니다. 어느 영역에 적용할 지에 따라 User, Remote, Workspace 탭을 선택합니다. User는 전역, Remote는 원격 접속시, Workspace 는 현 작업공간에 적용됩니다. 저는 일단 Workspace 를 선택했습니다. 항목을 보면 Python > Analysis: Type Checking Mode 라고 되어 있는 부분이 있습니다. off/basic/strict 의 3가지 값을 고를 수 있는데 이 오류는 off 를 선택해야 나오지 않았습니다. 경고를 끄면 정작 도움이 필요할 때 얻지를 못하니 신중하게 생각하고 결정하시기 바랍니다.

IT/python 2021.06.24

[python] 소켓이 사용중인 포트 확인하기

한개의 소켓을 사용할 때는 당연히 작성자가 포트를 지정했으니 포트값이 지정된 변수를 가져오면 쉽게 알 수 있습니다. 다만, 여러 개의 포트를 열었을 경우 반복문 등을 통해 실행하면 어떤 포트로 들어온 것인지 확인해야 하는 경우가 있습니다. getsockname() 함수를 사용해서 현재 소켓에 bind 된 ip와 포트 정보를 확인할 수 있습니다. import socket import select sockets = [] for port in [555, 777]: server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.bind(("0.0.0.0", port)) sockets.append(server_socket) empty ..

IT/python 2021.02.09

[python] json.dumps object of type bytes is not json serializable

기록용으로 남깁니다. dict 자료형으로 패킷 교환을 통해 ipc 를 잘 수행해왔는데 코드를 조금 수정하니 제목처럼 dumps 는 byte 자료형으로는 json 직렬화를 못한다는 오류를 보게 되었습니다. 뭘까 하며 코드를 보다 보니 기존 dict 에 bytes 값을 추가한 것이 눈에 띄었습니다. 감사하게도 순수 이진값이 아니라 base64로 인코딩된 byte 문자열이라서 해당 값을 decode 를 사용해서 문제를 쉽게 해결했습니다.

IT/python 2020.12.22

[python3] smtp 로 여러명에게 이메일 보내기

삽질을 거듭하다가 기록용으로 남깁니다. def smtphandler(self): smtp = None mailconfig = self.config['primaryServer'] if not mailconfig['server'] or not mailconfig['port'] or not mailconfig['uid'] or not mailconfig['pw'] or not mailconfig['sender']: mailconfig = self.config['secondaryServer'] if 'smtp/starttls': smtp = smtplib.SMTP('smtp.gmail.com', 587) elif 'ssl/tls': smtp = smtplib.SMTP_SSL('smtp.gmail.com', 46..

IT/python 2020.12.14

변수 범위 이해가 안감..

아래와 같이 a 값에 따라서 서로 다른 값을 갖는 dict 를 만들고 싶었습니다. def sendAlert(self, a, b, c, d): msg = {} data = {} content = None subject = None if a == 1: content = 'abc' subject = 'test' else: content = 'ddd' subject = 'test2' data['content'] = content data['subject'] = subject print(f'data={data}') 그런데 data = {} 만 나오네요... 같은 scope 일텐데... 이를 해결해보고자 content = 'abc' 바로 위에 global content 라고 넣으면 "content" is assig..

IT/python 2020.11.27