반응형

배포 방법

  1. pip install pyinstaller
  2. pyinstaller script.py --onefile
  3. dist 에 생성된 파일을 복사

실행 전 필수 설정

    1.  파일을 실행한다.

    2. 시스템 설정 > 개인정보 보호 및 보안 하단 에서 확인없이 열기 를 클릭한다.

    3. 권한을 부여한다.

      - terminal > chmod 700 실행파일명

 

배포 후 발생된 문제

  1. 발생된 문제 : mac 에서 script 실행시 현재 경로를 임시파일로 가져오는 문제가 있으므로 os.getcwd() 등을 사용할 수 없었음
    • ini 파일 읽기, 파일 생성하기 등을 상대경로로 지정하더라도 스크립트 실행되는 경로가 임시파일 경로를 사용하기 때문에 실행되지 않음 (admin 계정)
    • --add-data 로 지정하여도 동일함
  2. 해결 방법 : https://blog.system32.kr/289

     import sys
     import os

 

     # 스크립트 경로 가져오기
     current_path = os.path.sep.join(sys.argv[0].split(os.path.sep)[:-1])

     # 현재 경로로 스크립트 실행 경로를 변경
     os.chdir(current_path)

 

 

이제 윈도우 뿐 아니라 mac 에서도 python 을 .. 

반응형
블로그 이미지

ingus

,
반응형

 

회사에서 반복적으로 수행하는 업무 중 

인내력을 요구하는 것은 가끔씩 파이썬으로 만들고 있다.

사실 3번째 회사에서 잡무 보다 개발업무를 하고 싶어서 시작한 언어인데..

현재 회사에서 업무를 도와주고 있다. 

 

파이썬 스크립트로 깨잘깨잘 프로그램을 만드는 이유는

반복적인 업무 수행 결과를, 아니면 나를 믿지 못하는 것도 있지만

프로그램으로 규격화하면 다른 사람도 이 업무를 쉽게 인수인계 받을 거란 생각이 크다.

 

현재 회사에서 자동화 해본 업무

1. AWS 특정 리전 S3에서 LB 로그를 다운 받아 읽어서 특정 응답코드만 분류하여 구글스프레드 시트에 자동으로 붙여넣기

2. 작업 완료시점을 확인하며 Swagger 나 curl 로 restful API(GET/PUT) 를 호출하는 리빌드 업무를, requests 를 이용하여 자동 호출

3. 여러개 터미널을 띄워서 병렬로 restful API(PUT)를 호출하는 업무를, ThreadPoolExecutor 와 requests 를 이용하여 자동 호출

  - https://docs.python.org/ko/3.7/library/concurrent.futures.html 

 

concurrent.futures — 병렬 작업 실행하기 — Python 3.7.16 문서

소스 코드: Lib/concurrent/futures/thread.py와 Lib/concurrent/futures/process.py concurrent.futures 모듈은 비동기적으로 콜러블을 실행하는 고수준 인터페이스를 제공합니다. 비동기 실행은 (ThreadPoolExecutor를 사용

docs.python.org



3번을 만들면서 비동기 호출 테스트할 때는 grequests 를 사용해봤었다.

https://pypi.org/project/grequests/

 

반응형
블로그 이미지

ingus

,
반응형

 

윈도우 작업스케줄러를 사용해도 되지만,

"내 일을 바꾸는 업무 자동화" 책에서 cron으로 배포하는 방법이 있어서 해봤다.

 

cron은 윈도우 작업스케줄러와 같이 잡 스케줄러다.

작업 실행 시간설정하는 부분이 스프링배치와 유사하다.

 

[ 선행 작업 ]

 - 배포용 프로그램을 만든다.

   (.py 파일을 바로 cron에 설정할 수 있지만, 유지관리 측면에서 배포용 프로그램 생성함)

 

2021.07.09 - [개발환경/python] - python 소스파일을 exe 파일로 배포하는 방법

 

python 소스파일을 exe 파일로 배포하는 방법

cron 또는 작업스케줄러로 배치를 작성하기 위해 배포를 했다. 크롬드라이브를 배포시 포함할 수 있는 데 --add-binary 구문을 사용하면 된다. 파이썬 터미널 > pip install pyinstaller 파이썬 터미널 > pyins

ingus26.tistory.com

 

1. cron 설치

  1) http://www.nncron.ru 사이트에 접속한다.

 

