반응형

Python 실행 파일(exe) 만들기

매번 .py로 실행하기 번거로워서 .exe 실행파일로 만들었습니다. exe 파일을 만드는 방법은 여러가지 많지만, 여러 방법 중 하나인 pyinstaller 모듈을 이용한 exe 파일 만드는 방법을 포스팅 했습니다.

 

실행환경

운영체제 : window 10

파이썬 버전 : python 3.7

 

pyinstaller 설치

pip를 이용하면 간단하게 설치 할 수 있습니다.

 

커맨드 명령어

>> pip install pyinstaller
C:\Users\75385\Desktop>pip install pyinstaller
Collecting pyinstaller
  Downloading https://files.pythonhosted.org/packages/03/32/0e0de593f129bf1d1e77eed562496d154ef4460fd5cecfd78612ef39a0cc/PyInstaller-3.4.tar.gz (3.5MB)
    100% |████████████████████████████████| 3.5MB 3.3MB/s
  Installing build dependencies ... done
Requirement already satisfied: setuptools in c:\users\75385\appdata\local\programs\python\python37-32\lib\site-packages (from pyinstaller) (40.6.2)
Collecting pefile>=2017.8.1 (from pyinstaller)
  Downloading https://files.pythonhosted.org/packages/ed/cc/157f20038a80b6a9988abc06c11a4959be8305a0d33b6d21a134127092d4/pefile-2018.8.8.tar.gz (62kB)
    100% |████████████████████████████████| 71kB 5.2MB/s
Collecting macholib>=1.8 (from pyinstaller)
  Downloading https://files.pythonhosted.org/packages/41/f1/6d23e1c79d68e41eb592338d90a33af813f98f2b04458aaf0b86908da2d8/macholib-1.11-py2.py3-none-any.whl
Collecting altgraph (from pyinstaller)
  Downloading https://files.pythonhosted.org/packages/0a/cc/646187eac4b797069e2e6b736f14cdef85dbe405c9bfc7803ef36e4f62ef/altgraph-0.16.1-py2.py3-none-any.whl
Collecting pywin32-ctypes (from pyinstaller)
  Downloading https://files.pythonhosted.org/packages/9e/4b/3ab2720f1fa4b4bc924ef1932b842edf10007e4547ea8157b0b9fc78599a/pywin32_ctypes-0.2.0-py2.py3-none-any.whl
Collecting future (from pefile>=2017.8.1->pyinstaller)
  Downloading https://files.pythonhosted.org/packages/90/52/e20466b85000a181e1e144fd8305caf2cf475e2f9674e797b222f8105f5f/future-0.17.1.tar.gz (829kB)
    100% |████████████████████████████████| 829kB 5.0MB/s
Installing collected packages: future, pefile, altgraph, macholib, pywin32-ctypes, pyinstaller
  Running setup.py install for future ... done
  Running setup.py install for pefile ... done
  Running setup.py install for pyinstaller ... done
Successfully installed altgraph-0.16.1 future-0.17.1 macholib-1.11 pefile-2018.8.8 pyinstaller-3.4 pywin32-ctypes-0.2.0

설치가 완료되었습니다.

 

exe 파일 만들기

테스트용 test.py 만들기

import datetime

if __name__ == "__main__" :
    print("Start.")

    cur_time = datetime.datetime.now()
    print("Current time : %s" % cur_time)
    
    print("End.")

현재 시간을 출력해주는 간단한 프로그램입니다.

 

test.py가 있는 디렉토리로 이동하여, pyinstaller 명령어를 입력해줍니다.

>> pyinstaller --onefile test.py

참고로 --onefile 이라는 옵션을 넣어주면, 하나의 실행파일로 생성이 됩니다. (참고로, --noconsole 옵션을 넣어주면 콘솔창이 뜨지 않고 실행이 됩니다.)

 

실행 결과

명령어를 실행하면, 이와같이 dist, build 등 여러개의 파일이 생성됩니다.

dist 폴더로 들어가보면, 아래와 같이 실행파일(test.exe)이 생성된것을 확인 할 수 있습니다.

 

더블 클릭하여 실행할 수 도 있고, cmd로 확인할 수도 있습니다.

 

실행 결과가 너무 빨라서 사진을 찍기 힘들어, cmd를 이용하여 실행 해봤습니다.

 

참고 - 실행파일에 이미지 넣기

실행파일의 아이콘을 바꾸고 싶다면, 실행파일로 빌드하는 명령어에 --icon 옵션을 추가해줍니다.

>> pyinstaller --icon=test.ico --onefile test.py

그리고 옵션값에 원하는 이미지의 경로를 넣어줍니다. 이미지의 포맷은 ico이어야 합니다.

