반응형

How to convert to python script to exec file with options

 

PyInstaller는 python script를 python interpreter나 추가적인 module 설치 없이 파일 하나로 동작할 수 있게 실행 파일을 만들어주는 패키지이다.

기본적인 사용 방법은 다음과 같다.

pyinstaller hello.py

이번에는 추가적으로 사용할 수 있는 옵션들 소개와 사용 예시를 소개하려고 한다. 물론 보다 자세한 설명은 공식 사이트에 있다.

이번 포스팅에서 사용할 hello.py 스크립트의 내용은 다음과 같다.

import argparse
import cv2

parser = argparse.ArgumentParser()
parser.add_argument('--name', type=str, default='world')
args = parser.parse_args()

def main():
    img_path = './help.jpeg'
    img = cv2.imread(img_path)
    
    print('hello ' + args.name)
    print(img.shape)

    return
if __name__ == '__main__':
    main()

스크립트와 같은 위치에 있는 help.jpeg라는 이미지와 name이라는 명령어 인자를 읽어와 hello name과 이미지 사이즈를 출력하는 간단한 코드이다. python interpreter로 간단하게 실행을 한다면 다음과 같이 출력이 된다.

(pytorch) hyeonjeong@baghyeonjeongs-MacBook-Pro Study % python hello.py --name=world    
hello world
(225, 225, 3)

이러한 script를 실행파일로 만들 때 다음과 같은 옵션들을 사용할 수 있다.

-F, --onefile

pyinstaller를 사용해서 실행파일을 생성하게 되면 프로그램에 필요한 여러 파일들이 생성된다. 이러한 추가적인 파일 없이 실행파일을 하나의 bundle로 묶어서 만들어 주는 옵션이다. 다음과 같이 두 가지 방법으로 사용할 수 있다.

pyinstaller -F hello.py
pyinstaller --onefile hello.py

이 옵션을 사용하여 실행파일을 생성하면 dist 폴더 안에 hello라는 폴더가 생성되지 않고 바로 hello라는 실행파일이 생성된다.

-y, --noconfirm

이미 pyinstaller로 실행파일을 생성한 후에 script를 수정하고 다시 생성하고 싶을 때 파일의 삭제나 대체하겠다는 입력 없이 바로 대체하여 생성시켜 주는 옵션이다.

pyinstaller -y hello.py
pyinstaller --noconfirm hello.py

--add-data <SRC;DEST or SRC:DEST>

이미지나 텍스트 파일과 같이 script에서 사용되는 추가 파일들을 실행파일에 포함시키는 옵션이다. 다음과 같이 사용할 수 있다.

이때 윈도우의 경우에는 ;를 사용하고 linux나 MacOS와 같은 대부분의 unix 시스템에서는 :를 사용하여 소스파일과 저장될 폴더를 구분하여 사용한다.

pyinstaller -F --add-data="help.jpeg:." hello.py

위의 예제에서는 script와 이미지파일이 같은 폴더 내에 있었기 때문에 이미지 경로를 단순하게./help.jpeg라고 하였지만 실행파일로 만들어지는 순간 run-time으로 임시 폴더에 있는 이미지 파일을 불러와야 하기 때문에 경로를 수정해 주어야 한다.

import argparse
import cv2
import sys
import os

parser = argparse.ArgumentParser()
parser.add_argument('--name', type=str, default='earth')
args = parser.parse_args()

def main():
    img_path = os.path.join(getattr(sys, '_MEIPASS'), 'help.jpeg')
    img = cv2.imread(img_path)
    
    print('hello ' + args.name)
    print(img.shape)

    return
if __name__ == '__main__':
    main()

sys 모듈을 추가로 import 하고 img_path에 sys._MEIPASS 경로에 있는 help.jpeg 이미지 경로로 수정했다.

 

With Argparse

당연하게도 만들어진 실행파일에 인자를 받아서 사용할 수 있다. 실행파일을 생성할 때는 추가로 해야 할 옵션을 없고 생성된 실행파일을 사용할 때 python interpreter를 사용해서 실행하는 것과 같이 뒤에 추가로 붙여서 사용하면 된다.

./dist/hello --name=earth
hello earth
(225, 225, 3)

 

Reference

https://pyinstaller.org/en/stable/index.html

 

PyInstaller Manual — PyInstaller 5.8.0 documentation

PyInstaller bundles a Python application and all its dependencies into a single package. The user can run the packaged app without installing a Python interpreter or any modules. PyInstaller supports Python 3.7 and newer, and correctly bundles many major P

pyinstaller.org

https://docs.python.org/ko/3/library/argparse.html

 

argparse — Parser for command-line options, arguments and sub-commands

Source code: Lib/argparse.py Tutorial: This page contains the API reference information. For a more gentle introduction to Python command-line parsing, have a look at the argparse tutorial. The arg...

