목록Python (38)
규도자 개발 블로그
pip 모든 패키지 삭제하기 + xargs명령어 가끔씩 개발을 하다보면 실수로 프로젝트 venv환경이 아닌 System Interpreter로 설치된 python에 패키지를 설치해버릴 때도 있고, 패키지 버전을 바꿔야 하는데 의존성으로 인해 여러개의 패키지가 깔려있는 상태에서 같이 버전을 바꿔줘야 하는 둥 pip로 설치한 모든 패키지를 전부 싹 밀고 다시 패키지를 설치하는 게 속시원할 때가 있다. 그때 쓰면 좋은 명령어다. $ pip freeze | xargs pip uninstall -y 여기서 xargs라는 조금은 생소한 명령어가 있는데 명령어 출력을 다른 명령어의 인자값으로 전달하는 함수이다. 고로 pip freeze명령어를 통해 조회된 모든 패키지 리스트들에 대해서 각 줄마다 pip uninsta..
네 자료형을 관성적으로 쓰고 있었는데 확실하게 짚고 넘어가야할 것 같다. 네 자료형의 공통점과 차이점들이 서로 엮여있기 때문에 다른 사람들이 정리한 여러가지 자료를 봐도 잘 기억에 남지가 않으니까 최대한 한눈에 쉽게 알아볼 수 있게 정리해봤다. 범례 리스트 (List) 튜플 (Tuple) 셋 (Set) 딕셔너리(Dictionary) 선언 [] or list() () or tuple() {} or set() {k: v} or dict(a=1, b=2) 중복 허용 O O X Key는 중복 안됨. Value는 중복 가능. 인덱스로 값 불러오기 O O X Key로 불러와야 함 수정 가능 여부 O X O Value 수정 가능 For문 동작 여부 O O O O 같은 자료형 연산 +로 붙이기 가능 +로 붙이기 가능 ..
파이썬으로 여러 개의 웹소켓에 동시에 연결하기 토이프로젝트로 퀀트 프로그램을 하나 제작하고 있는데 맨 처음에는 각종 거래소에서 제공하는 api를 사용할까 하다가 초당 요청제한이라는 문턱에 걸렸다. 수학모델에 근거해서 전략의 타당성을 검토해야 하는데 수백종류의 암호화폐 데이터를 1초에 한번씩 api로 요청해 저장하려고 하니 터무니 없는 생각이긴 했다. 그렇다고 1분을 쪼개서 요청을 보내자니 엄청난 변동성의 암호화폐시장에서의 수학모델 분석에는 적절하지 않다는 생각이 들었다. 그래서 웹소켓을 찾아보니 다행스럽게도 거의 모든 거래소에서 웹소켓을 지원하고 있더라. 만약에 다양한 플랫폼, 혹은 한 플랫폼에서도 다른 웹소켓 라우트에서 필요한 정보가 있으면 여러개의 웹소켓에 연결할 필요가 있다. 그럴 때 사용하기 좋은..
파이썬 람다(lmbda)란 람다는 "익명함수"를 의미한다. 그럼 또 의문이 든다. 엥? 익명함수가 뭐냐? 익명함수는 함수는 함수인데 기존처럼 함수명을 명명하지 않고도 쓸 수 있는 함수를 의미한다. 기존 함수가 def sum_ab(a, b): return a + b print(sum_ab(1, 2)) # 3 위와 같이 명명하고 사용하는 것과 달리 람다는 sum_lambda = lambda a, b: a + b print(sum_lambda(1, 2)) # 3 이런식으로 변수에 할당해서 사용할 수도 있다. 근데 보통의 함수도 변수에 담아서 사용할 수 있다. def sum_ab(a, b): return a + b print(sum_ab(1, 2)) # 3 test = sum_ab print(test(1, 2)..
이건 내가 실무를 하면서 겪었던 실수 + 실수를 잡아준 고마운 분에 대해서 쓰는 얘기다. 파이썬으로 코딩을 하면서 이런 일이 있었다. 어떤 동작을 하는 함수를 작성해야 하는데 변수 A안에 문자열이 있으면 제대로 변환된 A를 반환하고, 없으면 False를 반환해주는, 그런 코드였다. 그래서 난 간단하게 def 어쩌구(A=False): if A: A = 변환된 문자열 return A 이런 느낌으로 작성했다. 이 코드에서 잘못된 부분이 보이는가? 제목에서 유추할 수 있다시피 A=False가 틀렸다. A에 문자열이 담기기로 했으면 끝까지 문자열이라는 걸 밝혀야 한다. 심지어 문자열이 들어오지 않았을 때 False처리를 해야한다손 쳐도 A에 직접 False를 넣으면 안되고 빈 문자열을 넣어야 한다. 위 코드는 이..
해당 에러는 django에서 쓰는 패키지인 allauth나 django-rest-auth등 인증 관련 패키지에서 자주 볼 수 있다. 해결법은 간단하다. Site와 일치하는 Query가 없다는 에러이니 Site와 일치하는 Query를 추가해주면 된다. django project root(manage.py가 있는 곳)에서 아래 명령어를 실행하여 django shell로 들어가자. $ python manage.py shell 그리고 아래 명령어를 통해 from django.contrib.sites.models import Site new_site = Site.objects.create(domain='ip혹은 도메인', name='프로젝트 이름') django_site테이블에 정보를 등록해주면 된다.
파이썬3(python3)에서 문자열 자르는 함수. split()과 split(' ')의 차이. 일단 split()함수는 괄호에 들어오는 문자를 기준으로 문자열을 리스트로 잘라 리턴하는 함수이다. 따옴표가 있냐 없냐의 차이는 간단하게 표현할 수 있다. split()은 모든 공백을 한번에 처리한다. split(' ')은 이후 공백을 전부 따로따로 처리한다. 간단한 예를 하나 보자. print("a bb ccc dddd ".split()) print("a bb ccc dddd ".split(' ')) a뒤는 스페이스 하나. b 뒤엔 두개. c뒤엔 세개. d뒤엔 네개가 있다. 콘솔창에 출력되는 결과는 이렇다. ['a', 'bb', 'ccc', 'dddd'] ['a', 'bb', '', 'ccc', '', '',..
Django로 개발할 때 꼭 주의해야할 점 django로 개발할 때 편한 점이라고 하면 어플리케이션 개발환경을 구축할 때 기본적으로 sqlite를 만들어줘서 개발하려는 컴퓨터에 DB server를 따로 만들어 연결하지 않고도 개발에 착수할 수 있다는 점인데 이게 치명적으로 작용할 수 있다. 이유는 바로 Django의 Queryset이 DB에 의존적이기 때문이다. Django는 생쿼리를 되도록이면 자제하는 ORM(Object Relational Mapping) 프레임워크이다. 근데 아이러니하게도 이 ORM이라는 정체성을 갖게 해주는 Queryset이(예: Post.objects.all()등으로 얻는 모든 객체) DB에 의존적이다. 그러니까 작성된 명령어에 따라 sqlite에서는 이렇게, mysql에서는 저..
django에서 object queryset을 여러 기준으로 ordering하기 + object filter의 order_by 기준을 동적으로 구성하기. 이런 저런 작업을 하다가 Big aha moment를 만나서 적어두려 한다. 다른 부분은 거두절미 하겠다. 이러한 모델이 만들어져있다는 가정 하에 시작할 것이다. class Post(models.Model): title = models.CharField() #제목 content = models.TextFiled() #내용 timestamp = models.DateTimeField(default=timezone.now) #만들어진 시간 like_count = models.IntegerField() #좋아요 눌린 횟수 view_count = models.I..
파이썬 패키지를 독립적으로 테스트하는 방법 + 파이썬 패키지에 대한 기여를 하다. 현재 작업하고 있는 사이트가 있는데 메인터넌스모드가 필요하여 만들까 하다가 혹시나 싶어 https://djangopackages.org/이곳을 뒤져봤는데 역시나 멋드러지게 만들어진 게 있었다. https://djangopackages.org/grids/g/maintenance-mode/ 여기에서 메인터넌스 모드에 대한 패키지들을 살펴볼 수 있는데 "DJANGO-MAINTENANCE-MODE"와 "DJANGO-MAINTENANCEMODE"라는 두 개의 패키지가 1, 2위를 두고 각축을 벌이고 있었는데 (놀랍게도 다른 패키지다) DJANGO-MAINTENANCE-MODE에 내가 별 하나를 더 추가해줘서 1위를 차지하게 됐다. ..