(https://icoconvert.com/ 해당 사이트에서 ico 이미지로 convert 가능합니다.)

 

 

실행파일이 이쁘게 잘 만들어졌습니다.

 

출처 : https://hongku.tistory.com/338

반응형
반응형

Python pip 설치시 이런 애러도 발생합니다.

 

...
... 


LINK : fatal error LNK1158: cannot run 'rc.exe'
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe' failed with exit status 1158

 저와 같은 경우에는 Python package jpype1 설치 시에 발생 하였는데, 해당 패키지에 포함된 C++ 관련 build 중에 지정된 경로와 실제 compiler의 위치에 차이가 있었지 않았나 추정 합니다.

 

 이를 해결하는 방법으로 윈도우에 기본 내장되어 있는 rc.exe 및 연관 파일을 설치 시스템이 접근하고 있는 폴더로 복사하하는 방법이 있습니다.

Copy File

 - rc.exe

 - rcdll.dll

 

[From]
C:\Program Files (x86)\Windows Kits\8.1\bin\x86

 

[To]

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64

 본 에러가 왜 발생하는지는 정확히 파악하지 못하였습니다. 추정컨데, 64비트용 Visual C++ 2015 Build Tools 설치시에 해당 32비트(x86) 파일이 포함되지 않은 상태로 시스템 Path 의 참조 위치가 변경된 것이 아닌가 생각합니다.

출처: https://ohohs.tistory.com/entry/Error-Solution-fatal-error-LNK1158-cannot-run-rcexe [Jay-go]

반응형
반응형

파일 입출력을 할 때 사전타입을 키:값으로 입력하는 방법에 대해서 

1. str(dict) 을 사용하는 방법
2. json 모듈을 이용하는 방법

1번은 아주 쉬운 방법이라 금방 성공했지만 2번의 경우 파일을 파이썬에서 입출력을 할 때는 문제가 없었지만 저장된 파일을 열어보니 한글이 유니코드 형태로 출력되었다.

 

=============================== Python ===============================

import json

dict = {'555': '123'}

with open('file.txt', 'w', encoding='UTF-8') as file:

     file.write(json.dumps(dict))

 

 

'저장된 결과'

{"555": "w\u3141"}

 

=============================== Python ===============================

 

문제를 해결하기 위해

1. 저장하는 방식을 .txt, .json 둘 다 사용해봤지만 둘 다 유니코드 문제가 발생하였다.

2. 인코딩 방식의 문제라고 생각하여 UTF-8, EUC-KR, ANSI 등으로 해봤지만 동일한 문제가 발생하였다.

3. 그럼 마지막으로 .dumps() 메서드를 사용 할 때 무슨 방식이 있을까하고 찾아봤는데 답이 있었다.

 

 

=============================== Python ===============================

import json

dict = {'555': '내용'}

with open('j.json', 'w', encoding='UTF-8-sig') as file:

     file.write(json.dumps(dict, ensure_ascii=False))

 

'''

'저장된 결과'

{"555": "내용"}

 

 

=============================== Python ===============================

 

.dumps() 메서드를 쓸 때 ensure_ascii = False 를 입력하면 정상적으로 입력이 되었다.

 

출처 : https://datamod.tistory.com/104

반응형
반응형
-- Compute fragmentation information for all full-text indexes on the database
SELECT c.fulltext_catalog_id, c.name AS fulltext_catalog_name, i.change_tracking_state,
       i.object_id, OBJECT_SCHEMA_NAME(i.object_id) + '.' + OBJECT_NAME(i.object_id) AS object_name,
       f.num_fragments, f.fulltext_mb, f.largest_fragment_mb,
       100.0 * (f.fulltext_mb - f.largest_fragment_mb) / NULLIF(f.fulltext_mb, 0)  AS fulltext_fragmentation_in_percent
FROM sys.fulltext_catalogs c
         JOIN sys.fulltext_indexes i
              ON i.fulltext_catalog_id = c.fulltext_catalog_id
         JOIN (
    -- Compute fragment data for each table with a full-text index
    SELECT table_id,
           COUNT(*) AS num_fragments,
           CONVERT(DECIMAL(9,2), SUM(data_size/(1024.*1024.))) AS fulltext_mb,
           CONVERT(DECIMAL(9,2), MAX(data_size/(1024.*1024.))) AS largest_fragment_mb
    FROM sys.fulltext_index_fragments
    GROUP BY table_id
) f
              ON f.table_id = i.object_id

출처: https://stackoverflow.com/questions/16061248/how-to-optimize-a-sql-server-full-text-search

반응형

+ Recent posts