Python3 27

[Airflow] Apache Airflow Test Case 작성하는 법

최근 Apache Airflow를 만질 일이 생겼다. 여러 Task 들을 작성하기는 했는데 테스트 코드를 어떻게 작성할 지에 대한 감도 잡히지 않았고 이걸 직접 다 돌려보는 풀테스트를 작성해야하나 긴가민가 했다. 그리고 짧은 조언을 받았는데 기본적인 테스트 코드들이 있었으면 좋겠다는 리뷰를 받았다. 그러니 앞으로는 테스트는 기본으로 가져가자는 마인드를 가져야겠다. 그래서 airflow 에 대해 간단한 Test Case를 작성하는 법을 알아보고자 한다. 우선 pytest를 사용할 것이기 때문에 pip install을 해주자. mock 테스트 안할 거면 후자는 빼줘도 되요~ pip3 install pytest pytest-mock 그리고 아래와 같은 dag와 task 들을 정의해줬다고 가정하자. from d..

[Python3] python3의 itertools.groupby 사용

문제가 풀리지 않아서 솔루션을 찾아보던 중 처음보는 function을 사용하는 솔루션을 보게 되었다. groupby 라는 function 인데 이런걸 본적이 있나 싶었다. 검색을 해보니 pandas 에서 사용하는 groupby 가 가장 먼저 나왔다. 하지만 좀 더 찾아보니 pandas 의 groupby가 아니라 itertools 의 groupby 였다. pasdas groupy는 같은 값을 하나로 묶어 통계 또는 집계를 위해 사용한다고 한다. 만약 도시 별로 가격 평균을 구한다고 가정하면 아래와 같은 코드가 나올 수 있겠다. object.groupby('city').mean() 자세한 내용은 다음 링크에서 찾아볼 수 있다. https://ponyozzang.tistory.com/291 itertools의..

[Django] Django 에서 테스트 코드 부분 실행하기

만약 테스트 코드를 일부 실행하고 싶다면 아래와 같이 진행하면 된다. app 명 + 테스트 코드 디렉토리명 + 테스트 코드 .py파일명 + 테스트 코드 클래스 + 테스트 클래스 메서드 명 순으로 적어주면 된다. # Run the specified module python3 manage.py test catalog.tests # Run the specified module python3 manage.py test catalog.tests.test_models # Run the specified class python3 manage.py test catalog.tests.test_models.YourTestClass # Run the specified method python3 manage.py test c..

Python3/Django 2022.08.18

[Django] CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.

Django 를 production 상에서 운용할때는 반드시 DEBUG = False 로 두고 실행해야 한다. 그 이유는 DEBUG = True 로 두고 운용을 하게 되면 서버 운용 중 발생한 오류가 사용자에게 보이기 때문이다. 이 때문에 해커가 프로젝트의 구조를 파악할 수도 있게 된다. 그래서 반드시 DEBUG=False 로 두고 운용해야 하는데 막상 DEBUG = False 로 두고 runserver 를 돌리니 다음과 같은 에러가 발생했다. CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False. 어떻게 해결할 수 있을까? 해결법은 간단하다. 에러 로그가 하는 말 그대로 진행하면 된다 . settings.py 에 있는 ALLOWED_H..

Python3/Django 2022.08.18

[Django] drf-yasg가 적용되지 않을때 + ImportError: cannot import name 'url' from 'django.conf.urls' + frozen importlib

Django 를 사용해서 api 개발을 하던 중 api 스펙을 자동으로 생성해주는 drf-yasg 를 사용하려고 했다. 그런데 계속 frozen importlib 에러가 지속적으로 발생했고 django.conf.urls 에서 url 을 import 할 수 없다는 에러가 발생했다. 근데 당시에는 너무 바쁘고 일이 많아서 api 자동 생성을 후순위로 밀어두고 기능 개발을 빠르게 진행했었다. 그러다가 다시 api 를 살펴볼 일이 생겼는데 아예 오늘 drf-yasg 오류를 잡고 api generation을 끝내자고 생각해서 문제를 해결하게 되었다. 우선 ImportError: cannot import name 'url' from 'django.conf.urls' 는 버전 이슈다. 스택오버플로우를 참고한 결과 아..

