2025년 7월 28일 월요일

[2025-07-28] python 에서 html to pdf 변환 비교

[2025-07-28] python 에서 html to pdf 변환 비교

안녕하세요. 클스 입니다.


html로 작성된 문서를 RAG를 하기위해서 html을 그대로 사용해도 되지만, 불필요한 테그가 있어 비효율 적입니다. 그렇다고 테그를 제거하면 표 등 레이아웃이 깨지게 됩니다.

일반적으로  pdf가 많이 사용됩니다. 그래서 macos에서 많이 사용하는 2개의 라이브러리를 비교해보고자 합니다.

1. html 을 바로 변환하는 방법 : weasyprint    [장점] 가볍다.

2. html 을 브라우저로 열어서 변환하는 방법 : playwright  
   [장점] 풍부하게 css를 처리한다.

코드

###### html to pdf #########
'''
외부망에서 해야 함
brew install pango
uv pip install weasyprint
'''
from weasyprint import HTML

html_file = '~/doc/test.html'
# 1. 문자열 경로를 Path 객체로 만듭니다.
path_obj = Path(html_file)
# 2. .with_suffix() 메서드로 확장자를 변경합니다.
pdf_file = path_obj.with_suffix('.pdf')
HTML(filename=html_file).write_pdf(pdf_file)


'''
외부망에서 해야함.
# 1. Playwright 라이브러리 설치
uv pip install playwright

# 2. Playwright가 제어할 브라우저(Chromium 등) 설치 (라이브러리 엄청 크네)
python -m playwright install
'''


import asyncio
from pathlib import Path
from playwright.async_api import async_playwright

async def convert_local_html_to_pdf_async(html_file_path: str, output_pdf_path: str):
"""
(비동기) 로컬 HTML 파일을 Playwright를 사용하여 PDF 파일로 변환합니다.
IPython/Jupyter 환경에 최적화되었습니다.

:param html_file_path: 변환할 원본 HTML 파일의 전체 경로
:param output_pdf_path: 저장할 PDF 파일의 전체 경로
"""
# pathlib.Path를 사용하여 파일 경로를 브라우저가 인식하는 file:// URI 형식으로 변환합니다.
# 이렇게 하면 공백이나 한글 등 특수문자가 포함된 경로도 안전하게 처리됩니다.
html_file_uri = Path(html_file_path).as_uri()
print("Playwright를 시작합니다...")
# 'async with'를 사용하여 비동기 컨텍스트 매니저를 실행합니다.
async with async_playwright() as p:
# 모든 I/O 작업(네트워크, 파일 시스템 등) 앞에 'await' 키워드를 붙여줍니다.
browser = await p.chromium.launch()
page = await browser.new_page()
try:
print(f"HTML 파일 로딩 중: {html_file_uri}")
# 페이지로 이동하고 로딩이 끝날 때까지 기다립니다.
await page.goto(html_file_uri)

print(f"PDF 파일 생성 중: {output_pdf_path}")
# PDF 생성이 완료될 때까지 기다립니다.
await page.pdf(
path=output_pdf_path,
print_background=True, # 배경 그래픽(색상, 이미지 등) 인쇄
format='A4' # 용지 형식 지정
)
print(f"✅ 성공: '{output_pdf_path}' 파일이 생성되었습니다.")

except Exception as e:
print(f"❌ 오류 발생: {e}")
finally:
print("브라우저를 닫습니다.")
# 브라우저 종료가 완료될 때까지 기다립니다.
await browser.close()

async def main():
"""
비동기 작업을 실행하기 위한 메인 함수
"""
# 1. 변환할 원본 HTML 파일 경로를 설정하세요.
'~/doc/test.html'

# 2. 저장할 PDF 파일 이름을 자동으로 설정합니다 (확장자만 .pdf로 변경).
output_file = Path(html_file).with_suffix('.pdf')

# 3. 위에서 정의한 비동기 변환 함수를 호출합니다.
await convert_local_html_to_pdf_async(html_file, str(output_file))


