기본 콘텐츠로 건너뛰기

라벨이 Python인 게시물 표시

PySide6 License 요약

✅ 요컨대: 상용 무료로 사용하려면 —onedir로 씁니다. 🔴  정적 링크 (Static Linking) 라이브러리 코드가 바이너리에 통합됨 (.exe 안에 다 들어감) 사용자 입장에선 라이브러리를 교체할 수 없음 LGPL 위반 소지 있음 → 상용 라이선스 필요 🟢  동적 링크 (Dynamic Linking) 라이브러리가 별도 .dll, .so, .dylib 파일로 따로 존재 사용자는 그 파일만 교체해서 다른 버전 사용 가능 LGPL 조건 충족 → 무료 사용 가능 💡 PyInstaller와 관련한 현실적 팁: PyInstaller 옵션 결과 LGPL 안전성 --onefile .exe 하나에 모든 걸 묶음 (DLL 포함됨) ❌ 위험 (정적처럼 보임) --onedir .exe + 여러 DLL 파일로 분리 ✅ 안전 (동적 링크 구조 유지) 📦 그래서 어떻게 해야 하냐? ✅ PySide6 LGPL로 안전하게 배포하려면: --onedir 옵션 사용 .dll 파일들을 외부에 두기 LICENSES 폴더에 LGPL v3 고지 포함 문서나 앱 내에 “사용자는 Qt 라이브러리를 교체할 수 있습니다” 명시

[Python] the first argument must be callable 에러 해결

 정말 간단한 거라 간단히 적어둡니다. schedule에 do를 사용할 때 함수의 변수를 괄호로 넣으면 에러가 발생합니다. 그래서 (1)이 아니라 (2)와 같이 사용해주면 에러가 사라집니다. (1) 에러 발생하는 경우 schedule . every ( 2 ). minutes . do ( print ( str ( time . localtime ))) (2) 콤마로 써주면 됩니다. schedule . every ( 2 ). minutes . do ( print , str ( time . localtime ))

[Python] __name__ = '__main__'의 활용 방법

  https://azanewta.tistory.com/24 위의 링크를 참고해서 간단하게 테스트를 해봤습니다... 1000개 이상 사이트를 스크래이핑 하는데, py소스 하나에 밀어넣으면 곤란할 듯하여, 각 사이트별로 모듈화를 생각하고 있는데, 사용 방법을 잘 몰라서,, if __name__ = '__main__': 으로 넣어놓으면, 메인인 경우에만 테스트 프레이즈 구동이 됩니다. sub1.py가 서브파일, FP2021_MLT_Main.py가 메인 파일입니다. Sub1.py 1 2 3 4 5 6 7 8 9 10 11 def  test(a, b):      return  a + b   def  main():      print ( 'Test function executed' )     a  =   2     b  =   3      print ( "Test Value = %d" %test(a,b))   if  __name__  = =   '__main__' :     main() cs FP2021_MLT_Main.py 1 2 3 4 import  Sub1   a  =  Sub1.test( 1 , 2 ) print (a) cs

[Python] 크롤링 HTTP Forbidden 403 문제 해결

  코드에는 문제가 없는데 HTTP 403 Forbidden이 발생하길래.. 검색해보니까 서버사이드에서 저 같은 불법 크롤러를 거르는 메쏘드가 있는 모양입니다. 아래의 링크를 참고해서 해결했습니다 https://howtoworld.tistory.com/52 urllib에서 Request를 import 해줘야합니다. 1 2 3 4 def  hellenicshipping():     url  =  Request( "https://www.hellenicshippingnews.com/category/shipping-news/dry-bulk-market" ,headers = { 'User-Agent' :  'Mozilla/5.0' })     html  =  urlopen(url)     savefile  =   './hsn.txt' Colored by Color Scripter cs

[Python] Telegram Bot + Web scraper (beautiful soup) 개발 중

Telegram auto uploader + basic crawler .. ksg와 shipping news를 크롤링 하는데, 이후에 이걸 표준 모듈화해서 업로드 하려고 합니다. token 과 chat_id 를 삭제하고 업로드했습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 import  schedule import  time import  telegram   import  bs4 from  urllib.request  import  urlopen   token  =   "Your token here" bot  =  telegram.Bot(token  =  token) #print(bot) updates  =  bot.get_updates() chat_id  =   "Your Chat Id here"   title_tag  =  [] text_tag  =  [] date_tag  =  []   bot.sendMessage(chat_id, "Server Intialized..." )   def  job():     now  =  time.localtime()      print ( "current time = " , str (now))  ...

(Python) 001 - Raise Error를 사용해보자

★ 진행목적 : 왜 이걸 사용합니까 . 1) Try ~ Error 를 입력에 사용하다가 입력범주를 제한하는 경우가 필요해서 써보게 되었습니다 . 2) 추후 유저 입력을 받을 때 필요할 거 같아서 기록해 놓습니다 . ( 中谷 育 さんのイメージで に対して) 本当に可愛い中谷 育さんのイメージが 含まれています。 ありがとうございます。 何か問題があったら、教えてください。 直ちに処理します。

(Python) Merge sorting algorithm의 구현

이번에는 Python으로 Merge sorting을 구현해봤습니다. 수업 과제라서... ㅋㅋㅋ 알고리즘은 인터넷에 이미 많이 올라와있으니까 알고리즘은 아래의 사이트에서 읽어보시면 됩니다!! (알고리즘이 최적화가 되어있지 않고 variable convention이 안 맞는게 꽤 많습니다 ㅠ, .. 걸러 읽어주세요!!!) https://www.geeksforgeeks.org/merge-sort/ ---- 사상은 우선 최소 단위인 2개까지 쪼개가지고 아래와 같이 왼쪽/오른쪽에 Handle을 배치해서 크거나 작은 순으로 데이터를 땡기고 핸들을 좌/우에서 밀어가지고 핸들이 끝까지 가면 반대쪽 데이터를 끝까지 append하는 거에요. 알고리즘이 너무 간단해서 설명이 엄청 짧네요! 크게 파트는 두 개로 나눌건데, 1. 입력을 받은 후 처리되는 배열을 정하고, 핸들 배치한 뒤에 비교하는 알고리즘을 호출하는 부분과, 2. 위에서 입력받은 데이터를 비교해서 데이터를 처리하고 정리된 데이터를 리턴하는 부분을 만들어보려고 합니다. ----- 1. 여기서부터는 입력을 받은 후 처리되는 배열을 정하고 핸들 배치, Merge sort를 호출하는 부분입니다. 1) 먼저 List의 길이를 확인합니다. (MainCount_input) 위의 알고리즘을 보면 Merge sorting 하는 Array의 size가 2배씩 커지는데, (MainMultiIndex)에서 1부터 2씩 곱해가다보면 소팅하려고 투입하는 배열 사이즈가 원본 List보다 커지겠죠! 그 때 종료 시켜버리면 되겠죠! 2),3) MainIndex는 Sorting 시작할 부분을 지정해주는 거에요, 그러니까 아래와 같은 순서로 처리가 될 거에요. (종료호출이 왜 있는지는 아래에다가 달아놓으려고 합니다!) (2개 정렬) 정렬범위 : 0~1 / 종료호출 : 2 정렬범위 : 2~3 / 종료호출 : 4 정렬범위 : 4~5 / 종료호출 : 6 .. 2개 정렬...