docs.python.org

 

반응형
반응형

How to convert python script to exec file

 

기본적인 사용법

최근 파이썬으로 쓰여있는 코드를 다른 사람들이 함부로 볼 수 없게 실행파일로 만들어야 하는 일이 생겼었다.

구글링을 하다가 아주 적당한 패키지를 발견했다. 바로바로 PyInstaller

공식 사이트 설명에 따르면 python interpreter나 module의 설치 없이 실행할 수 있는 파일을 만들어 준다고 한다.

Window, Linux, MacOS에서 모두 사용할 수 있지만 cross-compile은 불가능하다고 한다. 즉, 윈도우에서 만들고 리눅스에서 사용은 안된다는 것.

설치 방법은 아주 간단하다. 본인이 원하는 환경에 따라서 둘 중 하나를 선택하면 된다.

conda install pyinstaller
pip install pyinstaller

기본적인 사용 방법도 아주 간단하다. 

먼저 실행파일로 만들기 원하는 python script를 준비한다. 예시 파일 이름은 hello.py

print('hello world')

그러면 다음과 같이 pyinstaller hello.py 형태로 사용할 수 있다.

(pytorch) hyeonjeong@baghyeonjeongs-MacBook-Pro Study % pyinstaller hello.py
487 INFO: PyInstaller: 5.6.2
487 INFO: Python: 3.9.15 (conda)
509 INFO: Platform: macOS-10.16-x86_64-i386-64bit
510 INFO: wrote /Users/hyeonjeong/Study/hello.spec
515 INFO: UPX is not available.
516 INFO: Extending PYTHONPATH with paths

그럼 다음과 같이 build, dist 폴더와 pythonscript.spec 파일이 생성된다.

(pytorch) hyeonjeong@baghyeonjeongs-MacBook-Pro Study % ls  
build		dist		hello.py	hello.spec

여기서 우리가 원하는 실행 파일은 dist 폴더 안에 pythonscript 이름의 폴더 안에 pythonscript 이름으로 생성되어 있다.

(pytorch) hyeonjeong@baghyeonjeongs-MacBook-Pro Study % ./dist/hello/hello
hello world

PyInstaller Manual

https://pyinstaller.org/en/stable/

 

PyInstaller Manual — PyInstaller 5.8.0 documentation

PyInstaller bundles a Python application and all its dependencies into a single package. The user can run the packaged app without installing a Python interpreter or any modules. PyInstaller supports Python 3.7 and newer, and correctly bundles many major P

pyinstaller.org

 

반응형
반응형

호떡의 산

겨울은 길거리 간식의 계절... 그중에서도 호떡은 겨울 간식의 왕이라고 생각한다.

하지만 최근 오리지널 호떡을 찾기 힘들다. 씨앗호떡, 기름 없는 호떡들이 판을 치고 있다.

그러던 어느날 마트에서 장을 보다가 백설의 찹쌀 호떡 믹스를 발견했다. 이것은 운명!

몬가 호떡을 집에서 만들어 먹는다는 것은 굉장히 번거로울 것이라고 생각되지만... 실제로 번거롭다.

하지만 생각보다 만들만하고 어렵지도 않다. 심지어 밖에서 파는것과 맛도 유사하다. 잼 믹스의 양만 다체로워질 뿐.

만들면서 중간중간 집어먹은 2개를 제외하고 한 개를 다 사용했을 때 나오는 호떡의 양은 위의 사진과 같다.

 

호떡을 만들면서 느낀 점

호떡은 기름이다

 

지글지글 호떡

반응형
반응형

플레이타임 약 60시간...켜놓고 잣었나...?

Strange Horticulture(스트레인지 호티컬쳐, 기묘한 원예가)는 인디 게임을 사랑하는 사람으로서 스팀 상점에서 새로운 인디게임이 없을까~ 하면서 구경을 하다가 발견한 오컬트 퍼즐 게임이다.

스팀 상점의 게임 설명은 다음과 같다. 모든 평가가 압도적 긍정적...!

스팀 게임 설명

스토리가 있고 호러에다가 2D 일러스트 게임이라니! 완전 내 취향이라고 생각했었다.게다가 한글지원에 Mac OS 환경에서도 플레이 가능!

개인적인 평가로는 5점 만점에 🌟3.5점🌟

가격도 저렴하고 플레이타임도 긴 편이라고 생각되고 여러 가지 요소들이 개인적인 취향에 부합되지만..

전반적으로 게임의 스토리가 글로만 전달되기 때문에 스토리에 몰입하기가 힘들고 게임(식물 맞추기, 장소 찾기 퍼즐)과 스토리의 시너지가 엄청나게 좋다는 생각은 안 들었기 때문이다! 개인적으로 생각하는 비슷한 느낌의 상위 호환 게임은 Papers, Please.