# IPython/Jupyter 환경에서는 'await'를 직접 사용하여 비동기 함수를 실행할 수 있습니다.
await main()


결론

둘다 레이아웃의 깨짐 없이 잘 변환해준다. 내가 선택하려면 자동화를 위해서 1번을 선택하는것이 맞다.

또 하나는 결과 파일의 크기 이다.

1) 51KB

2) 520KB


이상 클스 였습니다.


라벨: , , , ,

2024년 8월 27일 화요일

[2024-08-27] python 으로 excel(엑셀) 파일 다룰 때 주의점

[2024-08-27] python 으로 excel(엑셀) 파일 다룰 때 주의점


안녕하세요. 클스 입니다.

오늘은 python으로 엑셀 파일을 다룰 때 경험을 써보겠습니다.

----------- 환경 ------------

인텔 맥 프로 2019 16인치, 메모리 32기가

-----------------------------

약 70만건 대량의 데이터를 엑셀에서 불러옵니다. 약 10분이 걸립니다.

그래서 매번 불러서 분석하기에 시간이 너무 많이 들어서 불러들인 엑셀을 df.to_csv 해서 저장합니다.

그 다음 부터는 csv를 부르니 엄청 빠릅니다. 30초

'''
# pip install openpyxl xlsxwriter pandas numpy plotly nbformat
poetry install
or
poetry add openpyxl xlsxwriter pandas numpy plotly nbformat
'''

import os
import pandas as pd
import numpy as np
import plotly.express as px

version = 'v3'
data_dir = os.path.expanduser('~/data')


installation_type_mapping_full = {
"0001": "ㅁㅁㅁ",
"0002": "ㅁㅁㅁ1",
... 보안상 생략 ....}

# "송달구분" 코드에 따른 맵핑 딕셔너리 생성
delivery_type_mapping = {
"0001": "ㅁㅁㅁ",
"0002": "ㅁㅁㅁ1",
... 보안상 생략 ....
}

excel_source_file1 = f'{data_dir}/7월_{version}.xlsx'
excel_source_file2 = f'{data_dir}/8월_{version}.xlsx'

# 주의할 점은 숫자 데이터가 "3,2322.00" 이렇게 문자형식으로 되어 있는 경우 불러올 때 숫자로 변환
# 작업이 필요합니다. 그리고 문자를 숫자로 읽으면 "0001"은 1로 되기 때문에 문자열로 읽게 합니다.

