everydayminder
파이썬 스타일 가이드 PEP8에 대해 PEP는 Python Enhancement Proposal의 약자로, 그 중 8번째에 해당하는 것을 PEP8이라고 한다. 파이썬의 창시자인 Guido Van Rossum에 의해 제안된 PEP8은 파이썬 스타일 가이드를 제안하고 있다. PEP8 스타일의 파이썬 코드를 작성하다 보면, 가독성이 좋은 파이썬 코드를 작성하게 될 것이므로 파이썬 개발자라면 당연히 참고해야할 가이드라 할 수 있다. 본 글에서는, PEP8 가이드 중의 일부 항목을 살펴보고 소개하고자 한다. 스타일 가이드의 필요성 스타일 가이드는 쉽게 말하면, 일종의 규약 가이드이다. 여러 개발자들이 저마다의 경력과 백그라운드 및 경험이 다를텐데, 이 사람들이 모여서 프로젝트를 하다보면 자기만의 익숙한 스타일로 ..
디스코드 봇 커맨드 파라미터에 공백문자가 포함된 단어/ 문장을 전달하려면? 디스코드 봇 커맨드에 파라미터를 전달할 때 커맨드가 파라미터를 받지 않는 경우도 있지만, 사용자로부터 파라미터를 받아야 하는 경우도 있다. 게다가 파라미터에 공백 문자가 들어간 경우 혹은 문장 전체가 파라미터로 쓰이는 경우도 있다. 만약, 별다른 조치를 하지 않는다면, 입력값이 의도한 대로 전달되지 않는 것을 확인할 수 있다. 본 포스트에서는 이러한 현상을 확인하고, 어떻게 개선할 수 있는지에 대해 정리해 본다. 테스트 코드 @bot.command() async def echo(ctx, parameter): await ctx.reply(f'echo {parameter}') 위와 같이 명령어를 작성했다고 하자. 이 명령어는 커맨드 ..
embed로 디스코드 봇 메시지를 꾸며보자 디스코드 봇에서 메시지를 출력할 때, 틀을 잡고 꾸며주기 위해 사용할 수 있는 것으로 embed라는 것이 있다. embed를 사용하여 메시지 틀을 잡는 법에 대해 살펴보자. 디스코드 봇 embed 공식 가이드 embed에 대해 자세히 알고자 하면, 아래의 공식 API 가이드 문서를 참고하자. https://discordpy.readthedocs.io/en/latest/api.html?highlight=embed#embed 참고로, embed는 위와 같은 자료 구조를 갖추고 있다. embed 기본 문법 여러가지 옵션을 사용하면 다양한 표현이 가능하겠지만, 기본적인 사용법만 먼저 알고 넘어가자. embed 생성 embed = discord.Embed(title='타..
Heorku에 파이썬 디스코드 봇 연동하기 (깃헙기반) 앞서 Heroku의 기본 설정을 진행했다면, 이제는 실제 디스코드 봇을 연동해볼 차례이다. Heroku CLI를 사용하거나, 깃헙 연동을 하면 되는데 이 포스트에서는 깃헙 연동을 하는 방법을 다룬다. 사용한 코드 앞서 테스트한 디스코드 봇을 바탕으로 기본 디스코드 봇을 Heroku에 연동해 보고자 한다. 파이썬으로 디스코드 봇 개발 시작하기 (기본 구조 잡기) discord.py를 사용하여 디스코드 봇 개발 시작하기 디스코드 봇 개발을 위해 사전준비를 마쳤다면, 이제 본격적으로 개발하기 위해 틀을 잡아본다. discord.py 설치 아래 글들을 참고하여, discord.py 사 luran.me 깃헙 프로젝트 생성 혹은 연동 깃헙 프로젝트를 아래와 같..
파이썬 라이브러리 추출하기/ 설치하기 파이썬 코드에 선언된 import 문이 있다 하더라도, 해당 라이브러리들이 자동으로 설치되지는 않는다. 즉, 로컬 개발환경에서는 개발하면서 이것저것 설치를 했다하더라도, 실행되는 환경에서 이 라이브러리는 명시적으로 설치해 주지 않으면 정상적으로 실행되지 않는다는 것을 뜻한다. 내가 어떤 패키지들을 사용했는지 어떻게 확인할 수 있을까? 또, 확보한 패키지 목록을 바탕으로 어떻게 쉽게 런타임 환경에 패키지 의존성을 주입할 수 있을까? 설치된 패키지 목록 확인하기 pip 명령어를 활용하여 현재 환경에 이미 설치된 패키지 목록을 쉽게 추출할 수 있다. $ pip freeze aiohttp==3.7.4.post0 async-timeout==3.0.1 attrs==21.2.0 ..
Heroku를 사용하여 디스코드 봇 무료 호스팅 준비하기 만약 디스코드 봇을 개발했다면, 어디에 띄워둬야 실제 봇으로서 제대로 동작할까? 물론 내 PC에서 봇을 띄워놓고, 24시간 365일 운영해도 된다. 그러나, 개인 용도의 봇이 아니라 다른 사람들도 쓸 수 있는 봇이라면 별도의 서버 환경에서 봇을 실행시키는 것이 바람직하다. AWS, GCP, Azure 등의 클라우드 환경이 적합한 타겟이 될텐데, Heroku를 쓰면 가벼운 디스코드 봇을 무료로 띄울 수 있다. Heroku 가입하기 Heroku의 공식 사이트 링크는 아래와 같다. https://www.heroku.com/ 혹시 미리 가입했다면, 상단의 log in 버튼을 클릭하여 로그인하면 되고, 계정이 없다면 sign up 버튼을 눌러서 가입한다. ..
파이썬에서 문자열 포맷을 지정하는 여러가지 방법 파이쎤에서 String formatter를 사용하는 여러가지 방법에 대해 정리한다. 본 글에서는 가장 원시적으로 직접 문자열을 붙이는 시도로부터, % operator를 사용하기, format() 함수 사용하기, f-string 사용하기에 대해 간략하게 다룬다. 직접 concatenation 만약 파이썬에서 아래와 같은 내용을 출력해야 한다면, 어떻게 해야 할까? Name: John, Student Id: 1234, Major: Math 아주 원시적인 방법으로는, 문자열 붙이기(string concatenation)를 생각해 볼 수 있다. name = 'John' studentId = 1234 major = 'Math' s = 'Name: ' + name +..
PyCharm에서 pip 업데이트 오류가 발생한다면? PyCharm에서 특정 패키지를 설치하려고 할 때, 설치가 정상적으로 되지 않는다면 pip 자체가 우선적으로 업데이트 되어야 한다. 그런데, pip 업데이트부터 하려고 해도, pip가 업데이트 되지 않는다면 어떻게 해야 할까? PyCharm내에서 pip 업데이트 하기 윈도우즈 버전과 맥북 버전의 PyCharm에 따라 해당 설정하는 방법이 다를 수 있다. 맥북의 경우, Preferences > Python Interpreter 항목을 찾아들어가면 아래와 같은 창이 뜬다. 오른쪽의 패키지 목록 창을 클릭해 보자. 특정 패키지를 클릭하면, 상단의 화살표 부분이 활성화되고, 그 버튼을 누르는 것만으로도 해당 패키지가 업데이트 된다. (정상적인 상황이라면) 커..
디스코드 서버/ 봇 설치 후, 실행하다 이 에러가 난다면? 구글 코랩 및 주피터에서 디스코드(discord.py) 실행시 겪을 수 있는 오류이다. 내 경우는, 구글 코랩에서 디스코드 봇 실행과정에서 발생했고, 다음과 같이 문제를 해결했다. 혹시나 유사한 문제를 겪을 수도 있는 누군가를 위해 기록으로 남긴다. 디스코드 봇을 설치/ 테스트 해보고자 하는데, 기본 코드를 따라 하다 보니 RuntimeError: Cannot close a running event loop라는 에러가 발생하였다. 혹시나 하여, 로컬 PyCharm에서 실행해보니 정상적으로 실행되는 코드였다. 문제를 일으킨 코드 디스코드 채널이 정상적으로 생성되어 있고, 그 채널에 봇이 연결만 되어 있다면 아래 코드는 정상적으로 실행된다. 맥북에서..
로컬 맥북 혹은 구글 코랩에 discord.py 설치하기 파이썬용 디스코드 봇 API로, discord.py를 사용하면 손쉽게 디스코드 봇을 만들 수 있다. 파이썬이 있다는 전제가 깔려 있으므로, 맥북 로컬에 설치되어 있는 파이썬이 적어도 3.5 이상이면 좋고, 대안으로 구글 코랩이나 주피터 노트북/랩을 사용하여 파이썬 테스트 해볼 수 있을 것이다. 디스코드 설치하기 맥북에서 디스코드(discord.py)를 설치하는 방법과, 구글 코랩에서 설치하는 방법 순서로 살펴보자. 맥북에서 디스코드 설치하기 맥북에 discord.py가 기본적으로 설치되어 있지는 않다. discord.py의 설치 여부를 다음의 명령어 중 하나로 간단하게 확인해 볼 수 있다. $ python -c "import discord" 혹은 ..
디스코드란? 디스코드는 인스턴트 메신저 중의 하나로 음성, 채팅, 화상통화 등을 지원하는 VoIP 솔루션이다. 2015년 9월에 모바일 게임인 Fates Forever 지원하기 위해 최초 출시되었으며, 뛰어난 성능을 기반으로 그 이전의 다른 VoIP 기반 메신저를 제치고 주류 메신저가 되었다. 초기에는 음성채팅과 일반채팅을 지원하는 수준에 지나지 않았으나, 직관적이고 게임 친화적인 다양한 업데이트를 꾸준히 지원하여 현재는 게임 메신저의 대명사가 되었다. 윈도우즈, 안드로이드, iOS, 리눅스, 맥, 웹브라우저 등 다양한 플랫폼을 지원하며, 디스코드 봇을 통해 디스코드 서버의 다양한 기능을 사용할 수 있도록 지원하고 있다. 디스코드의 소개 페이지를 살펴보면, 굉장히 젊고, 트렌디함을 느낄 수 있다. 왜 디..
파이썬으로 MySQL 사용하기 Python으로 MySQL에 접속하고, 데이터를 다루려면 여러 라이브러리가 있다. 마침 StackOverFlow에도 이와 관련한 Q&A가 있어서 살펴보고 선택하고자 한다. https://stackoverflow.com/questions/43102442/whats-the-difference-between-mysqldb-mysqlclient-and-mysql-connector-python What's the difference between MySQLdb, mysqlclient and MySQL connector/Python? So I've been trying to do some database update with python and while setting up the w..
파이썬 개발환경 구축하기 - 아나콘다 주피터랩/주피터노트북 설치방법 파이썬 개발 환경을 구축하고자 아나콘다(Anaconda)를 설치하는 방법에 대해 기록한다. 사실 제목에는 아나콘다를 먼저 썼지만, 보다 맞는 제목은 아나콘다로 주피터 노트북/주피터 랩 설치하기가 맞을 것 같다. 덤으로, 커맨드 라인으로 주피터 노트북/ 주피터 랩을 설치하는 방법까지 함께 다룬다. 그리고, 좀 더 스코프를 줄이자면 주피터 랩 설치하기라고 할 수 있을 것이다. 아나콘다 설치 https://www.anaconda.com/products/individual 64 Bit Graphical User Installer를 선택하여 설치한다. 특별히 다르게 설정할 내용은 없고 클릭만 누르면 기본적인 설치는 완료된다. 설치를 완료하면, A..
파이썬에서 pytest로 단위테스트 사용하기 unittest를 많이 쓰고 있는 것 같으나, 너무 많은 bolierplate를 작성해 줘야 한다는 느낌이 들어 대안을 찾아본다. py.test를 실험해 보자. 설치는 다음과 같다. 설치 pip install pytest 테스트 앞서 unittest용으로 작성한 테스트를 변경한다. 원래 버전에 가깝게 되었다. # test_by_pytest.py from lib import func def test_add_1_case1(): assert func.add_1(1) == 2 def test_add_1_case2(): assert func.add_1(1) == 1 이제 pytest로 해당 결과를 보면, 다음과 같이 더 가독성이 좋은 리포트가 나온다. pytest -v..
python unit test - unittest 적용방법 이제 프로젝트의 메인 모듈과 테스트 파일을 분리해서, 기존과 같이 동작하는지 확인해 보자. 구조는 아래의 구성을 따른다고 가정한다. project ㄴ lib ㄴ func.py ㄴ tests ㄴ test_func.py 앞서 작성한 test_func.py의 내용의 구현부와 테스트부를 별도 파일로 나눠놓자. # lib/func.py def add_1(x): return x + 1 # tests/test_func.py def test_add_1_1plus1(): assert add_1(1) == 2 def test_add_1_1plus2(): assert add_1(2) == 1 이렇게 파일을 분리하고, nosetests를 돌리면, add_1 funct..