반응형
반응형

일반적으로 다른 블로그나 글에서 설명하는 SMAPI 모드 설치에 대한 가이드라인이 윈도우를 기준으로 설명이 되어있다.
하지만 Mac OS 유저들도 스타듀밸리 모드를 사용하고 싶은 법!

게임 라이브러리에서 바로 게임 파일 폴더를 확인할 수 있다.

스팀 라이브러리를 통해서 쉽게 게임 폴더를 찾을 수 있지만 게임 파일에 대한 정확한 위치는 다음과 같다.

Stardew Vally 폴더 위치

 
위도우에서는 Stardew Valley 폴더 안에 있는 Mods 폴더에 다운받은 모드 폴더들을 넣으면 되지만 Mac OS에서는
Stardew Valley > Contents > MacOS > Mods 에 다운로드한 모드 폴더들을 옮겨주면 된다.

요렇게

 

반응형
반응형

심지어 아직도 플레이 중...

개인적으로 픽셀 그래픽&힐링 시뮬레이션을 좋아하는 사람으로서 스타듀밸리는 최고의 게임...

완결을 본 적도 없고 있는지도 잘 모르지만 그래도 약 500시간 정도의 플레이 타임을 가진 유저로써 콘텐츠를 추가하고 싶은 욕심이 생겼다. 그래서 추가적으로 콘텐츠를 늘릴 수 있는 확장팩을 추가했는데 나무위키를 참고해서 총 3개의 확장팩을 추가했다!

 

한글화 패치를 위해서 Mac OS를 사용하는 유저는 설명에 적혀있는 데로 파일을 일일이 덮어씌워야 한다 😂 한글화 패치 폴더에 들어있는 json 파일을 일일이 옮겨줘야 한다는 것... 처음 설치할 때 설명을 안 읽고 그냥 폴더 통째로 복사했다가 처음부터 다시 설치했었다

스타듀 밸리 대규모 확장 모드 (Stardew Valley Expanded, SVE)

가장 추전 하는 확장 모드

오리지널 스타듀 밸리와 가장 이질감 없이 추가되는 모드라고 생각한다.

다른 모드들은 마을을 추가적으로 만든다. 따라서 NPC들을 만나려면 마을을 찾아가야 해서 좀 귀찮다. 하지만 이 모드는 기존의 스다듀 밸리 마을을 조금씩 수정·확장하기 때문에 처음부터 있었던 NPC 같다.

https://www.nexusmods.com/stardewvalley/mods/3753?tab=description

 

Stardew Valley Expanded

Stardew Valley Expanded is a fanmade expansion for ConcernedApe's Stardew Valley. This mod adds 27 new NPCs, 50 locations, 260 character events, 27 fish, reimagined vanilla areas, two farm maps, a re

www.nexusmods.com

https://www.nexusmods.com/stardewvalley/mods/8633

 

Stardew Valley Expanded Korean

Stardew Valley Expanded Korean Translation

www.nexusmods.com

릿지사이드 빌리지 (Ridgeside Village, RSV)

버스 정류장에 생기는 케이블카를 타고 찾아갈 수 있는 릿지사이드 마을이 추가된다. 릿지사이드 마을에는 산마루 던전(?)과 새로운 물고기와 나무들 등 다양한 콘텐츠를 포함하고 있다.

버스 정류장 오른쪽에 케이블카로 가는 길이 추가된다

https://www.nexusmods.com/stardewvalley/mods/7286

 

Ridgeside Village

Ridgeside Village adds over 50 new NPCs, a new location, new items, new shops, new festivals, custom music, custom quests, and more!

www.nexusmods.com

https://www.nexusmods.com/stardewvalley/mods/8371

 

Ridgeside Village Korean Translation

Ridgeside Village Korean Translation

www.nexusmods.com

동쪽 비탈길 (East Scarp, ES)

마을 오른쪽 다리를 건너면 찾아갈 수 있는 이스트 스카프 마을이 추가된다. 이 마을을 연결하는 다리에서는 신기한 물고기들도 잡을 수 있다. 원본 모드를 미리 다운로드할 필요 없이 바로 한글화 패치 모드로 다운로드하면 된다.

https://www.nexusmods.com/stardewvalley/mods/5787

 

East Scarp

Welcome to East Scarp! An expansion adding new NPCs; new locations; new fish; shops; special orders - and secrets.In a picturesque location by the sea.

www.nexusmods.com

https://www.nexusmods.com/stardewvalley/mods/9278

 

East Scarp Total ver Korean

Stardew Valley East Scarp (+ all sub mod) Korean Translation

www.nexusmods.com

 

이 세 가지 모드의 가장 큰 장점 중의 하나는 바로 서로 호환이 가능하다는 점..!

