wxPython + 가상 환경(virtualenv) 개발 세팅

tl;dr
https://github.com/crowjdh/wxpython_venv_example

wxPython + 가상 환경 세팅시 문제점들
- wxPython은 pip로 설치를 제공하지 않는다. 거기다 공식 사이트에서 제공하는 패키지 파일은  패키지 구성이 다른 관계로 OSX 10.11(El Capitan) 이상에서 설치할 수 없다.
- OS X는 "신뢰할 수 있는 프레임워크와 바이너리"만이 스크린에 접근할 수 있다. 그러므로 가상환경(virtualenv)을 설정하되 Python 자체는 Framework에 설치된, 혹은 Brew를 통해 설치된 Python을 사용하도록 변경해야 한다.

1. 리패키징 + 설치
# base workdir
mkdir ~/wxpython_elcapitan
cd ~/wxpython_elcapitan
# download the wxPython dmg
curl -L "http://downloads.sourceforge.net/project/wxpython/wxPython/3.0.2.0/wxPython3.0-osx-3.0.2.0-cocoa-py2.7.dmg?r=http%3A%2F%2Fwww.wxpython.org%2Fdownload.php&ts=1453708927&use_mirror=netix" -o wxPython3.0-osx-3.0.2.0-cocoa-py2.7.dmg
# mount the dmg
hdiutil attach wxPython3.0-osx-3.0.2.0-cocoa-py2.7.dmg
# copy the dmg package to the local disk
mkdir repack_wxpython
cd repack_wxpython
cp -r /Volumes/wxPython3.0-osx-3.0.2.0-cocoa-py2.7/wxPython3.0-osx-cocoa-py2.7.pkg .
# unmount the dmg
dmgdisk="$(hdiutil info | grep '/Volumes/wxPython3.0-osx-3.0.2.0-cocoa-py2.7' | awk '{ print $1; }')"
hdiutil detach ${dmgdisk}
# prepare the new package contents
mkdir pkg_root
cd pkg_root
pax -f ../wxPython3.0-osx-cocoa-py2.7.pkg/Contents/Resources/wxPython3.0-osx-cocoa-py2.7.pax.gz -z -r
cd ../
# prepare the new package scripts
mkdir scripts
cp wxPython3.0-osx-cocoa-py2.7.pkg/Contents/Resources/preflight scripts/preinstall
cp wxPython3.0-osx-cocoa-py2.7.pkg/Contents/Resources/postflight scripts/postinstall
# delete the old package
rm -rf wxPython3.0-osx-cocoa-py2.7.pkg
# build the new one :
pkgbuild --root ./pkg_root --scripts ./scripts --identifier com.wxwidgets.wxpython wxPython3.0-osx-cocoa-py2.7.pkg
Reference: http://davixx.fr/blog/2016/01/25/wxpython-on-os-x-el-capitan/
view raw repackaging.sh hosted with ❤ by GitHub

위 과정을 거쳐 생성한 패키지 파일을 설치한다.

2. 가상환경 설정
"신뢰할 수 있는 프레임워크와 바이너리"만이 스크린에 접근할 수 있으므로 가상환경의 파이썬 바이너리 대신 시스템(프레임워크 혹은 brew로 설치한) 파이썬 바이너리를 사용해야 한다.
wxPython venv linker 이 레포의 컨텐츠를 다운받아 wxPython을 적용하고자 하는 프로젝트의 루트에 위치시킨다.
위 레포의 루트의 python(소프트 링크 파일)는 .python_wrappers/python_2.7_framework를 가리키고 있으므로 만약 Brew의 Python을 사용하고 있다면 .python_wrappers/python_2.7_brew를 가리키도록 변경한다.

3. requirements.txt 설치
위 2를 수행하면 가상환경에 wxPython이 설치된 "것처럼" 보이기 때문에 pip freeze > requirements.txt를 통해 dependencies를 업데이트 하면 requirements.txt에 wxPython이 추가된다.

하지만 처음에 설명한 대로 wxPython은 pip로 설치할 수 없기 때문에 매번 pip install -r requirements.txt를 수행할 때마다 에러를 뱉게 된다. OSX 기준 이하와 같이 설치하자.
cat requirements.txt | xargs -n 1 pip install

References
- http://davixx.fr/blog/2016/01/25/wxpython-on-os-x-el-capitan/
- http://stackoverflow.com/a/28795395

댓글

이 블로그의 인기 게시물

Unity에서 모델의 폴리곤의 반대편이 랜더링 되지 않는 문제 해결 방법

Docker 컨테이너 네트워크 설정시 ifconfig로 docker0를 찾을 수 없는 문제에 대해

Use FFMPEG in XCode(for MacOS)