파이썬 설치 경로 알아내기

Posted at 2010/05/31 15:50// Posted in python/pyutils
작년부터 자동화된 빌드를 위해 파이썬 대신 파이널 빌더를 사용하고 있습니다.

cpascal 님 추천으로 사용하기 시작했는데, 스케쥴러를 사용해서 데일리 빌드도 할 수 있고

트레이에서 명령을 내릴 수도 있어서 꽤나 유용하게 사용하고 있습니다.


그런데 파이썬으로 만든 도구들을 실행할때가 문제더군요.

파이널 빌더에서도 파이썬 스크립트를 지원하긴 하는데,

임베딩 느낌인데다 사용 방법이 불편해서

지금까지는 그냥  "c:\python26 에 무조건 설치해라!" 라고 강요했었는데...;

요즘들어 cpascal 님을 비롯해서 여러 분들이 지나친 강요는 반발을 불러일으킨다라는 조언을 해주셔서

왼손잡이를 위한 방법을 찾아보기로 했습니다.


Modifying the module search path can also be done through the Windows registry under the keyHKLM\SOFTWARE\Python\PythonCore\version\PythonPath. Subkeys which have semicolon-delimited path strings as their default value will cause each path to be searched. Multiple subkeys can be created and are appended to the path in alphabetical order. A convenient registry editor is regedit (start it by typing “regedit” into Start ‣ Run).

메뉴얼 상에는 HKLM\SOFTWARE\Python\PythonCore\version\PythonPath 로 나와있지만, 이곳에는 다양한 모듈 경로가 들어있기 때문에

C:\Python\Python26\Lib;C:\Python\Python26\DLLs;C:\Python\Python26\Lib\lib-tk

HKLM\SOFTWARE\Python\PythonCore\version\InstallPath 를 사용하는 편이 더 좋아 보입니다~

C:\Python\Python26\

파이썬은 여러개 설치될 수 있기 때문에 어느 것이 디폴트 버전인가도 중요한 이슈입니다만


윈도우 버전은 확장자-아이콘 연결을 통해 알아내는 방법밖에 안 나오는군요.


일단 파이널 빌더에서는 지정한 버전을 실행하면 되니까 윈도우에서

정확한 파이썬 디폴트 버전을 알아내는 방법은 어물쩡 넘어가도록 하겠습니다 ㅋㅋ ~(-_-)~
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/05/31 15:50 2010/05/31 15:50

후훗 필기 합격 -_-)v

Posted at 2010/05/27 11:36// Posted in diary
얼마 전 큰 누나 백일 잔치에 다녀오다
생명(!)의 위협을 느낀 이후로...

아침형 인간에 도전도 할 겸
운전 면허 학원에 등록했습니다 ~(-▽-)~ 짝짝짝

일-월-화-수-목 아침 7시 일어나서
성산 자동차 학원에서 1시간씩 수업 듣고..

드디어 마지막 수업에 임하였더니...

강사님의 달콤한 말...

- O-)y- ~ { 그까이꺼 10분만 보면 합격! )

... 과 협박 ...

- o-)y- ~ {문제지 끝까지 보면 오히려 떨어지드라 )

... 에 불안감을 느껴 수업이 끝나자마자 서부 면허 시험장을 향했습니다.

( 중간에 누리쿰 스퀘어 에서 예전에 찍었던 사진 찾는데

사진사 아저씨가 XP 검색 기능으로 사진을 찾더군요 ㄷㄷㄷ;; )





1. 신체 검사 -_-
2. 인지 확보 -_-
3. 시험 접수 -_-

3단계 콤보 과정을 거친후 연이어서 3층에 있는 시험장에 들어가 문제 풀기 시작을 눌렀더니!


편도 1차로는 왕복은 몇차로?


고속도로 최저 속도는 얼마?

... 이런 초보자 수준 문제만 나온다며 TㅁT ...!!

엄청 어렵잖아!!!
-ㅁ-);

... ; 정말 문제지 풀 필요는 없더군요;;

비슷한 문제는 대략 10 문제 정도였고...;

초반에 아예 문제지에서는 거론도 안된 내용이 나올때는

주변의 비웃음 -ㅅ-
재시험의 굴욕 -ㅅ-
경제적인 낭비 -ㅅ-

등등이 연상되면서 등골에 식은땀이 흐르더군요 orz;


어느덧 40문제가 흘러가고

평소에 나쁜 짓을 하지 않은 덕분인지 (-_-)

다행히 82.5 라는 예상외의 성적을 달성하고

필기 시험을 마무리 했습니다. 하아 ~(= ㅁ=)~



다음주부터는 운전 연습 들어가는데...