나무위키에도 가능하다고 적혀있지만 그래도 혹시 안되면 어떡하나 했었다. 그래도 무사히 적용 완료

세 가지 모드를 모두 적용하면 아래 이미지와 같이 지도가 변하게 된다. 참고로 NPC 위치가 지도에 표시되는 모드도 적용한 모습.

세가지 모드를 모두 적용한 지도 (대확장 모드: 전체적으로, 릿지사이드: 좌측에 작은 지도 추가, 동쪽 비탈길: 오른쪽 마을 추가)

개인적으로 맥북을 사용하는 유저로써 이 세 가지 확장 모드를 적용하는 것은 다소 번거로웠다. 하지만 끈기를 가지고 적용하다 보면 할 수 있다...! (아직 한글화 패치는 100% 적용하지 않았음 ㅠㅠ)

 

혹시라도 모를 모드 호환 시 참고를 위한 현시점 적용한 SW Version

> SMAPI 3.18.2

> East Scarp 2.2.5

> Stardew Valley Expanded 1.14.18

> Ridgeside Village 2.2.5

 

 

반응형
반응형

개인적인 별점 🌟4.0🌟

 

라라랜드 감독의 신작! 라라랜드와 위플래쉬 감독의 신작이 나왔다는 소식을 듣고 냉큼 보러 갔다

다소 야하고 눈부심이 있을 수 도 있다는 얘기만 듣고 스토리에 대한 아무런 정보도 없이 갔는데, 여기에 추가로 영화가 엄청 길다는 정보도 알았어야 했다😂 무려 3시간... 요즘 영화는 너무 길다

개인적으로는 매우 좋았다! 하지만 추천은..좀...? 영화를 좋아한다면 한번쯤 도전을 해 볼 영화라고 생각한다!

하지만 매우 긴 러닝타임과 직설적이지 않은 스토리로 대중성은 다소 떨어지기 때문에 모든 사람들에게 사랑받을 수는 없는 영화다

우리가 사랑하는 영화를 위한 오케스트라

 

반응형

'Watching' 카테고리의 다른 글

[영화] 덩케르크 후기  (0) 2022.11.16
반응형

🌟추천🌟

 

크리스토퍼 놀란 감독의 2017년도 작품 덩케르크를 친구들과의 영화토론을 계기로 이제서야 보게 되었다.

난 이 영화를 왜 이제서야 봤을까! 영화관에서 본다면 더 좋았을 것이라는 생각을 하면서 봤었고 1시간 46분이라는 러닝타임이 짧지 않은 영화임에도 영화가 짧게 느껴질 정도로 꽤나 몰입해서 영화를 보았다. 본 영화는 세계대전 중 덩케르크에서 후퇴하는 연합군에 관한 내용으로 처음 영화 도입부에 짧은 설명을 제외하고는 추가적인 설명없이 후퇴라는 사건에 초점을 맞춰서 영화가 진행된다. 또한 실제 사건을 바탕으로 제작된 영화이기 때문에 줄거리는 매우 간단하다. 따라서 같이 영화를 본 친구들 중에서는 간단한 줄거리로 인해서 지루했다고 하는 사람도 있었다. 하지만 이 영화의 매력 포인트는 이러한 사건을 어떻게 영화로 표현 했는지라고 생각한다. 이 영화의 전반적인 노란톤 그리고 평범한 군인인 주인공의 관찰자 시점으로 지켜보는 후퇴 과정들이 이 영화를 담백하면서도 오히려 몰입하게 만든다고 생각한다.

 

반응형

'Watching' 카테고리의 다른 글

[영화] 바빌론 후기  (0) 2023.02.13
반응형

새로운 분야에 대해서 공부하기 시작할 때 접근하기 위해서 필요한 키워드를 정리하는 것을 목적으로 한다. 그 분야에 대해서 공부를 할 때 발견한 키워드들을 기록할 예정이다. 

 

  • Model Compression
    • Pruning
    • Knowledge Distillation (KD) - Knowledge transfer
      • Response-based Knowledge
  • Segmentation
    • Image Segmentation, Semantic Segmentation
  • Object Detection
  • Classification
  • XAI
  • Learning
    • Active Learning
      • warm-up
      • sample selection
    • Multitask Learning
  • Loss Function
    • Segmentation Loss
      • Distribution-based Loss
        • Cross-Entropy Loss
      • Region-based Loss
        • Dice Loss
      • Boundary-based Loss
        • Hausdorff Distance Loss
      • Compounded Loss
  • Learning Rate - Super Convergence
    • Cyclical Learning Rate (CLR)
  • Backbone Network
    • MobileNet

Reference

  • Knowledge Distillation: A Survey

 

반응형

+ Recent posts