본문 바로가기

Python38

Pyinstaller 패키징 때 PyQt ui 파일 포함시키는 방법(여러개도 됨) 문제점 파이썬으로 GUI 프로그램을 만들 때 PyQt를 애용하고 있습니다. PyQt는 ".ui"라는 확장자를 사용하는 별도의 GUI 리소스 파일이 있어서 파이썬에서 이 UI파일을 읽어오기만 하면 되기 때문에 아주 편리하게 사용할 수 있습니다. 그래서 UI가 약간 수정이 있다 해도 메인 소스를 손댈 필요가 없어서 생산성 측면에서 큰 장점이 있습니다. 그런데 이렇게 별도의 UI 파일이 있는 프로그램은 Pyinstaller로 패키징 할 때 리소스 파일이 누락되어서 패키징이 제대로 되지 않을 때가 있습니다. 제가 경험해본 바로는 UI 파일을 스크립트에서 불러올 때 상대 경로로 접근하는 경우 Pyinstaller로 패키징 할 때 UI가 누락되는 걸 경험했습니다. 그래서 이런 경우는 UI파일을 참조할 때 절대 경로.. 2021. 7. 22.
pip upgrade 에러 - 엑세스가 거부, No module named 'pip' pip 업그레이드 중에 발생할 수 있는 에러 해결법입니다. pip 모듈을 사용하다 보면 가끔 이런 안내를 만나게 됩니다. pip의 새로운 버전이 있으니 업그레이드를 하라는 건데요. 이런 안내를 받고 아무 생각 없이 이렇게 업그레이드를 시켰습니다. pip install python-dev-tools 그럼 이런 경고를 만날 수 있는데요. 서버에서 새로 설치할 pip정보를 검색한 후에 정보가 확인되면 컴퓨터에 깔려있는 이전 버전의 pip를 지우고 나서 새로운 버전을 설치하는 과정으로 진행이 되는 것 같습니다. 그런데 원래 깔려있던 pip를 지우는 중에 pip.exe에 접근을 못해서 에러가 발생합니다. 이게 참 당연한 건데 저는 생각도 안 해보고 뭔가 문제가 있다고 생각했었습니다. pip가 알아서 다 잘하니까 .. 2021. 7. 16.
selenium사용하지 않고 네이버쇼핑 검색결과 크롤링하기 네이버 쇼핑의 검색 결과가 필요해졌습니다. 검색 페이지 크롤링하면 되니까 어렵지 않게 할 수 있을 거라고 생각했었는데 그게 아니었습니다. 대신 검색정보를 담고 있는 JSON파일을 찾을 수 있었고 더 쉬운 방법으로 해결이 되어서 내용을 남깁니다. 크롤링의 기본은 사이트의 구조를 파악하는 일이죠. 저는 특정 카테고리의 해외직구 제품 네이버 랭킹 1~100위 제품을 가져올 계획이고 여기서 그 카테고리는 TV입니다. 먼저 해당 페이지를 분석해보겠습니다. "네이버 > 쇼핑 > 카테고리TV > 해외직구"로 이동합니다. F12 or Ctrl+Shift+I 를 눌러서 "개발자 도구"를 열어줍니다. 여기서는 로딩되는 웹페이지의 모든 정보를 볼 수 있습니다. 그리고 좌측 상단의 마우스 모양의 버튼 or Ctrl+Shift.. 2021. 7. 9.
Pyinstaller로 변환한 exe 파일의 실행 경로 찾기 Pyinstaller로 파이선 스크립트를 실행파일로 변환했을 때 겪을 수 있는 경로 문제에 대한 이야기입니다. 프로그램 동작중에 데이터 파일을 가져오거나 저장해야 할 일이 있을 때 파이썬 스크립트 상태에서 실행할 때는 아무런 문제가 없었는데 Pyinstaller로 패키징을 한 후에 실행을 하면 똑같은 위치에 멀쩡히 잘 있는 데이터 파일을 찾지 못한다고 에러가 뜨거나 파일을 저장했다는데 엉뚱한 곳에 저장을 해서 난감한 경험을 격으셨다면 끝까지 읽어보시고 해결해보세요. 본 포스팅은 프로그램의 runtime과 관련된 내용으로 pyinstaller의 기술문서인 아래 링크를 참고하였습니다. 자세히 공부를 하고 싶다 하시는 분은 링크의 문서를 다 읽어보시면 좋을 것 같고요. 난 결론만 있으면 돼 하시면 아래 글을 .. 2021. 7. 8.
pyinstaller 에러 virtualenv로 해결하기 (Python 3.8.10 버전은 피하세요) 파이썬 스크립트를 ". exe" 실행파일로 변환해 주는 "pyinstaller"에 대해서 언급한 적이 있었습니다. pyinstaller - 파이썬 코드를 실행파일(.exe)로 변환 ".py" 확장자의 파이썬 코드는 매우 작은 용량이지만 방대한 일을 처리할 수 있는 신기한 파일입니다. 하지만 컴퓨터에 파이썬 interpreter가 설치되어 있어야 하고 코드에서 사용한 다양한 라이브 kwonkyo.tistory.com 코딩하면 늘 혼자서만 사용하기 때문에 pyinstaller를 사용할 일이 거의 없었는데요. 최근에 쓸 일이 생겨 오랜만에 패키징을 시켜 봤더니 에러가 발생했습니다. 예전에 해봤을 때와 달라진 것이라고 한다면 파이썬 버전이 달라진 것 말고는 없는데 "LoadLibraryEx", '시스템에서 파일.. 2021. 7. 6.
Python Virtual Environment(Virtualenv) 사용하기 개요 Virtualenv(Virtual Environment)는 서로 다른 프로젝트들이 각각의 의존성을 보존할 수 있도록 프로젝트 개발환경을 분리시켜주는 도구입니다. 이런 도구가 필요한 이유는 다음과 같습니다. 진행 중인 프로젝트가 2가지가 있는데 두 프로젝트에서 동일한 라이브러리를 사용한다고 예를 들어보겠습니다. 그런데 A라는 프로젝트는 라이브러리 버전 1.1에 호환성이 있어서 1.1 버전을 사용하고 있었습니다. 하지만 B라는 프로젝트는 1.3 버전의 호환성이 필요합니다. 이런 경우, Python의 site-package폴더가 버전별로 관리가 안되기 때문에 A 프로젝트 작업을 하다가 B 프로젝트 작업을 하려면 원래 깔려있던 1.1 버전의 라이브러리를 1.3으로 업그레이드가 필요합니다. 그리고 반대로 다.. 2021. 6. 29.
파이썬에서 날짜 관련 요긴한 정보 - datetime 날짜 정보를 처리해야 할 때 제가 주로 사용하는 "datetime" 라이브러리의 아~주 기본 사용법들입니다. 이번 포스팅에 사용된 모든 코드는 datetime 라이브러리를 import 해야 정상적으로 사용할 수 있습니다. import datetime 오늘 날짜, 현재 시간 컴퓨터 시계를 통해서 오늘의 날짜 및 시간 정보를 가져오는 함수입니다. import datetime ToDay = datetime.datetime.now() datetime라이브러리 내에 now()라는 함수를 이용하면 지금 함수가 호출된 순간의 날짜와 시간을 반환하며 반환하는 형식은 파이썬에서 날짜/시간을 다루는 데 사용하는 구조체의 형태입니다. 요일 구하기 위에서 "ToDay"라는 변수에는 오늘의 그리고 현재의 날짜와 시간 정보가 들.. 2021. 6. 12.
파이썬으로 라인 메신저에 알림(메시지) 보내기 - Python to LINE Notify 파이썬으로 모니터링을 돌리고 있을 때 그 결과를 스마트폰으로 간편하게 받을 때 유용한 방법입니다. 라인 메신저에서 제공하는 "LINE Notify"를 이용하면 간단히 해결할 수 있습니다. LINE 설치, 가입 먼저 LINE Notify를 이용하기 위해서 라인 서비스를 사용하고 있어야 하는데요. 저도 기본 메신저는 카카오톡을 사용하기 때문에 추가로 설치를 했는데, 고맙게도 라인에서는 저처럼 부계정으로 사용하기에 적합한 라이트 버전을 제공하고 있습니다. 라인 라이트 버전을 설치하고 나서 간단히 가입절차 진행합니다. 라인 앱에서 설정 >> 계정 메뉴로 이동해서 메일, 비밀번호를 입력하고 중간에 있는 로그인 허용 옵션을 활성화해 줍니다. 이렇게 하면 앱에서 할 일은 끝났습니다. LINE Notify 토큰 발급 .. 2021. 6. 5.
로그인 후 리디렉팅하는 사이트 크롤링 파이썬에서는 크롤링을 아주 쉽게 할 수 있습니다. 파이썬을 모른다고 하더라도 예제 코드만 있으면 손쉽게 원하는 크롤링을 해볼 수 있을 정도로 간단한데, 오늘은 간단하게 시작했다가 몇 번의 시행착오를 격고서야 성공할 수 있었던 크롤링 작업에 대한 로그입니다. 로그인을 해서 권한을 얻은 후에 접근할 수 있는 페이지를 크롤링해야 할 일이 생겼고, 관련 예제는 인터넷에서 쉽게 찾을 수 있었습니다. import requests from bs4 import BeautifulSoup login_url = '로그인페이지주소/login.aspx' crawl_url = '크롤링할주소\Status.aspx' login_info = { 'UserID': '아이디', 'UserPW': '비밀번호' } with requests... 2021. 5. 17.
VSCode Python Extension에서 멀티 스레드 디버깅 파이썬 코딩에 Visual Studio Code(VSCode)를 많이들 사용하시는지 잘 모르겠는데, 저는 VSCode가 무겁지 않고 아두이노 스케치뿐만 아니라 공부하고 있는 다양한 언어를 사용할 수 있어서 All in one IDE 개념으로 VSCode를 잘 사용하고 있습니다. 그리고 VSCode에서 파이썬 코딩을 편리하게 하기 위해서는 Extension설치가 필요한데, 뭐가 좋은 Extenstion인지 잘 모르기 때문에 가장 많은 사람들이 쓰고 있는 "Python" 사용하고 있습니다. 이름도 깔끔하고 제작자도 MS라 그냥 믿고 쓰고 있답니다. 그런데 어느 순간 디버깅을 하는 와중에 이상하게 브레이크 포인트를 설정했는데도 불구하고 프로그램이 멈추지 않고 계속 돌아가는 상황을 겪게 되었습니다. 처음엔 디버.. 2021. 3. 23.
조달청 입찰/계약 정보 조회용 프로그램(2/2) - 코딩 공공데이터 포탈의 OpenAPI를 이용해서 조달청 공고 입찰 정보를 조회하는 프로그램 만들기 2부입니다. 지난 포스팅에서는 API에서 제공하는 정보의 구성과 내용에 대해서 확인해 봤었는데요. 조달청 입찰/계약 정보 조회용 프로그램 (1/ 2) - 공공데이터포탈 API 분석 및 GUI구성 조달청에서 제공하는 API를 이용해서 정부 발주 입찰공고 및 계약현황을 조회하는 파이썬 프로그램을 만들어 보려 합니다. 국가종합 전자조달 홈페이지인 나라장터에서 필요한 정보 조회가 모 kwonkyo.tistory.com 이번에는 분석 내용을 바탕으로 파이썬 코딩 진행해 보겠습니다. 여기서는 제가 공부하면서 어려웠던 부분들 그리고 알아두면 나중에도 유용하게 사용할 수 있는 부분들 위주로만 설명을 하겠습니다. 대신 계획한 기.. 2021. 3. 22.
조달청 입찰/계약 정보 조회용 프로그램 (1/ 2) - 공공데이터포탈 API 분석 및 GUI구성 조달청에서 제공하는 API를 이용해서 정부 발주 입찰공고 및 계약현황을 조회하는 파이썬 프로그램을 만들어 보려 합니다. 국가종합 전자조달 홈페이지인 나라장터에서 필요한 정보 조회가 모두 가능하지만 자주 찾아보는 검색조건 등을 저장해 두고 반복적으로 검색해 보거나 데이터를 수집할 용도로 사용할 수 있을 것 같아서 시도해 봤습니다. 파이썬을 이용해서 작성할 예정이고 GUI는 PyQt5. 그리고 수집된 정보는 DB(SQLite)를 활용해서 저장합니다. API 사용 신청 및 포멧 분석 먼저 API에서 어떤 정보가 가용한지 알아야 하니까 바로 API 신청부터 합니다. 공공데이터포털(www.data.go.kr)로 가서 회원 가입하고 로그인합니다. 조달청 입찰, 조달청 계약 키워드로 검색을 해서 다음과 같이 오픈 A.. 2021. 3. 19.
PyQt5 오버레이 레이어 Ver.2 어제 업로드했던 오버레이 레이어의 업그레이드 버전입니다. PyQt5 오버레이 레이어 PyQt에서 특정 위젯을 오버레이 하는 레이어를 만드는 방법입니다. 아래 그림과 같은 윈도우에서 하단 PushButton을 누를 때마다 TextEdit창을 덮는 붉은색 레이어가 나타났다가 사라집니다. 먼저 Qt De kwonkyo.tistory.com 오버레이 레이어 구현 방법을 찾아보게 된 계기는 시간이 오래 걸리는 동작을 하고 있을 때 동작중임을 시각적으로 표현하고 사용자의 추가 입력을 제한해야 하는 상황에 사용하기 위해서였습니다. 그래서 좀 더 로딩 화면처럼 보이도록 수정한 버전입니다. 일정 시간 동안 로딩 동그라미가 돌아가고 동시에 잔여 카운터가 얼마인지 숫자로 표시되도록 만들어 봤습니다. 아래는 소스코드입니다. .. 2020. 12. 3.
PyQt5, QtableWidget 컬럼 너비 자동 조정 PyQt5에서 QtableWidget을 사용할 때 컬럼 너비를 조정하는 방법입니다. 방법1 table = self.ui.tableWidget table.setColumnWidth(0, self.width()*1/10) table.setColumnWidth(1, self.width()*2/10) table.setColumnWidth(2, self.width()*5/10) table.setColumnWidth(3, self.width()*2/10) 테이블의 컬럼은 4개가 있다고 가정하고 각 컬럼의 너비를 일정한 비율로 조정합니다. 컨텐츠 길이의 장단에 관계없이 정해진 비율대로만 조정합니다. 방법2 table = self.ui.tableWidget header = table.horizontalHeader() .. 2020. 9. 8.
Visual Studio Code로 만드는 파이썬 개발 환경 개인적으로 지금까지 파이썬 공부를 즐기지 못한 이유 중에는 IDE가 썩 맘에 들지 않았다는 점이 있는데요. 원래 저는 Visual Studio(VS) 신봉자라서 VS에서 C++과 아두이노 그리고 파이썬까지 모두 사용하고자 했습니다. 모든 걸 하나로 끝내려는 건 욕심이었는지, C++는 원래 VS의 기본적인 지원언어이고 아두이노도 C++ 기반이라서 VS의 개발환경은 매우 쾌적했지만 파이썬은 그렇지 못했습니다. 물론 파이썬을 더 편리하게 사용할 수 있게 해주는 확장 프로그램이 있는 것 같지만 유료이고 파이참이나 다른 파이썬에 맞추어진 IDE와 비교하면 이게 정말 VS가 맞나 싶게 뭔가 부족한 느낌이라 사용을 꺼리게 되었습니다. 그러다가 VS Code를 사용하기 시작했는데 파이썬도 지원하고 아두이노도 VS에서 .. 2020. 7. 17.