본문 바로가기

D.S/Project

210909목 - sqlcipher, pysqlcipher3 윈도우 설치

728x90

 

 

SQLite DB 암호화좀 해보겠다고 찾다가 인내심 테스트...  

특히 윈도우는..그래도 장단점이 있으니까...근데 개발환경에선 ..  

 


 

 

[* 윈도우10 63bit / python 3.9 기준]  

- python 3.9일 때는 pysqlcipher3 1.0.4 설치

 

1. openssl 설치 (64x): lite 버전 깔지 말 것  

  - https://slproweb.com/products/Win32OpenSSL.html  

 

 

2. openssl 환경변수 설정  

OPENSSL_CONF=C:\Program Files\OpenSSL-Win64\bin\openssl.cfg  

 

 

 

 

 

3. Active state설치 : 깃으로 가입하면 편함  

  - https://www.activestate.com/products  

 

 

 

 

 

4. C:\Program Files\OpenSSL-Win64\lib 에서 파일 "복사본"생성 → 복사본 rename  

  - libcrypto.def and libcrypto.lib 복사본 생성 → libeay32.def 와 libeay32.lib 로  

  - libssl.def and libssl.lib 복사본 생성 → ssleay32.def 와 ssleay32.lib 로  

 

 

5. 폴더 복사에서 복붙  

  - 폴더 복사 → C:\Program Files\OpenSSL-Win64\include\openssl  

  - 복붙위치 →C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include  

 

 

6. pysqlcipher 소스코드 가져오기  

git clone https://github.com/sqlcipher/sqlcipher

 

 

7. Makefile.msc 수정  

6에서 다운받은 pysqlcipher 폴더 안에 있는 Makefile.msc 수정  

  - 수정전: TCC = $(TCC) -DSQLITE_TEMP_STORE=1  

  - 수정후: TCC = $(TCC) -DSQLITE_TEMP_STORE=2 -DSQLITE_HAS_CODEC -I"C:\Program Files\OpenSSL-Win64\include"  

 

라이브러리, 라이브러리 path 추가  

  - 수정전:  

# If ICU support is enabled, add the linker options for it.
#
!IF $(USE_ICU)!=0
LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:$(ICULIBDIR)
LTLIBS = $(LTLIBS) $(LIBICU)
!ENDIF
# << />ark>>
# You should not have to change anything below this line

 

  - 수정후:  

# If ICU support is enabled, add the linker options for it.
#
!IF $(USE_ICU)!=0
LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:$(ICULIBDIR)
LTLIBS = $(LTLIBS) $(LIBICU)
!ENDIF
# << />ark>>

LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:"C:\Program Files\OpenSSL-Win64\lib\VC\static"
LTLIBS = $(LTLIBS) libcrypto64MT.lib libssl64MT.lib ws2_32.lib shell32.lib advapi32.lib gdi32.lib user32.lib crypt32.lib


# You should not have to change anything below this line

 

 

8. x64 Native Tools Command (VS)  

이거.. visual studio build tools를 다운 받아서 visual studio c++ 설치해야 함. 최소 설치 안 됨.ㅋㅋㅋ 6기가 정도 됨  

  - https://visualstudio.microsoft.com/ko/visual-cpp-build-tools/  

 

 

 

 

설치한 후에 검색창에서 x64 Native Tools Command 검색해서 실행  

path\to\sqlcipher> sqlcipher 폴더에서

nmake /f Makefile.msc clean
nmake /f Makefile.msc

 

 

9. pysqlcipher3 다운로드한 후 파일 복사  

python3.9 는 1.0.4 버전→ https://pypi.org/project/pysqlcipher3/1.0.4/#files 다운로드  

git clone https://github.com/rigglemania/pysqlcipher3

 

pysqlcipher3 폴더 안에 amalgamation 폴더 생성  

sqlcipher 폴더에서 sqlite3.c, sqlite3.h복사해서 amalgamation 에 붙여넣기  

 

 

