이미 만들어진 DB에서 sqlalchemy Model 생성하기

 

 

'Python' 카테고리의 다른 글

Installing mysqlclient for debian stretch  (0) 2017.08.21
Python3.6 optimize installation for RaspberryPI  (0) 2017.08.21
Install Python3.6 on RPI with berryconda  (0) 2017.07.06
[python] int to bytes  (1) 2017.02.18

sudo apt-get install python3-dev libffi-dev openssl
sudo apt-get install default-libmysqlclient-dev # for debian stretch
pip3 install mysqlclient

컴파일과 빌드에 필요한 패키지 설치

sudo apt-get install build-essential checkinstall libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev -y

파이썬 다운로드, 컴파일&빌드

sudo -s
cd /tmp
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
# wget https://npm.taobao.org/mirrors/python/3.6.8/Python-3.6.8.tar.xz
tar xvf Python-3.6.8.tar.xz
./Python-3.6.8/configure --prefix=/usr/local --enable-optimizations && make altinstall

(간혹 python.org 서버에 장애가 있다면 타오바오에서 호스팅하는 미러 서버를(https://npm.taobao.org/mirrors/python) 이용할 수 있다.)



심볼릭 링크 걸기

sudo ln -sf /usr/local/bin/python3.6 /usr/local/bin/python3
sudo ln -sf /usr/local/bin/pip3.6 /usr/local/bin/pip3

다운로드&빌드한 파일 삭제

rm -rf /tmp/*



설치 완료 후 파이썬 버전 확인

python3 --version


wget https://github.com/jjhelmus/berryconda/releases/download/v2.0.0/Berryconda3-2.0.0-Linux-armv7l.sh
chmod +x Berryconda3-2.0.0-Linux-armv7l.sh
./Berryconda3-2.0.0-Linux-armv7l.sh -p /usr/local -b -s -u

github이 너무 느려서 gitlab에다 미러를 하나 만들었다.
https://gitlab.com/herren.lmc/mirror/raw/master/Berryconda3-2.0.0-Linux-armv7l.sh 으로 요청하면 조금더 빠르게 다운로드 할수 있다.

wget https://gitlab.com/herren.lmc/mirror/raw/master/Berryconda3-2.0.0-Linux-armv7l.sh
chmod +x Berryconda3-2.0.0-Linux-armv7l.sh
./Berryconda3-2.0.0-Linux-armv7l.sh -p /usr/local -b -s -u

[python] int to bytes


def int2bytes(n):
    result = bytearray()
    while (n):
        result.append(n & 0xff)
        n = n >> 8
    return result[::-1]
>>> list( int2bytes(4132) )
[16, 36]

python의 int 또는 long타입을 빅 엔디안(Big-Endian) 의 byte 로 변환하는 함수이다.
리틀 엔디안(Little-Endian)으로 변환하고 싶은 경우 [::-1]를 빼면 된다.

[PyQt5, pyinstaller] Failed to execute script pyi_rth_qt5plugins

PyQt로 만들어진 프로그램을 윈도우에서 pyinstaller로 컴파일을 했으나
만들어진 프로그램은 실행되지 않고 바로 종료 되었다.

콘솔모드로 컴파일후 콘솔로 실행했더니 아래와 같은 trace back을 얻을수 있었다.

Traceback (most recent call last):
  File "site-packages\pyinstaller-3.2.1+5b84a8d-py3.5.egg\PyInstaller\loader\rthooks\pyi_rth_qt5plugins.py", line 46, in <module>
  File "C:\Python35\lib\site-packages\pyinstaller-3.2.1+5b84a8d-py3.5.egg\PyInstaller\loader\pyimod03_importers.py", line 573, in load_module
    module = loader.load_module(fullname)
ImportError: DLL load failed: 지정된 모듈을 찾을 수 없습니다.
Failed to execute script pyi_rth_qt5plugins


구글링으로 두가지 해결방법을 찾을수 있었다.




pyinstaller develop 버전 설치

  1. github에서 develop branch를 내려받는다.

    https://github.com/pyinstaller/pyinstaller/archive/develop.zip

  2. 기존의 pyinstaller를 제거하고 내려받은 pyinstaller를 설치한다.

    py -3 -m pip uninstall pyinstaller
    cd pyinstaller-develop
    py -3 setup.py install
    

그런데 어째선지 나의 경우에는 설치가 되지 않았다. 아마 개발자가 업데이트 도중 아직 release를 하지 못한 모양이다..
어쩔 수 없이 다른 방법을 찾을수 밖에 없었다.




.spec파일 직접 작성

.spec 파일의 pathex 항목에 PyQt5의 bin디렉토리 경로를 추가해준다.

나의 경우에는 python3이 C:\Python35에 설치돼 있으므로,
PyQt5의 bin 디렉토리 위치는 C:\Python35\Lib\site-packages\PyQt5\Qt\bin 이 된다.

  1. setup.spec 파일을 만들어 각자 상황에 맞게 작성한다.

    # -*- mode: python -*-
    
    block_cipher = None
    app_path = 'my_app.pyw'
    app_name = 'my_app'
    
    a = Analysis([app_path],
                 pathex=[r'C:\Python35\Lib\site-packages\PyQt5\Qt\bin'],
                 binaries=[],
                 datas=[],
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher)
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)
    exe = EXE(pyz,
              a.scripts,
              exclude_binaries=True,
              name=app_name,
              debug=False,
              strip=False,
              upx=True,
              console=False , icon='' )
    coll = COLLECT(exe,
                   a.binaries,
                   a.zipfiles,
                   a.datas,
                   strip=False,
                   upx=True,
                   name=app_name)
    
  2. spec파일로 컴파일한다

     pyinstaller setup.spec
    

    성공!





참조: https://github.com/pyinstaller/pyinstaller/issues/2152

'Python > PyQt5' 카테고리의 다른 글

[PyQt5] Drag&drop 으로 파일 경로 얻어오기  (2) 2017.01.13

https://github.com/2minchul/PyQt5-Examples/blob/master/%5BPyQt5%5D%20get%20filepath%20by%20Drag%26Drop/app.py

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
#!/usr/bin/python3
#-*- coding: utf-8 -*-
 
import sys
from PyQt5 import QtWidgets, QtGui, QtCore
 
class MainWidget(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWidget, self).__init__(parent)
        self.setWindowTitle("title")
        self.resize(720,480)
        self.setAcceptDrops(True)
 
    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls():
            event.accept()
        else:
            event.ignore()
 
    def dropEvent(self, event):
        files = [u.toLocalFile() for u in event.mimeData().urls()]
        for f in files:
            print(f)
 
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = MainWidget()
    MainWindow.show()
    sys.exit(app.exec_())
cs


+ Recent posts