과연 잘 해낼수 있을지 모르겠내요 ~(-_-)~

하아.. 난 랜선도 잘 못 만드는데...;
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/05/27 11:36 2010/05/27 11:36

wxPython PathTreeCtrl

Posted at 2010/05/26 13:26// Posted in wxPython/wxTreeCtrl
트리 컨트롤은 디렉토리 구조를 표현할때 편리합니다.

사용자 삽입 이미지
















그런데 경로를 파싱해서 디렉토리를 만드는건 의외로 귀찮은 일이더라구요 = =)~

그래서 만들어본 예제입니다



# vi: set sw=4 sts=4 expandtab:
import wx
import os

class wxPathTreeCtrl(wx.TreeCtrl):
def __init__(self, *args, **kwargs):
wx.TreeCtrl.__init__(self, *args, **kwargs)

def InitRoot(self, rootPath):
self.branchd = {}
self.DeleteAllItems()
self.root = self.AddRoot(rootPath)
self.SetPyData(self.root, ("ROOT", rootPath))
return self.root

def AppendPath(self, path):
branch = path

branches = []
while branch:
branch, leaf = os.path.split(branch)
if branch in self.branchd:
break
elif branch:
branches.append(branch)

branches.reverse()

last = self.branchd.get(branch, self.root)
for branch in branches:
last = self.AppendItem(last, os.path.split(branch)[1])
self.SetPyData(last, ("DIR", branch))
self.branchd[branch] = last

item = self.AppendItem(last, os.path.split(path)[1])
self.SetPyData(item, ("FILE", path))
return item

def ExpandAllDirs(self):
self.ExpandDirs(self.root)

def ExpandDirs(self, node):
if self.GetPyData(node)[0] == "FILE":
pass
else:
children = list(self.GenChildren(node))
fileCount = len([child for child in children if self.GetPyData(child)[0] == "FILE"])
if 0 == fileCount:
self.Expand(node)

for child in children:
self.ExpandDirs(child)

def GetBranchd(self):
return self.branchd

def GenChildren(self, node):
child = self.GetFirstChild(node)[0]
while child:
yield child
child = self.GetNextSibling(child)

if __name__ == "__main__":

class TestFrame(wx.Frame):
def __init__(self, parent, title, size=(800, 600)):
wx.Frame.__init__(self, parent, -1, title, pos=(0, 0), size=size)
self.CentreOnScreen(wx.BOTH)

self.pathTreeCtrl = wxPathTreeCtrl(self)
self.pathTreeCtrl.InitRoot("root")
self.pathTreeCtrl.AppendPath("bin/main.exe")
self.pathTreeCtrl.AppendPath("data/char/pc/warrior/warriror.png")
self.pathTreeCtrl.AppendPath("data/char/pc/warrior/warriror2.png")
self.pathTreeCtrl.ExpandAllDirs()

class TestApp(wx.App):
def OnInit(self):
toolFrame = TestFrame(None, "TEST")
toolFrame.Show()
self.SetTopWindow(toolFrame)
return True

TestApp(redirect=False).MainLoop()


이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/05/26 13:26 2010/05/26 13:26

simple is NOT easy

Posted at 2010/05/14 14:32// Posted in freetalk
유명 화가의 그림을 보고 있으면
마치 어린아이 그림 같다라는 생각이 들때가 있습니다.

작품 수준이 어린아이가 그린 것처럼 유치하다라는 이야기가 아니라

결과물이 너무 단순하다보니 그냥 아무 생각없이 빨리 그려냈을 거라고 생각하는 것입니다.


사실 결과물만 비교하면
70년 동안 그림만 그려온 화가의 그림과
태어난지 7년만에 처음 그림을 그린 (그것도 1시간 남짓 사이에)
어린아이의 그림이 별 차이가 없을지 모릅니다.

하지만 두개의 그림 사이에는 엄청난 차이가 존재합니다.

바로 그림이 갖는 의미 때문입니다.



비슷하게 생긴 단순한 그림이라도

화가의 그림은 현실의 본질을 통찰한 결과물인 반면

어린아이의 그림은 현실의 겉면만을 보고 생각을 표현한 것이기 때문입니다.



간단하게 만드는 것은 쉬운 일이 아닙니다.

간단하니까 빨리 만들 수 있는 것이 아닙니다.

흰머리가 나도록 많이 생각하고

불필요한 것을 수없이 잘라내고

오랜 시간 동안 다듬은 후에 나오는 것이

바로 단순한 것입니다.





결론은...

쉽게 쉽게

빨리 빨리

만들라


... 는 말이 제일 싫다는...

ㅎ ㅎ ㅎ

















이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/05/14 14:32 2010/05/14 14:32