everydayminder
로컬 맥북 혹은 구글 코랩에 discord.py 설치하기 파이썬용 디스코드 봇 API로, discord.py를 사용하면 손쉽게 디스코드 봇을 만들 수 있다. 파이썬이 있다는 전제가 깔려 있으므로, 맥북 로컬에 설치되어 있는 파이썬이 적어도 3.5 이상이면 좋고, 대안으로 구글 코랩이나 주피터 노트북/랩을 사용하여 파이썬 테스트 해볼 수 있을 것이다. 디스코드 설치하기 맥북에서 디스코드(discord.py)를 설치하는 방법과, 구글 코랩에서 설치하는 방법 순서로 살펴보자. 맥북에서 디스코드 설치하기 맥북에 discord.py가 기본적으로 설치되어 있지는 않다. discord.py의 설치 여부를 다음의 명령어 중 하나로 간단하게 확인해 볼 수 있다. $ python -c "import discord" 혹은 ..
주피터 랩/주피터 노트북 - password or token 입력창 뜨면? 아나콘다를 네비게이터를 실행하여 주피터랩/주피터노트북을 띄우려고 했더니, 다음과 같이 이미 실행 중인 인스턴스가 있다고 뜬다. 그리고, 브라우저를 통해 URL에 접속을 시도했더니 다음과 같은 창이 뜬다. Password 또는 Token을 입력하라고 한다. 문제 해결 친절하게도 해결책까지 스크린샷에 포함되어 있으니 그대로 따라해 보자. 즉, 1의 칸의 내용을 채워야 하는데 그 값은 2의 명령어로 확인 가능하다는 뜻이다. 터미널을 열고, 안내된 명령어를 입력해서 확인해 본다. $ jupyter notebook list http://localhost:8891/?token=2297dd42140a810437e50fe2b789909b1db0..
파이썬 개발환경 구축하기 - 아나콘다 주피터랩/주피터노트북 설치방법 파이썬 개발 환경을 구축하고자 아나콘다(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..
파이썬 프로젝트를 위한 Jenkins 설정 (Docker 사용) 앞서 Docker의 Kitematic으로 Jenkins 이미지를 받아서 띄워봤는데, Python 프로젝트를 위해 몇몇 설정을 변경하기 위해 직접 Docker 이미지를 만들어보자. Dockerfile 작성 Dockerfile을 만들고 아래와 같이 내용을 넣자. # Dockerfile FROM jenkins:latest USER root RUN apt-get update # pip 설치 RUN apt-get install -y python-pip ENV JAVA_ARGS -Xms512m -Xmx1024m RUN apt-get update && \ apt-get install -y make build-essential libssl-dev zlib..
앞서 virtualenv 기반 환경 설정 방법 virtualenvwrapper를 사용하여 환경 전환 편의성을 높이는 방법 에 대해 정리해 뒀다. python2.x와 python3.x가 로컬에 이미 설치되어 있을 때는 위 방법만으로도 충분할 수도 있다. 그런데, 더 다양한 버전의 python을 설치하고 테스트해 봐야한다면 이 방법만으로도 괜찮을까? pyenv를 써서, 다양한 버전의 python을 쉽게 설정할 수 있다는 것도 알아봤는데, 이와 virtualenv를 조합하면 어떨까? 본 포스트에서는, 다양한 버전의 python을 pyenv와 virutalenv를 조합 사용하는 방안에 대해 기록하고자 한다. pyenv-virtualenv 설치 brew install pyenv-virtualenv 위와 같이 입력..
pyenv로 여러 버전의 파이썬을 사용하자 python3가 출시된지 오래되었으나, 아직 python2는 많이 사용되고 있다. 결국, python2와 python3의 버전 변경은 아직도 자주 겪는 일이 될 수 밖에 없을 것이다. 앞서, virtualenvwrapper를 통해 python2와 python3 switch를 하는 방법을 포스팅했으나, 다른 방법으로 여러 버전의 python을 컨트롤 하는 방법에 대해 기록으로 남긴다. pyenv라는 툴을 사용해 보자. pyenv 설치 brew update brew install pyenv 설치 후, echo $PATH 를 해보면, 기존과 변화가 보일 것이다. /Users/사용자계정/.pyenv/shims: 가 자동으로 추가되어있을 것이다. pyenv가 동작하면서,..
보통 python 2.7.x가 설치가 되어 있고, python3은 별도 설치해야 하는데, 여전히 ver 2.x에 대한 의존도가 있어서, 별도 개발환경을 3.x로 맞추고 싶다. brew install python3로 osx에 python3을 설치하자.설치를 완료하면, $ python Python 2.7.10 (default, Jul 30 2016, 18:31:42) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin Type "help", "copyright", "credits" or "license" for more information./usr/local/bin/python3에 symbolic link가 있는 것을 확인하고, $ pyt..
python 개발 환경 설정 중, virtualenv를 쓰다 매번 activate를 하기 위해 설정위치/bin/activate로 활성화하고, deactivate로 비활성화 하는 것이 번거로웠는데, 이를 좀더 쉽게 도와주는 virtualenvwrapper를 알게 되었다. 설치 sudo pip install virtualenv virtualenvwrapper 로 하면 될텐데, 내 경우는 패키지 설치도중 permission 에러가 발생하여, sudo pip install --ignore-installed virtualenv virtualenvwrapper로 설치완료했다. 환경 설정 mkdir ~/virtualenvs.bash_profile 또는 .zshrc 등과 같은 본인 SHELL 설정 파일에 export ..
twistedmatrix에서 callInThread()와 callFromThread()는 어떻게 다른 것일까? 무심코, 코드에서 callInThread()를 썼는데, 그 차이를 궁금해 하다가 문서 및 소스를 찾아보게 되었다. 1. The Twisted Documentation 보기 우선 살펴본, The Twisted Documentation에서는 callFromThread()는 thread-safe하지 않은 메소드를 thread-safe하게 실행시킬 때 사용한다고 한다. 다른 설명으로는, thread-safe하지 않은 메소드를 메인 이벤트 루프에서 실행되도록 스케쥴한다고 한다. from twisted.internet import reactor def notThreadSafe(x): """ do somet..
현재 실행하는 클래스의 이름과 메소드 이름, 라인 넘버를 얻어보자. 클래스의 인스턴스에서 호출한다는 가정하에, def trace(obj, toList = False): import sys className = obj.__class__.__name__ methodName = callersname() lineNumber = sys.exc_info()[2].tb_lineno if toList: return className, methodName, lineNumber else: return "%s.%s[%d]" % (className, methodName, lineNumber) 단, callersname()은 def callersname(): return sys._getframe(2).f_code.co_name..
# 현재 함수의 이름 얻기 def whoami(): import sys return sys._getframe(1).f_code.co_name # 현재 함수의 caller 이름 얻기 def callersname(): import sys return sys._getframe(2).f_code.co_name 출처 : Python Recipe 66062: Determining Current Function Name
ElementTree와 같은 패키지를 사용하여 XML를 파싱하는 경우, XML 엘리먼트의 짝이 안맞는 등, 유효하지 않은 XML 구성이 탐지되면 ExpatError가 뜨는데, try: # XML 연산 catch ExpatError, e: # do something 하면, NameError: global name 'ExpatError' is not defined라는 에러가 뜬다. 이를 해결하려면, ExpatError를 catch하는 py 파일의 앞에, scope을 맞춰서 from xml.parsers.expat import ExpatError 라고 넣어주자. 그러면, 문제 해결!! '' While you are using XML packages such as ElementTree, you might wan..
ㅁ Queue.Queue 1. push('a') : 6.39s 2. push('a') + pop() : 11.37s ㅁ collections.dequeue 1. append('a') : 0.13s 2. append('a') + popleft() : 0.27s ㅁ list 1. append('a') : 0.15s 2. append('a') + pop() : 0.40s Queue를 쓰려면, dequeue를 활용하는 것이 좋을 것 같다.