nnSoft: nnCron, nnCron LITE, nnBackup, nnSync

: nnCron : shareware : Win9*,ME,NT,2000,XP,Vista nnCron is an advanced and very powerful scheduler, scripting tool and automation manager. nnCron is very small in size (900k), but its capabilities are truly colossal. Besides possessing the traditional sche

www.nncron.ru

  2) 상단에 download 버튼을 클릭한 뒤, LITE 버전을 설치한다.

   -> 현재 LITE 버전은 nncronlt117.exe 이다.

 

  3) 설치가 완료되면 서비스에 cron 이 등록된다!

 

2. cron에 일정 등록

  1) 워드패드를 "관리자 권한으로 실행" 한다.

   

  2) 파일 > 열기 버튼을 클릭하여 cron.tab 파일을 선택한다.

     - 모든 문서(*.*)로 해야 cron.tab이 보인다.

     - 설치경로 : C:\Program Files (x86)\cron

   - 워드패드에 분 시 매일 매월 매요일 "경로\실행파일명" 를 입력한다.

     ㄴ 참고 리눅스 crontab 시간 설정 방법 예제 샘플 (tistory.com)

 

리눅스 crontab 시간 설정 방법 예제 샘플

crontab 파일에 시간을 설정하는 방법을 알아보겠습니다. crontab 서식 분 시 일 월 요일 명령어또는 스크립트 단위  내용  분  분(0~59)을 설정. *을 설정한 경우 1분 단위로 실행.  시  시간(0~23)을

ponyozzang.tistory.com

   3) 설정된 시간에 제대로 실행되는 지 결과물과 로그를 확인해본다.

    - 로그위치 : C:\Program Files (x86)\cron\log

반응형
블로그 이미지

ingus

,
반응형

2021.07.09 - [개발환경/python] - python, selenium 창 안띄우고 실행 및 파일 다운로드 방법

 

python, selenium 창 안띄우고 실행 및 파일 다운로드 방법

1. 인터넷브라우저 창을 안띄우고 실행하는 방법 - option을 추가하고 headless를 명시한다. # -*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.chrome.options import Options opt..

ingus26.tistory.com

회사 컴퓨터에 다양한 보안 프로그램이 설치 되어 있어서

시행착오가 많았다.

 

내 컴퓨터는 윈도우가 관리자 계정이 아니라 사용자 계정으로 되어있다.

 

[ 선행 작업 ]

  1) 파일을 exe파일로 배포한다.

    -> py 파일을 바로 실행할 수 있지만,

        유지관리측면에서 다른 사람과 공유하기 쉽게 exe 파일로 배포했다.

 

    ㄴ 관련글 

2021.07.09 - [개발환경/python] - python 소스파일을 exe 파일로 배포하는 방법

 

python 소스파일을 exe 파일로 배포하는 방법

cron 또는 작업스케줄러로 배치를 작성하기 위해 배포를 했다. 크롬드라이브를 배포시 포함할 수 있는 데 --add-binary 구문을 사용하면 된다. 파이썬 터미널 > pip install pyinstaller 파이썬 터미널 > pyins

ingus26.tistory.com

   2) 파일 다운로드 기능이 있으면, 절대경로 또는 상대경로를 지정해준다.

    ㄴ 관련글

2021.07.09 - [개발환경/python] - python, selenium 창 안띄우고 실행 및 파일 다운로드 방법

 

python, selenium 창 안띄우고 실행 및 파일 다운로드 방법

1. 인터넷브라우저 창을 안띄우고 실행하는 방법 - option을 추가하고 headless를 명시한다. # -*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.chrome.options import Options opt..

ingus26.tistory.com

 

 