10. sqlite-amalgamation 다운로드해서 파일 복사해서 붙여넣기  

  - https://sqlite.org/download  

  - [https://sqlite.org/2021/sqlite-amalgamation-3340100.zip] 사용함  

 

다운로드한 zip 파일 안에 4개의 파일 (shell.c, sqlite3.c, sqlite.h, sqliteext.h)을  

/pysqlcipher3/src/python3/sqlcipher 에 붙여넣기.  

 

 

11. pysqlcipher3 에서 다음 코드 실행  

python setup.py build_amalgamation
python setup.py install

 

로그  

PS C:\Users\...\git\blog_distribution> cd ..\pysqlcipher3-1.0.4\
PS C:\Users\...\git\pysqlcipher3-1.0.4> python setup.py build_amalgamation
running build_amalgamation
Builds a C extension using a sqlcipher amalgamation
building 'pysqlcipher3._sqlite3' extension
creating build\temp.win-amd64-3.9\Release\amalgamation
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DMODULE_NAME=\"pysqlcipher3.dbapi2\" -D
SQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Dinline=__inline -Iamalgamation -IC:\Program Files\OpenSSL-Win64\i
nclude -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\
include -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared -IC:\Program Files (x86)\Windows Kits\10\inc
lude\10.0.19041.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt /Tcamalgamation\sqlite3.c /F
obuild\temp.win-amd64-3.9\Release\amalgamation\sqlite3.obj
sqlite3.c
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DMODULE_NAME=\"pysqlcipher3.dbapi2\" -D
SQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Dinline=__inline -Iamalgamation -IC:\Program Files\OpenSSL-Win64\i
nclude -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\
include -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared -IC:\Program Files (x86)\Windows Kits\10\inc
lude\10.0.19041.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt /Tcsrc\python3\cache.c /Fobu
ild\temp.win-amd64-3.9\Release\src\python3\cache.obj
cache.c
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DMODULE_NAME=\"pysqlcipher3.dbapi2\" -D
SQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Dinline=__inline -Iamalgamation -IC:\Program Files\OpenSSL-Win64\i
nclude -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\
include -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared -IC:\Program Files (x86)\Windows Kits\10\inc
lude\10.0.19041.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt /Tcsrc\python3\connection.c
/Fobuild\temp.win-amd64-3.9\Release\src\python3\connection.obj
connection.c
src\python3\connection.c(527): warning C4996: 'PyObject_AsCharBuffer': deprecated in 3.0
src\python3\connection.c(1546): warning C4090: '=': 'const' 한정자가 서로 다릅니다.
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DMODULE_NAME=\"pysqlcipher3.dbapi2\" -D
SQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Dinline=__inline -Iamalgamation -IC:\Program Files\OpenSSL-Win64\i
nclude -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\
include -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared -IC:\Program Files (x86)\Windows Kits\10\inc
lude\10.0.19041.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt /Tcsrc\python3\cursor.c /Fob
uild\temp.win-amd64-3.9\Release\src\python3\cursor.obj
cursor.c
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DMODULE_NAME=\"pysqlcipher3.dbapi2\" -D
SQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Dinline=__inline -Iamalgamation -IC:\Program Files\OpenSSL-Win64\i
nclude -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\
include -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared -IC:\Program Files (x86)\Windows Kits\10\inc
lude\10.0.19041.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt /Tcsrc\python3\microprotocol
s.c /Fobuild\temp.win-amd64-3.9\Release\src\python3\microprotocols.obj
microprotocols.c
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DMODULE_NAME=\"pysqlcipher3.dbapi2\" -D
SQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Dinline=__inline -Iamalgamation -IC:\Program Files\OpenSSL-Win64\i
nclude -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\
include -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared -IC:\Program Files (x86)\Windows Kits\10\inc
lude\10.0.19041.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt /Tcsrc\python3\module.c /Fob
uild\temp.win-amd64-3.9\Release\src\python3\module.obj
module.c
src\python3\module.c(472): warning C4996: 'PyEval_InitThreads': deprecated in 3.9
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DMODULE_NAME=\"pysqlcipher3.dbapi2\" -D
SQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Dinline=__inline -Iamalgamation -IC:\Program Files\OpenSSL-Win64\i
nclude -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\
include -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared -IC:\Program Files (x86)\Windows Kits\10\inc
lude\10.0.19041.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt /Tcsrc\python3\prepare_proto
col.c /Fobuild\temp.win-amd64-3.9\Release\src\python3\prepare_protocol.obj
prepare_protocol.c
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DMODULE_NAME=\"pysqlcipher3.dbapi2\" -D
SQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Dinline=__inline -Iamalgamation -IC:\Program Files\OpenSSL-Win64\i
nclude -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\
include -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared -IC:\Program Files (x86)\Windows Kits\10\inc
lude\10.0.19041.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt /Tcsrc\python3\row.c /Fobuil
d\temp.win-amd64-3.9\Release\src\python3\row.obj
row.c
src\python3\row.c(101): warning C4090: '=': 'const' 한정자가 서로 다릅니다.
src\python3\row.c(111): warning C4090: '=': 'const' 한정자가 서로 다릅니다.
src\python3\row.c(168): warning C4244: '=': 'Py_ssize_t'에서 'int'(으)로 변환하면서 데이터가 손실될 수 있습니다.
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DMODULE_NAME=\"pysqlcipher3.dbapi2\" -D
SQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Dinline=__inline -Iamalgamation -IC:\Program Files\OpenSSL-Win64\i
nclude -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\
include -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared -IC:\Program Files (x86)\Windows Kits\10\inc
lude\10.0.19041.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt /Tcsrc\python3\statement.c /
Fobuild\temp.win-amd64-3.9\Release\src\python3\statement.obj
statement.c
src\python3\statement.c(138): warning C4090: '=': 'const' 한정자가 서로 다릅니다.
src\python3\statement.c(158): warning C4244: '함수': 'Py_ssize_t'에서 'int'(으)로 변환하면서 데이터가 손실될 수 있습니다.
src\python3\statement.c(149): warning C4996: 'PyObject_AsCharBuffer': deprecated in 3.0
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DMODULE_NAME=\"pysqlcipher3.dbapi2\" -D
SQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_TEMP_STORE=2 -Dinline=__inline -Iamalgamation -IC:\Program Files\OpenSSL-Win64\i
nclude -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Users\myohy\Anaconda3\envs\test\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\
include -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared -IC:\Program Files (x86)\Windows Kits\10\inc
lude\10.0.19041.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt /Tcsrc\python3\util.c /Fobui
ld\temp.win-amd64-3.9\Release\src\python3\util.obj
util.c
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /L
IBPATH:C:\Users\myohy\Anaconda3\envs\test\libs /LIBPATH:C:\Users\myohy\Anaconda3\envs\test\PCbuild\amd64 /LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MS
VC\14.29.30133\lib\x64 /LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\ucrt\x64 /LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.19041.0\um\x64 /EXPORT:PyInit__sql
ite3 build\temp.win-amd64-3.9\Release\amalgamation\sqlite3.obj build\temp.win-amd64-3.9\Release\src\python3\cache.obj build\temp.win-amd64-3.9\Release\src\python3\connection.obj build\temp
.win-amd64-3.9\Release\src\python3\cursor.obj build\temp.win-amd64-3.9\Release\src\python3\microprotocols.obj build\temp.win-amd64-3.9\Release\src\python3\module.obj build\temp.win-amd64-3
.9\Release\src\python3\prepare_protocol.obj build\temp.win-amd64-3.9\Release\src\python3\row.obj build\temp.win-amd64-3.9\Release\src\python3\statement.obj build\temp.win-amd64-3.9\Release
\src\python3\util.obj /OUT:build\lib.win-amd64-3.9\pysqlcipher3\_sqlite3.cp39-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.9\Release\amalgamation\_sqlite3.cp39-win_amd64.lib libeay32.lib /
LIBPATH:C:\Program Files\OpenSSL-Win64\lib
   build\temp.win-amd64-3.9\Release\amalgamation\_sqlite3.cp39-win_amd64.lib 라이브러리 및 build\temp.win-amd64-3.9\Release\amalgamation\_sqlite3.cp39-win_amd64.exp 개체를 생성하고 있습니
다.
코드를 생성하고 있습니다.
코드를 생성했습니다.
PS C:\Users\...\git\pysqlcipher3-1.0.4> python setup.py install
running install
running bdist_egg
running egg_info
writing pysqlcipher3.egg-info\PKG-INFO
writing dependency_links to pysqlcipher3.egg-info\dependency_links.txt
writing top-level names to pysqlcipher3.egg-info\top_level.txt
reading manifest file 'pysqlcipher3.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no previously-included files matching '*~' found anywhere in distribution
warning: no previously-included files matching '*.pyc' found anywhere in distribution
writing manifest file 'pysqlcipher3.egg-info\SOURCES.txt'
installing library code to build\bdist.win-amd64\egg
running install_lib
running build_py
running build_ext
Builds a C extension linking against libsqlcipher library
creating build\bdist.win-amd64
creating build\bdist.win-amd64\egg
creating build\bdist.win-amd64\egg\pysqlcipher3
copying build\lib.win-amd64-3.9\pysqlcipher3\dbapi2.py -> build\bdist.win-amd64\egg\pysqlcipher3
copying build\lib.win-amd64-3.9\pysqlcipher3\dump.py -> build\bdist.win-amd64\egg\pysqlcipher3
creating build\bdist.win-amd64\egg\pysqlcipher3\test
creating build\bdist.win-amd64\egg\pysqlcipher3\test\python3
copying build\lib.win-amd64-3.9\pysqlcipher3\test\python3\dbapi.py -> build\bdist.win-amd64\egg\pysqlcipher3\test\python3
copying build\lib.win-amd64-3.9\pysqlcipher3\test\python3\dump.py -> build\bdist.win-amd64\egg\pysqlcipher3\test\python3
copying build\lib.win-amd64-3.9\pysqlcipher3\test\python3\factory.py -> build\bdist.win-amd64\egg\pysqlcipher3\test\python3
copying build\lib.win-amd64-3.9\pysqlcipher3\test\python3\hooks.py -> build\bdist.win-amd64\egg\pysqlcipher3\test\python3
copying build\lib.win-amd64-3.9\pysqlcipher3\test\python3\regression.py -> build\bdist.win-amd64\egg\pysqlcipher3\test\python3
copying build\lib.win-amd64-3.9\pysqlcipher3\test\python3\sqlcipher.py -> build\bdist.win-amd64\egg\pysqlcipher3\test\python3
copying build\lib.win-amd64-3.9\pysqlcipher3\test\python3\transactions.py -> build\bdist.win-amd64\egg\pysqlcipher3\test\python3
copying build\lib.win-amd64-3.9\pysqlcipher3\test\python3\types.py -> build\bdist.win-amd64\egg\pysqlcipher3\test\python3
copying build\lib.win-amd64-3.9\pysqlcipher3\test\python3\userfunctions.py -> build\bdist.win-amd64\egg\pysqlcipher3\test\python3
copying build\lib.win-amd64-3.9\pysqlcipher3\test\python3\__init__.py -> build\bdist.win-amd64\egg\pysqlcipher3\test\python3
copying build\lib.win-amd64-3.9\pysqlcipher3\test\__init__.py -> build\bdist.win-amd64\egg\pysqlcipher3\test
copying build\lib.win-amd64-3.9\pysqlcipher3\_sqlite3.cp39-win_amd64.pyd -> build\bdist.win-amd64\egg\pysqlcipher3
copying build\lib.win-amd64-3.9\pysqlcipher3\__init__.py -> build\bdist.win-amd64\egg\pysqlcipher3
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\dbapi2.py to dbapi2.cpython-39.pyc
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\dump.py to dump.cpython-39.pyc
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\test\python3\dbapi.py to dbapi.cpython-39.pyc
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\test\python3\dump.py to dump.cpython-39.pyc
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\test\python3\factory.py to factory.cpython-39.pyc
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\test\python3\hooks.py to hooks.cpython-39.pyc
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\test\python3\regression.py to regression.cpython-39.pyc
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\test\python3\sqlcipher.py to sqlcipher.cpython-39.pyc
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\test\python3\transactions.py to transactions.cpython-39.pyc
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\test\python3\types.py to types.cpython-39.pyc
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\test\python3\userfunctions.py to userfunctions.cpython-39.pyc
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\test\python3\__init__.py to __init__.cpython-39.pyc
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\test\__init__.py to __init__.cpython-39.pyc
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\__init__.py to __init__.cpython-39.pyc
creating stub loader for pysqlcipher3\_sqlite3.cp39-win_amd64.pyd
byte-compiling build\bdist.win-amd64\egg\pysqlcipher3\_sqlite3.py to _sqlite3.cpython-39.pyc
creating build\bdist.win-amd64\egg\EGG-INFO
copying pysqlcipher3.egg-info\PKG-INFO -> build\bdist.win-amd64\egg\EGG-INFO
copying pysqlcipher3.egg-info\SOURCES.txt -> build\bdist.win-amd64\egg\EGG-INFO
copying pysqlcipher3.egg-info\dependency_links.txt -> build\bdist.win-amd64\egg\EGG-INFO
copying pysqlcipher3.egg-info\top_level.txt -> build\bdist.win-amd64\egg\EGG-INFO
writing build\bdist.win-amd64\egg\EGG-INFO\native_libs.txt
zip_safe flag not set; analyzing archive contents...
pysqlcipher3.__pycache__._sqlite3.cpython-39: module references __file__
creating dist
creating 'dist\pysqlcipher3-1.0.4-py3.9-win-amd64.egg' and adding 'build\bdist.win-amd64\egg' to it
removing 'build\bdist.win-amd64\egg' (and everything under it)
Processing pysqlcipher3-1.0.4-py3.9-win-amd64.egg
creating c:\users\...\anaconda3\envs\test\lib\site-packages\pysqlcipher3-1.0.4-py3.9-win-amd64.egg
Extracting pysqlcipher3-1.0.4-py3.9-win-amd64.egg to c:\users\...\anaconda3\envs\test\lib\site-packages
Adding pysqlcipher3 1.0.4 to easy-install.pth file

Installed c:\users\...\anaconda3\envs\test\lib\site-packages\pysqlcipher3-1.0.4-py3.9-win-amd64.egg
Processing dependencies for pysqlcipher3==1.0.4
Finished processing dependencies for pysqlcipher3==1.0.4

 

 

테스트해보기

잘 되는구먼. 후.. 힘들었다..  

PS C:\Users\...\git\pysqlcipher3-1.0.4> python
Python 3.9.5 (default, May 18 2021, 14:42:02) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from pysqlcipher3 import dbapi2 as sqlite
>>> conn = sqlite.connect('test.db')
>>> c = conn.cursor()
>>> c.execute("PRAGMA key='passwd'")

>>> c.execute("PRAGMA cipher_compatibility = 3")

>>> c.execute('''create table stocks (date text, trans text, symbol text, qty real, price real)''')

>>> c.execute("""insert into stocks values ('2006-01-05','BUY','RHAT',100,35.14)""")

>>> conn.commit()

 

 

기타 SQLCipher 호환성을 위해서..  

PRAGMA cipher_compatibility = 3PRAGMA key 후에 써주라고..  

  - https://github.com/rigglemania/pysqlcipher3  

 

 

 

 

pysqlcipher3 튜토리얼

  - https://charlesleifer.com/blog  

 

 


 

여러가지 에러와 해결법

 

1. Fatal error: OpenSSL could not be detected!  

커맨드 창에서 set으로 검색해서 변수 등록되어 있는데도 못 찾는다? → 재부팅.  

 

 

2. pysqlcipher3 1.0.4 LINK : fatal error LNK1181: 'sqlcipher.lib'  

이거 실행 먼저.  

python setup.py build_amalgamation

 

 

3. python 3.9를 사용하면서 생기는 에러  

참조: https://stackoverflow.com/questions/55446420/issue-in-installing-pysqlcipher3  

  - src\python3\cache.c(261): error C2017: illegal escape sequence  

 

이게...MODULE_NAME 이라는 변수가 적절한 타이밍에 파싱이 안 되서 생기는 문제라 함.  

그래서 ..코드를 찾아보면 이 MUDULE_NAME = "pysqlcipher3.dbapi2" 이라서 이 변수가 들어간 코드를 "pysqlcipher3.dbapi2" 로 바꿔주면 됨.  

# pysqlcipher/setup.py

PACKAGE_NAME = "pysqlcipher3"

...

def quote_argument(arg):
    quote = '"' if sys.platform != 'win32' else '\\"'
    return quote + arg + quote

define_macros = [('MODULE_NAME', quote_argument(PACKAGE_NAME + '.dbapi2'))]

 

수정해야 하는 파일이 다 pysqlcipher\src\python3 에 들어가 있음.  

python setup.py build_amalgamation 하면서 뭐라 하는 코드에 들어가서 수정해주면 됨.  

 

후.. 참 쉽죠? 껄껄^^  

 

3. 3.9 버전에서 사라진 기능 문제  

pysqlcipher3 1.0.4 다운받아서 위에 것 반복하면 됨.  

  - https://pypi.org/project  

 

 

 

 

 

참조

  - https://stackoverflow.com/questions  

  - https://github.com/sqlcipher  

  - https://github.com/rigglemania  

  - https://pypi.org/project  

 

sqlite python3 빌트인이었군..  

  - https://docs.python.org/3  

  - [한국어] https://docs.python.org/ko  

반응형