def load_excel_data(file_path:str, month:str) :
df = pd.read_excel(file_path, dtype={'CA': str, '설치': str, '송달구분': str, '설치유형': str})
df['설치유형명'] = df['설치유형'].map(installation_type_mapping_full)
df['송달구분명'] = df['송달구분'].map(delivery_type_mapping)
df['차액'] = df['차액'].replace({',': ''}, regex=True).astype(float).round(2)
df['(전)금액'] = df['(전)금액'].replace({',': ''}, regex=True).astype(float).round(2)
df['(후)금액'] = df['(후)금액'].replace({',': ''}, regex=True).astype(float).round(2)
df['(전)금액(10원절사)'] = (df['(전)금액'] // 10) * 10
df['(후)금액(10원절사)'] = (df['(후)금액'] // 10) * 10
df['이상고지금액'] = df['(후)금액(10원절사)'] - df['(전)금액(10원절사)']
df['이상고지'] = df.apply(lambda row: 'N' if (row['이상고지금액'] == 0) else 'Y', axis=1)
df['월구분'] = month

csv_file_path = file_path.replace('.xlsx', '.csv')
if not os.path.exists(csv_file_path):
df.to_csv(csv_file_path, index=False)

return

data_7mon_df = load_excel_data(excel_source_file1, '7월')
data_8mon_df = load_excel_data(excel_source_file2, '8월')

이제 csv로 저장된 파일을 불러와서 여러가지 분석을 하시면 됩니다.

def load_csv_data(file_path:str) :
df = pd.read_csv(file_path, dtype={'CA': str, '설치': str, '송달구분': str, '설치유형': str})
return df

여기서 원본 데이터를 계산한 필드가 여러개 추하해서 다시 엑셀로 저장합니다. 시간 오래걸려요 20분
그 다음에 분석 결과를 같은 엑셀 파일에 추가를 하면 시간이 정말 많이 걸립니다.

이유는 시트를 추가하려면 기존 파일을 읽어야 하는데 약 70만건이라 로딩하는 시간이 걸립니다.

그래서 분석할 전체 데이터를 a.xlsx 에 저장하고, 분석 요약 데이터는 b.xlsx 에 저장한 다음
엑셀 파일을 열어서 "이동/복사"를 하시는게 훨씬 바르게 작업됩니다.

# 파일이 없을 경우는 ExcelWriter에 파일명, engine을 하면됩니다.

df_result1_1 = df.groupby(['설치유형', '설치유형명', '이상고지', '월구분']).agg(이상고지_갯수=('CA', 'size'), 차액_합계=('이상고지금액', 'sum')).reset_index()
df_result1_1
with pd.ExcelWriter(excel_save_path, engine='openpyxl') as writer:
df_result1_1.to_excel(writer, sheet_name='CA_이상고지_전체_현황', index=False)

# 동일한 엑셀 파일에 시트를 추가하려면 mode='a', if_sheet_exists='replace' 를 추가하면
# 시트가 있으면 덮어쓰게 할 수 있습니다.

df_result1_1 = df_y.groupby(['CA', '설치유형', '설치유형명', '월구분']).agg(이상고지_갯수=('CA', 'size'), 차액_합계=('이상고지금액', 'sum')).reset_index()
df_result1_1
with pd.ExcelWriter(excel_save_path, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer:
df_result1_1.to_excel(writer, sheet_name='CA_설치유형_현황', index=False)

주의할 점은 index를 저장하지 않도록 False 해주시는 것이 편합니다.


그리고 vscode에서 그래프, 챠트를 그릴 때, matplotlib 을 많이 사용하는데, plotly를 권장합니다.

import plotly.express as px

def draw_chart(df_plot, title):
df_filtered = df_plot[df_plot['도수'] > 0]
df_top_20 = df_filtered.sort_values(by='도수', ascending=False).head(20).sort_values(by='구간', ascending=True)
df_top_20['구간'] = df_top_20['구간'].astype(str)
df_top_20

fig = px.bar(df_top_20, x='구간', y='도수', title=f'{title} 도수 분포표', labels={'구간': '구간', '도수': '도수'}, text='도수')
fig_max_y = df_top_20['도수'].max() * 1.3 # 최대 도수 값보다 10% 더 크게 설정
fig.update_yaxes(tickformat=',', range=[0, fig_max_y])
fig.update_traces(texttemplate='%{text}', textposition='outside')
fig.show()

return df_top_20


아래와 같이 도수 분포표를 잘 그려줍니다. 한글도 잘 나오네요. 제가 폰트를 설치했는지도 모르겠네요


이상 클수 였습니다.







라벨: , , , ,

2024년 1월 9일 화요일

[2024-01-09] Python OpenAI API 유료결제 및 gpt-4-1106-preview 예제 (Feat. USB-C 젠더, 꺽은형)

안녕하세요. 클스 입니다.


gpt 4 turbo 가 발표되면서 한번 써보고 싶었습니다.

chat gpt 유료 결제를 하면 API 를 사용할 수 있나? ==> 없음

api를 유료 결제하면 chat gpt 4를 사용할 수 있나? ==> 없음

결론적으로 각각 결제를 해야 사용이 가능합니다. 웹에서 많이 사용하는 분들은 chat gpt 유료 결제하면되고

자동화를 하거나 프로그램과 연동하려면 api를 유료 결제 해야 합니다.

워낙 관련된 자료는 사이트에 많아서 생략하겠습니다.

다만 gpt 4 turbo를 사용하려면 api 1.0 이상이 되면서 함수가 변경되었네요~

  • 모델별 학습 데이터

  • 모델명세부 모델토큰데이터 학습입력출력
    (1K)(1K)
    GPT-4-Turbogpt-4-1106-preview128,00023년 4월$0.01$0.03
    gpt-4-1106-vision-preview128,00023년 4월$0.01$0.03
    GPT-4gpt-48,19221년 9월$0.03$0.06
    gpt-4-32K32,76821년 9월$0.06$0.12
    GPT-3.5 Turbogpt-3.5-turbo-110616,38521년 9월$0.00$0.00
    gpt-3.5-turbo-instruct4,09621년 9월$0.00$0.00
  • 준비 및 설정

$ mkdir openai
$ cd openai
$ pip install --upgrade openai
$ pip freeze | grep openai    
  openai==1.6.1
$ code .

  • 예제 1
    from openai import OpenAI
    
    client = OpenAI(api_key = '여기에 발급 받은 키를 입력하세요 ')
    
    completion = client.chat.completions.create(
        messages=[
            {
                "role": "system",
                "content": "너는 프로그래머야. 질문의 대답 찾기위한 파이썬 코딩을 하고 그 코드에 대해서 자세히 설명해줘",
            },
            {
                "role": "user",
                "content": "1에서 100까지 홀수만 출력해봐",
            }
        ],
        model="gpt-4-1106-preview",
    )
    
    print(completion.choices[0].message.content)
  • 아주 상세하게 잘 설명해주네요~
  • 
    
    completion = client.chat.completions.create(
        messages=[
            {
                "role": "system",
                "content": "너는 기자야",
            },
            {
                "role": "user",
                "content": "2024년 현재 대한민국 대통령이 누구야?",
            }
        ],
        model="gpt-4-1106-preview",
    )
    
    print(completion.choices[0].message.content)
    
    '''
    죄송합니다, 제 지식 데이터는 2023년을 마지막으로 업데이트 되었기 때문에 2024년의 현대 사건이나 대한민국 대통령에 대한 최신 정보를 제공하지 못합니다. 2024년의 정보를 알고 싶으시다면 가장 최근의 뉴스나 정부 웹사이트를 참조해 주세요.
    '''
  • 아직 인터넷에 연결이 안됩니다. 이때는 assisant를 활용해서 web search 함수를 만들고 자동화를 하면 될 것 같습니다.
    이 부분은 아직 해보고 있어 완료되면 다시 올리겠습니다.


이상 클스였습니다.


다음은 USB-C 꺽인형태의 젠더 소개 입니다. USB를 직선으로 꼽으면 공간차지를 많이하고 미려하지 못하네요~
그래서 구매해보니 좋네요~



JSAUX 스팀덱 C to C 타입 ㄱ자 젠더 2p, DD0008 


좀더 다양하게 꺽인것 찾으시면 아래 거 ~






C타입 꺾임 젠더 초고속 USB4 GEN3 40Gbps PD 충전 영상 데이터 ㄱ자 ㄷ자, 디귿자 꺾임 RL019, 1개    

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

넥스트 HDMI 2.1 UHD 8K 고급형 케이블, 1개, 1m 180도 HD HDMI to mini HDMI 호환 2.1 확장 4K 8K 60Hz 120Hz 어댑터, C8K-07   B type 구스페리 C타입 이어폰 변환젠더 3.5mm, 2개, 다크그레이, 14cm

라벨: , , , ,

2023년 10월 21일 토요일

[2023-10-21] Python 3.12.0 버전 발표(Release Date: Oct. 2, 2023)

 

Python 3.12.0 버전 발표(Release Date: Oct. 2, 2023)

요약 : 파이썬 3.12, f 문자열 개선 등 개발 편의성 향상

Release Note

python 3.11 과 3.12 의 주요 기능 비교

* f 문자열은 복잡한 문자열 출력을 위한 문자열 형식화 기능의 하나다. 
  문자열 앞에 알파벳 f를 붙인 후 중괄호({}) 안에 공백 크기 지정 등 
  고급 형식지정 문자열을 입력해 바로 사용할 수 있다.

* 신규 버전에서는 기존에 지원하지 않던 여러 줄의 표현식, 주석, 백슬래시 및 유니코드 이스케이프 시퀀스를 
  처리할 수 있는 기능이 추가됐다.

* 표준라이브러리도 효율적인 활용을 목표로 수정이 이뤄졌다. 
  정리, 유용성 및 정확성에 중점을 둔 이번 수정작업에서 디스트유틸(distutils)패키지 등 더 이상 사용하지 않는 API는 제거되며 
  패스리브(Pathlib) 클래스가 서브클래싱을 지원하며, 명령줄 인터페이스가 모듈 SQLite3에 추가됐다.

* 더불어 성능 개선 작업을 통해 내장 함수의 하나인 이즈인스턴스(isinstance)는 약 2~20배 속도 향상 됐으며, 
  비동기 I/O(asyncio) 패키지도 일부 벤치마크에서 약 75% 빨라진 것으로 나타났다. .

* 파이썬 3.12버전은 인터프리터별 전역 해석기 잠금(GIL)을 적용해 여러 파이썬 스레드가 동시에 실행되는 것을 방지한다. 
  이를 통해 여러 CPU 코어를 보다 효율적으로 사용할 수 있는 하위 인터프리터 생성이 가능하다.

* 이 밖에도 리눅스 커널 성능 측정 도구(perf)에서 C파이썬(CPython)을 지원하는 등 
  성능 개선 및 편의성 지원을 위한 업데이트가 이뤄졌다.

* 출처 : https://zdnet.co.kr/view/?no=20231004094411
  • 공식 발표 내용
    * More flexible f-string parsing, allowing many things previously disallowed (PEP 701).
    * Support for the buffer protocol in Python code (PEP 688).
    * A new debugging/profiling API (PEP 669).
    * Support for isolated subinterpreters with separate Global Interpreter Locks (PEP 684).
    * Even more improved error messages. More exceptions potentially caused by typos now make suggestions to the user.
    * Support for the Linux perf profiler to report Python function names in traces.
    * Many large and small performance improvements (like PEP 709 and support for the BOLT binary optimizer), delivering an * estimated 5% overall performance improvement.
    
    

pyenv로 python 13.2.0 설치하기

$ pyenv install --list
---
  3.11.1
  3.11.2
  3.11.3
  3.11.4
  3.11.5
  3.11.6
  3.12.0
  3.12-dev
  3.13.0a1
  3.13-dev
---

$ pyenv install 3.12.0
python-build: use openssl@3 from homebrew
python-build: use readline from homebrew
Downloading Python-3.12.0.tar.xz...
-> https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tar.xz
Installing Python-3.12.0...
python-build: use readline from homebrew
python-build: use ncurses from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.12.0 to /Users/keulstar/.pyenv/versions/3.12.0
---

$ pyenv virtualenv 3.12.0 py312
$ pyenv local py312      : 로그인 사용자의 파이썬 버전 설정 
$ pyenv global py312     : 전체 사용자의 파이썬 버전 설정 
$ pyenv activate py312   : 현재 세션의 파이썬 버전 설정

vscode에서 python interpreter 설정하기 

shift + cmd + p 를 눌러서 아래를 실행하고,
입력란데 python select 하고 Python: 인터프리터를 선택한다.



mac에 설치된 python 목록이 아래와 같이 나온다. 원하는 버전을 선택하면 된다.

나는 py312로 가상환경을 만들었기 때문에 이것을 선택했다.


이상 클스 였습니다.

라벨: , , , , ,

2023년 4월 4일 화요일

[2023-04-04] Pandas 2.0 릴리즈 되었습니다.

[2023-04-04] Pandas 2.0 릴리즈 되었습니다. 

안녕하세요. 클스 입니다.


Pandas는 Python으로 데이터 분석을 위해 많이 사용하고, 생태계도 넓습니다.

지속적으로 업데이트가 이뤄지기도 합니다. 대용량 빠른 처리를 위해 Polars로 나왔지만 아직 생태계는

Pandas가 넓기 때문에 기본적으로는 Pandas를 알아야 합니다

plotly 같이 시각화를 하는 library도 pandas가 설치되어 있지 않으면 아예 설치가 안됩니다.

그리고 Polars도 to_pandas 와 같이 호환되는 함수를 제공합니다.


다만, 아쉬웠던 점은 대용량 처리, 메모리 그리고 속도였습니다. 이런 것을 해결하기 위해 Polars가 나왔습니다.

그러나 Pandas 가 놀지만 않죠... 2.0에 속도를 향상시키기 위해 PyArrow 가 들어왔습니다.


주의) Pandas 1.5.3이 삭제가 됩니다. 그래서 virtual env를 하나 생성해서 설치하는 것을 권장 드립니다.


자세한 내용 보기 »

라벨: , ,

2023년 3월 31일 금요일

[2023-03-31] aws cli 업데이트가 필요 합니다.

[2023-03-31] aws cli 업데이트가 필요 합니다.


안녕하세요. 클스 입니다.


aws cli를 v1 설치하고 v2로 업데이트를 하였습니다. 한 1년전인 것 같습니다. python 3.9.11 을 설치하고 

v2를 설치했었습니다.  당연히 python 을 업데이트 하면 자동으로 aws cli 가 최신 파이썬을 물고 동작할 줄 알았는데 그렇지가 않네요


pyenv와 virtual env로 py3.11.2 를 만들고

$ aws --version 을 해보시면 python 3.9.11 에서 돌고 있다. 이렇게 표시됩니다.

그래서 다시 설치했더니 python 3.11.2 로 변경됐습니다. 아래는 최신 aws cli 설치 방법 입니다.

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

참고하셔서 본인 환경에 맞게 설치하시면 됩니다,

(py3.11.2) [~/data/s3]$ aws --version

aws-cli/2.11.7 Python/3.11.2 Darwin/22.4.0 exe/x86_64 prompt/off

이제 최신 버전으로 표시되네요~


이상 클스 였습니다.



라벨: , , ,

2023년 2월 15일 수요일

ChatGPT Python 으로 해보기 MacOS

 ChatGPT Python 으로 해보기<OpenAI>


1. pyenv + virtualenv + poetry 가 설치되어 있어야 한다.

2. 디렉토리 만들기

$ mkdir chatgpt
$ cd chatgpt


3. 패키지 설치하기

$ poetry init  

   ... 계속 엔터 ...

$ poetry add openai

$ code . 

4. main.py 짜기

import openai import argparse YOUR_API_KEY = '여기에 API KEY 입력' def chatGPT(prompt, API_KEY=YOUR_API_KEY): # set api key openai.api_key = API_KEY # Call the chat GPT API completion = openai.Completion.create( engine = 'text-davinci-003' # 'text-curie-001' # 'text-babbage-001' #'text-ada-001' , prompt = prompt , temperature = 0.5 , max_tokens = 1024 , top_p = 1 , frequency_penalty = 0 , presence_penalty = 0) return completion['choices'][0]['text'] def main(): # 지문 입력 란 prompt = input("Insert a prompt: ") print(chatGPT(prompt).strip()) if __name__ == '__main__': main()


5. 실행 하기

$ python main.py



아직 한글이 지원이 잘 안되기 때문에 영어로 하면 잘나온다.

그리고 무료의 경우 한도가 있어서 아래와 같이 오류가 나온다.





라벨: , , ,

2022년 12월 30일 금요일

pyenv, pyenv-virtualenv & python & poetry


pyenv, pyenv-virtualenv & python & poetry

1. pyenv & python 설치
$ brew install pyenv
$ pyenv install --list
$ pyenv install 3.11.1
$ pyenv global 3.11.x
$ pyenv local 3.11.x
2. pyenv-virtualenv & 가상환경 만들기
$ brew install pyenv-virtualenv
... installing....

$ vi ~/.zshrc
-- 아래 추가 : 이미 있을 수 있음 --
# pyenv command
eval "$(pyenv init -)" 

# pyenv-virtualenv command
eval "$(pyenv virtualenv-init -)" 
$ source ~/.zshrc

# create virtual environment
$ pyenv virtualenv PYTHON-VERSION ENVIRONMENT-NAME

# check available virtual environments in local
$ pyenv virtualenvs

# delete VIRTUAL ENVIRONMENT
$ pyenv uninstall ENVIRONMENT-NAME

# activate virtual environment
$ pyenv activate ENVIRONMENT-NAME

# GET OUT OF VIRTUAL ENVIRONMENT
$ pyenv deactivate
3. python 필수 라이브러리
  • 가상환경을 활성화 하고 하면 된다. 패키지는 가상환경에만 적용된다.
# install and upgrade pip
$ python3 -m pip install --upgrade pip  혹은 
$ pip install --upgrade pip

# check available packages
$ pip list
  필요한 패키지는 가상환경에서 다시 설치해야 한다.

# 필수 패키지 
$ pip install package1, package2, ...
4. poetry
  • 목적 : 프로젝트<디렉토리>별 패키지를 설치하고 관리해준다.
  • poetry 설치
    • # poetry curl 로 최신버전 설치하기
      $ curl -sSL https://install.python-poetry.org | python3 -
      
      # brew 로 설치하기
      $ brew install poetry
      

  • python 3.10.4 까지는 되나, 3.11.x 부터 안된다. poetry가 아직 python 3.11.x 는 지원하지 않음
    • 문제
      에러내용 : from cleo import Application as BaseApplication .....
      
    • 해결
      $ cd ~/.poetry/lib/poetry/_vendor
      $ cp -R py3.10 py3.11

라벨: , , ,

2021년 1월 14일 목요일

Python wget 으로 파일 다운로드시 SSL 인증오류 해결법

 

Python wget 으로 파일 다운로드시 SSL 인증오류 해결법


회사에 방화벽이나 여러 침입탐지 시스템이 구성되어 있는 상황에서 오픈소스 기반으로 개발을 하기 쉽지 않다.
그래서 SSL 사이트는 다운로드가 안되는 경우도 있다.


아래 코드를 setup.py 등에 넣어두고 import setup 해서 매번 호출하면 된다.

try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

ilename = wget.download("https://raw.githubusercontent.com/e9t/nsmc/master/ratings_train.txt", "data")

라벨: ,

anaconda python 업데이트 on MacOS

 

anaconda python 업데이트 방법


  • 문제 정의

 

맵북에서  Anaconda를 이용해서 Python을 설치하고, 나름대로 Mac북에서 Homebrew 등으로
Python을 설치하면 버전이 다르고 서로 햇갈리게 된다.


  • 해별 방법

 

  • anaconda python 업데이트

conda search python
conda update -n base -c default conda

conda list anaconda$
conda install -c anaconda python=3.8.5

  • anaconda python이 두개의 위치에 설치되어 있음

시스템 전체 : ll /opt/anaconda3/bin/python*
사용자 폴더 : ll ~/opt/anaconda3/bin/python*

  • 그래서 둘다 바꿔주면 정상적인 버전이 바뀜

rm -rf /opt/anaconda3/bin/python & ln -s /opt/anaconda3/bin/python3.8 /opt/anaconda3/bin/python
rm -rf /opt/anaconda3/bin/python & ln -s /opt/anaconda3/bin/python3.8 ~/opt/anaconda3/bin/python

  • MacOS python 업데이트

brew install 

  • 이거 안되면 python 사이트가서 pkg 파일 받아서 설치하자.

  • Spyder IDE 에서도 동일한 Python 사용하기

  • Spyder 에도 python3.8.5를 사용하자
  • Spyder > python > Preferences > Python interpreter
  • /opt/anaconda3/bin/python 혹은 ~/opt/anaconda3/bin/python
  • Spyder 에서도 Python 3.8.5를 사용하자



라벨: , , ,