1. 윈도우 작업스케줄러 이용

   - 나의 경우 사용자 계정으로 작업스케줄러를 실행할 수 없어서,

     관리자 권한으로 작업스케줄러를 실행했다.

 

 

   1) 작업 스케줄러 (로컬)에서 마우스 우클릭하여, "작업 만들기(R)..."을 클릭한다.

 

  2) "이름(M)" 을 지정하고 

     "사용자의 로그인 여부에 관계없이 실행(W)"을 선택한다.

다음, 작업실행시 사용할 사용자 계정을 변경한다.

-> 해당작업은 작업스케줄러를 관리자권한으로 실행하여

    작업실행시 사용할 사용자 계정이 Administrator로 설정되었기 때문에 변경하는 단계이다.

    또한, os.getlogin()를 이용하여 컴퓨터 계정 정보를 다운로드 경로에 사용하고 있다면

    꼭 사용자계정으로 변경해야 Administrator 하위폴더에 저장되지 않고 사용자계정 하위폴더로 저장된다.

 

 [ 선행 작업 ]

 - 사용자 계정으로 변경시 "일괄 작업으로 로그온" 권한을 추가하라는 팝업이 뜬다.

   이 부분은 아래 블로그를 통해 해결해보자.

Windows 작업 스케줄러에 URL 실행 예약작업 등록 :: ::: System Engineer 대백과사전 ::: (tistory.com)

 

 

 3) 위 이미지에서 "사용자 또는 그룹 변경(U)..."을 누른다.

     그리고 "고급(A)..."을 클릭한다.

    "지금 찾기(N)" 클릭하여

    사용자계정을(현재 컴퓨터 계정 아이디) 선택하고 "확인" 버튼을 클릭한다.

 

  4) 스케줄러를 수행할 시작점을 지정해준다.

  - 트리거 탭에서 "새로 만들기(N)..."을 선택한다.

 

- 그리고 작업 시간 정보를 입력한다.

 

 5) 스케줄러로 실행할 동작을 지정해준다.

 - 동작 탭에서 "새로 만들기(N)..." 을 클릭한다.

- "찾아보기(R)..."을 클릭하여 실행할 프로그램을 지정한다.

 

 6) 전원 옵션을 해제한다.

  - 조건 탭에서 "컴퓨터의 AC 전원이 켜져 있는 경우에만 작업 시작(P)"를 체크 해제한다.

 

  7) 마무리 되면, 암호 입력창에 암호를 입력한다.

     그리고 작업스케줄러를 실행했을 때

     제대로 지정된 시간에 작업이 완료되는 지 확인해본다.

   ㄴ 잘 되지 않는 경우 1-2)에서 "가장 높은 수준의 권한으로 실행(I)"을 체크한 후 작업이 진행되는 지 확인해본다.

 

   ※ 실행 기록을 확인하고자 한다면

       작업 스케줄러 왼쪽 상단, 아래 이미지의 빨간색 표시를 클릭한 뒤

       우측 창에서 "모든 작업 기록 사용" 을 클릭하고

       다시 작업을 실행해본다.

 

- 끝 - 

반응형
블로그 이미지

ingus

,
반응형

 - 파이참 오른쪽 하단에 버전정보를 클릭한다.

 - Add Interpreter...를 클릭한다.

 

- 경로를 설정해준다. (완료)

 

 

기존에 사용중이던 프로젝트 인 경우

아래 Run/Debug Configurations 설정이 필요하다.

안 그럴경우 이전 파이썬 경로/환경설정을 가져오면서 오류가 났다.

 

- 파이참 오른쪽 상단에 ▶의 좌측 버튼을 클릭한다(노란색 표시된 부분)

 

- Edit Configurations...를 클릭한다.

 

- 제거할 항목을 선택하고 - 를 클릭한다.



출처: https://ingus26.tistory.com/76 [일상기록]

반응형
블로그 이미지

ingus

,
반응형

 

  cron 또는 작업스케줄러로 배치를 작성하기 위해 배포를 했다.

  크롬드라이브를 배포시 포함할 수 있는 데 --add-binary 구문을 사용하면 된다.

 

  파이썬 터미널 > pip install pyinstaller

  파이썬 터미널 > pyinstaller --add-binary "파일명.exe;." 소스파일명.py

 

  배포용으로 생성된 파일은 아래 경로에 있다

  ㄴ 위치 : 소스폴더 > dist 폴더 하위

   