Python3/Django 2022.08.18

[Python3] is와 == 의 차이

나는 처음에 이 둘이 완벽하게 동일하다고 생각했다. 사건의 발달은 이러하다. 조건문을 써줄 일이 있었는데 != 을 is not 으로 명시해주었다. 이렇게 하면 읽는 사람이 좀 더 쉽게 읽을 수 있을거라고 나름 생각했다. 그런데 문제가 생겼다. 당연히 될거라고 생각했는데 정상 동작하지 않았다. is 가 무엇일까에 대해서 검색해보면 해답을 찾을 수 있다. is 는 ==와 달리 값을 비교하는게 아니라 레퍼런스 즉 포인터를 비교한다. python3 에서 변수는 내부적으로 데이터를 가리키는게 아니라 인스턴스 포인터를 가리킨다고 한다. 그러니 쉽게 말하면 is 연산자는 포인터(레퍼런스)를 비교하는 연산자이지 데이터를 비교하는 연산자가 아니라는 것이다. 그러니 주로 None 과 False, True 를 비교할때 사용..

[Django] 10분이면 읽는 Django 기초 개념 정리 (입문자용)

7월 1주차에 급하게 Django 를 써야할 상황이 생겨서 이틀간 Django를 압축적으로 학습할 일이 생겼다. 그간 학습한 내용들을 간단하게 정리하도록 하겠다. 개인적으로 빠르게 학습하면서 (빠르게라기 보다는 급하게가 맞겠다.) 적은 내용들이라 다소 형식이 올바르지 못하더라도 필요한 내용들만 압축해서 정리해놓았다. 목차: 서버 구동 및 초기 설정 MTV 패턴 view (HTTP request, HTTP resposne) model (클래스 필드에 대하여, CharField, IntegerField, EmailField) DB migration, migrate DB 엔진 설정 (Mysql 연동 방법) Model api 사용법 (장고 기본 지원 ORM 사용법 - insert, select, update, ..

Python3/Django 2022.07.17

[Django] Django에서 AbstractUser의 password 암호화, User모델 확장

Django를 사용해서 서비스를 개발 중이라고 가정하자. 우리는 보통 서비스를 만들때 User 모델을 정의하게 된다. 사용자 비밀번호, 아이디, 이름, 이메일, 가입날짜 등등을 이 모델안에 정의하게 된다. 그런데 이것만 가지고는 Django의 장점을 활용하기엔 부족하다. 그래서 Django에서는 User모델을 확장할 수 있게 도와준다. 확장을 해야 진짜 Django의 간편함을 누릴 수 있다. 어떻게 확장할까? 바로 상속을 통해서 가능하게 해준다. User모델을 정의하고 나면 우리는 AbstractUser를 상속받게 할 수 있다. 그리고 AbstractUser 안에는 username, password, email 등등의 기본적인 필드들이 존재한다. 미리 정의되어 있다. 그리고 우리는 상속을 통해 그 필드들..

Python3/Django 2022.07.15

[Django] Fatal error in launcher: Unable to create process using 에러 발생

djangorestframework-simplejwt를 install 하려는 와중에 pip에서 계속 문제가 발생했다. Fatal error in launcher: Unable to create process using 한참을 찾아보고 PATH값도 다시 수정해주는 작업을 했지만 소용이 없었다. 그리고 정말 간단한 해답을 찾았다. 내가 하려던건 pip install djangorestframework-simplejwt 였는데 이걸 아래처럼 입력해주면 해결된다. python -m pip install djangorestframework-simplejwt 명령어 앞에 python -m 을 붙여주면 된다. 아마 vscode 혹은 python 설치경로 지정에서 문제가 있엇던듯한데 굳이 그걸 설정을 바꿔가면서 하기보..

Python3/Django 2022.07.14

[Python3] Exception has occurred: TypeError argument should be integer or bytes-like object, not 'str'

최근 새롭게 만들고 있는 프로젝트에서 암호화와 관련된 작업을 하는 와중에 Exception has occurred: TypeError argument should be integer or bytes-like object, not 'str' 라는 예외를 만날 수 있었다. 간단하게 해결할 수 있는 에러이다. 파이썬에서 bytes와 str은 아래와 같은 관계가 성립한다. str -> 디코딩 -> bytes bytes -> 인코딩 -> str 그러므로 encode를 해주던, decode를 해주던 utf-8로 해주면 된다는 소리다. 나 같은 경우는 RSA 키로 만든 public key와 private key가 결과물이 bytes 로 나왔는데 그걸 슬라이싱하려다가 발생한 오류였다. 아래 코드를 보면 알겠지만 exp..

[Pythone] Python3 Memory Error 발생 - 파이썬 메모리 에러 발생

leetcode에서 문제를 풀고 있는데 이런 에러를 만났다. 메모리 에러라고 한다. 사실 이런 에러는 오늘 처음 만났다. MemoryError 라는게 있었는지도 몰랐는데 오늘 발생하고 나서야 이런게 있다는 것을 알게 되었다. 다이나믹프로그래밍을 짜면서 dp 테이블을 굉장히 크게 만들어줘서 발생한 에러인데 실제로는 처음 봤다. 물론 풀이 방법을 달리해야 하는 것은 당연하지만 이 Memory Error 라는 것이 실제로 다른 곳에서 발생했을 경우 대처하는 방법에 대해서 알아보자. 일반적인 대처방법: 1. 그냥 다시 실행해보자. 때에 따라서 매모리 에러의 경우 그냥 다시 실행하면 잘되는 경우가 있다고 한다. 2. 배치 사이즈를 줄인다. (이건 딥러닝을 사용할 경우를 말하는거다.) 순간적으로 많은 데이터를 처리..

[Python3] 코딩테스트 파이썬 사용시 유일한 단점 - 파이썬의 객체 복사 방식(깊은 복사와 얕은 복사)

간만에 알고리즘 문제가 잘 풀린다 했더니 말도 안되는 에러가 발생해서 거의 1시간을 이것저것 만져보면서 고민했던것같다. 도대체 왜 안되는건지? 이 고민을 아무리 해봤는데도 이상할게 전혀 없는 코드인데 원하는 대로 동작하지 않았다. 한참을 코드를 들여다보다가 아차 싶은게 떠올랐다. 객체를 복사하는 과정이 굉장히 많았는데 이 부분에서 에러가 발생했던 것이었다. (한 변수를 사용하면서 그 값에다가 여러 변화를 주면서 사용했다. 이게 문제였다.) 이전에도 인지하고 있었던 내용이었지만 유독 오늘 만난 문제에서 실수를 했던 것이었다. (알고 있는 것과 실천하는 것은 다르다.) 파이썬이 모든 면에서 굉장히 편하고 알고리즘 문제를 풀기에 딱 좋은 언어라는 생각이 들었다. 너무 편하다. 문자열도 깔끔하게 풀어낼 수 있고..

[Python3] 파이썬 @cache @lru_cache 데코레이터

최근 알고리즘 문제를 풀면서 이곳 저곳 블로그들을 돌아다니는 와중에 굉장히 생소한 어노테이션을 사용하는 걸 볼 수 있었다. 최적화에 관련해서 설명해주는 블로그였는데 메모이제이션을 쓰지 않고 @cache 어노테이션을 써서 해보겠다는 취지의 글이었다. 내용은 이러하다. 파이썬에는 @cache 데코레이터가 존재한다. functools 모듈에서 가져올 수 있으며 함수를 대상으로 사용한다. 즉 @cache 데코레이터를 어떤 함수의 선언부 위에 선언하면, 그 함수에 넘어온 인자를 키 key로 그리고 함수의 호출 결과를 값 value로 삼아서 메모이제이션이 자동으로 적용된다. 대략 아래처럼 사용할 수 있다. from functolls import cache @cache def dummyfunc(x): return x..

[Python3] Python 에서 assert 란?

assert는 조건이 참임을 보증할때 사용한다. 어떤 함수가 반드시 정수만을 받는다고 가정한다면 assert 를 통해 정수가 아닌 값이 들어왔을때 assertionError 를 내도록 만들 수 있다. 이와 같인 방식을 방어적 프로그래밍이라고 한다. 확실하게 보장한다는거다. 물론 이 구문 뿐 아니라 실제로 타입이 되었든 value가 되었든간에 무언가를 체크하고 가드하는 동작은 반드시 작성되어있어야만한다. 아래 블로그에서 도움을 받았다. 감사합니다. https://wikidocs.net/21050 03_가정 설정문(assert) assert는 뒤의 조건이 True가 아니면 AssertError를 발생한다. ``` >>> a = 3 >>> assert a == 2 #결과 Traceback (mos ... wi..

[Flask] ReferenceError: weakly-referenced object no longer exists 의 발생이유

며칠전 포스팅했던 글에 이어서 정확한 설명을 찾았다. https://www.py4u.net/discuss/147695 위의 링크에 달린 답변들이 많은 도움이 되었다. weakly-referenced object 는 가비지 콜렉터가 제거할 대상들을 살피는 와중에서 그것이 제거되지 않을 것이라고 보장해주지 못할 경우에 놓인 객체를 말한다고 한다. 그러니 내가 쓰려고 하는 대상이 가비지 콜렉터에게 제거당할 가능성이 존재한다는 거다. 그렇기 때문에 에러가 발생한다. 나의 경우도 함수가 종료하면 당연히 local variable 들은 사라질텐데 그 점을 염두에 두지 못하고 코드를 작성한 탓에 이런 에러가 발생했던 거다. (나는 함수의 local variable에 mysql dbconnect 관련 객체를 받아서 그..

Python3/Flask 2021.11.25

[Flask] mysql.connector.errors.DatabaseError: 2014 (HY000): Commands out of sync; you can't run this command now

Flask 를 통해 개발하면서 sql을 직접 작성해줄 일이 있을텐데 이때 특정 sql문이 두개 이상 존재할때 연달아 실행되어야할 sql문들의 중간에서 commit을 치게 되면 이후의 sql문이 실행되지 않는 경우가 발생했다. 내 경우에는 아래와 같은 경우였다. sql = """update user set user_address=%s, user_job=%s where user_SSN=%s; commit;""" mysql_cursor.execute(sql, (data)) data2 = (outer_user_SSN) sql = """select * from user where user_SSN = %s;""" 위의 코드에서 첫번째 sql문에서 commit을 미리 치게 되니 아래의 sql구문을 실행할적에 mysq..

Python3/Flask 2021.11.23

[Flask] ReferenceError: weakly-referenced object no longer exists

급하게 이번주까지 완성해야할 프로젝트가 있어서 이것저것 골라보던 중에 Flask를 통해 빠르게 개발하는 것이 좋겠다고 생각했다. 주말에 테이블별로 대충 어떤 속성들이 필요하겠다고 이야기를 했고 일요일밤에 Flask를 빠르게 배우고 코드를 작성해서 지금까지 좀 고쳐나가는 중이다. (워낙 급하게 만들어서 중요한 변수들을 바깥에 그냥 던져놓고 global로 가져다 쓰는 만행을 저지르는중이다.) 대충 기본은 Flask를 통해 api들을 만들어주고 sql 을 직접 날려서 디비의 데이터를 가져오고 view에 보여주는 간단한 코드를 짜는 중이다. 그런데 재밌는 현상을 발견했다. 문제는 다음과 같았다. def get_MySQLConnection(): mydb = mysql.connector.connect( host="..

Python3/Flask 2021.11.23

[Python3] Python 에서 nonlocal과 정적 스코프

static scope에 대해서 공부하는 중에 global은 들어봤는데 nonlocal이라는게 들어본적이 없어서 찾아보았다. (프언 수업은 정말 역대급으로 생소한것같다. 이전에 이런 내용들을 접해본적이 없어서 꽤나 고생중이다.) 아래 간단한 예제를 보면 바로 이해가 될 것이다. 눈으로 따라가기에는 조금 번거로울 수 있는데 연습장에 조금씩 써보면서 딱 한번만 따라가보면 정확히 이해할 수 있다. nonlocal: 지역 변수가 아님을 선언 nonlocal이 사용된 함수 바로 한단계 바깥쪽에 위치한 변수와 바인딩을 할 수 있다. x = 50 def f(): a = 777 def g(): a = 100 def h(): global x x = 999 nonlocal a a = 333 h() print("[Level..

[Python3] Python에서의 False와 None은 같은 것인가?

특정 코드를 보던 중에 파라미터로 넘어온 값을 not 으로 if문에서 판별해주는 구문이 있었다. 해당 전달값이 False라면 if문을 실행하고, True라면 if문을 실행하지 말라는 뜻으로 해석했는데, 그런데 None이 들어오면 어떻게 되는거지? 라는 생각이 들었다. 물론 똑같이 None이 온다면 False일때와 같이 동작하는 것이 당연하다고 생각이 들었지만, 그렇다면 조건에서 False True 를 체크할때만 None은 False로 동작할 수 있는건가? 아니면 실제로 같이 취급되는 것인지에 대해 궁금해졌다. 따라서 간단한 코드 몇줄로 확인해볼 수 있었다. print(None == False) 우선 해당 코드는 False가 나온다. 즉 None은 False가 아니다. 아예 다른 존재다. 그렇다면 어떤 타..

[Python3] 파이썬 패키지 설치 완료 후에 import 에러 발생할 경우 + could not be resolved Pylance

파이썬에서 원하는 패키지를 pip install을 통해 정상적으로 설치하였고, 성공적으로 설치하였다는 메시지도 확인했는데도 import 가 되지 않는 경우가 있다. 혹시 잘못됬나 싶어서 패키지를 지워도 보고, 다시 import문을 적어봐도 이런 경우에는 소용이 없다. 보통 pip를 해도 안되는 경우는 크게 pip버전이 안맞아서 pip를 upgrade해줘야 하는 경우, 아예 패키지명이 잘못된 경우 등이 있는데, 이 경우는 성공적으로 설치했음에도 import가 되지 않는 경우를 소개한다. 위 사진처럼 이미 잘 설치되어있음에도 from import 구문이 작동하지 않는 것이다. 바로 아래 처럼 말이다. heapdict라이브러리를 사용하기 위해 from절에 적어주었는데 노란 밑줄이 있는 것을 볼 수 있다. 살펴..

[Python3] window10 Ubuntu에서 Miniconda3 설치하기 - 파이썬 가상환경 구축

https://ychae-leah.tistory.com/78 [ubuntu] 윈도우10 에서 우분투 설치 및 윈도우 폴더 접근하기 1) 윈도우 제어판 설정 바꾸기 제어판 프로그램 추가/제거 -> windows 기능 켜기/끄기 -> Linux용 Windows 하위 시스템 체크 -> 재부팅 2) MicrosoftStore에서 Ubuntu 설치하기 우분투 설치 경로 C:\User.. ychae-leah.tistory.com 위 블로그에서 도움을 많이 받았다. 감사합니다. 1시간 삽질하다가 발견했다. cd /mnt 이 명령어 하나를 몰라서 너무 헤맸다. cd /mnt 를 하게 되면 윈도우10에 설치한 우분투 커널을 통해서도 윈도우 10 디렉토리에 접근할 수 있다. https://docs.conda.io/en/l..

[Python3] Python3와 PyPy3 차이

PyPy3는 자주 쓰이는 코드를 캐싱함. 간단한 코드 상에서는 Python3가 메모리, 속도 측면에서 우세 복잡한 코드(반복)을 사용하는 경우에는 PyPy3가 우세하다. 이 상황에 맞추어서 잘 써야 한다. 아래 블로그에서 많은 도움을 받았습니다. 감사합니다. https://ralp0217.tistory.com/entry/Python3-%EC%99%80-PyPy3-%EC%B0%A8%EC%9D%B4 Python3 와 PyPy3 차이 Python3 와 PyPy3 차이 평소에 알고리즘 문제를 풀면서 Python을 지원하는 언어를 선택할 때, Python3와 PyPy3가 대표적으로 있었다. 원래 알던 개념은 PyPy3가 Python3의 실행시 시간이 매우 오래 걸린다는 ralp0217.tistory.com

Python3 2021.06.22
반응형