반응형
블로그 이미지

ingus

,
반응형

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

server = smtplib.SMTP("smtp 주소", "smtp 포트")
server.starttls()
server.login("보내는 사람 이메일 계정", "보내는 사람 이메일 비밀번호")

msg = MIMEMultipart('alternative')
msg['Subject'] = "제목"
msg['From'] = "보내는 사람 이메일 계정"
msg['To'] = "받는 사람 이메일 계정"
mailContent= "메일 본문"

 

mailContent= MIMEText(mailContent, 'html')
msg.attach(mailContent)

server.sendmail(msg['From'], msg['To'].split(','), msg.as_string())
server.quit()

 

 

 

 

2021.06.24 - [개발환경/python] - 윈도우에서 Python으로 이메일 발송시(smtp) 발송 안 되는 문제 해결방법

 

윈도우에서 Python으로 이메일 발송시(smtp) 발송 안 되는 문제 해결방법

 파이썬 파일 자체 인코딩 문제인 줄 알고 헤맸는 데  사실은 정말 단순하게도 컴퓨터 이름 인코딩 문제였다. [ 오류 내용 ] UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 0..

ingus26.tistory.com

 

반응형
블로그 이미지

ingus

,
반응형

 

1. 인터넷브라우저 창을 안띄우고 실행하는 방법

  - option을 추가하고 headless를 명시한다.

# -*- coding:utf-8 -*-
from selenium import webdriver

from selenium.webdriver.chrome.options import Options

opts = Options()
opts.add_argument('headless')

wb = webdriver.Chrome('chromedriver', options=opts)

 

2. 다운로드 경로에 파일 다운이 안되고, 임시 파일로만 다운받아지다가 사라질 경우

   파일 다운로드 방법

  -  option 설정에 user-agent 를 명시한다.

opts.add_argument("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64")

 

3. 다운로드 경로를 변경하고 싶은 경우 

  - execute_cdp_cmd에 params 값을 선언한다.

    -> os를 import하고, os.getlogin() 를 선언 할 경우 컴퓨터 계정명을 가져온다.

import os

 

downloadPath = "C:\\Users\\{}\\Downloads\\폴더명".format(os.getlogin())
params = {'behavior': 'allow', 'downloadPath': downloadPath}

wb.execute_cdp_cmd('Page.setDownloadBehavior', params)

 

※ getpass를 import하고, getpass.getuser()를 선언해서 계정명을 가져올 경우..

   파이참에서 실행할때는 윈도우 계정 아이디를 가져오는 데

   cron을 사용해서 실행할때는 컴퓨터 이름을 가져왔었다.

 

4. 창 크기를 변경하고 싶은 경우 

 - set_window_size 옵션을 설정한다.
wb.set_window_size(1920, 1080)

 

 

-  끝 - 

반응형
블로그 이미지

ingus

,
반응형

   파이썬 파일 자체 인코딩 문제인 줄 알고 헤맸는 데

   사실은 정말 단순하게도 컴퓨터 이름 인코딩 문제였다.

 

[ 오류 내용 ]

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte

 

[ 디버깅시, 오류 발생 지점 ]

 - socket.py 파일

if not name or name == '0.0.0.0':
name = gethostname()
try:
hostname, aliases, ipaddrs = gethostbyaddr(name)
except error:

pass

 

[ 해결 방법 ]

 한글로 된 컴퓨터 이름을 영문으로 바꾸거나.. ( 메뉴: 내 PC 속성 > 이 PC의 이름 바꾸기(고급) 클릭 )

 socket.py 소스 분에 인코딩 부분을 추가한다.

참고 사이트

Python connection SMTP server error: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 0...... - Programmer Sought

 

Python connection SMTP server error: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 0...... - Programmer S

Python connection SMTP server error: UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xce in position 0... wrong description: Connecting to the SMTP server has been reporting an error, and it’s finally a long time to toss. . . The error code is

www.programmersought.com

 

반응형
블로그 이미지

ingus

,