tag:blogger.com,1999:blog-66133254912513690162024-03-13T15:13:50.884-07:00Songhun KimAnonymoushttp://www.blogger.com/profile/09184050528083344912noreply@blogger.comBlogger11125tag:blogger.com,1999:blog-6613325491251369016.post-48322599449982690062012-12-02T20:30:00.002-08:002012-12-02T20:30:26.414-08:00[Google HackFair 2012, Korea] CboxConsole 소개<span style="font-family: Arial, Helvetica, sans-serif;">오래간만에 포스트를 하네요. ^_^</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">2012년 11월 17/18일 양일간 Google Korea에서 개최한 Google HackFair에 참가를 할 수 있었습니다. 참가를 위해 출품한 프로젝트는 Cbox Console이라는 프로젝트 입니다.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3r5AKIFBa05s4eqihUiBnk2XaZb3PpAtsxv76vtIvDEh6XLtsW1AuBii06aR5mE7_j_91-EqbgkKooxj6Zk8JifjPku23MihUJOH1t284d_6xwyiKwJGd2gHvfOdCAG0n90U_UUZO5Yo/s1600/chrome-grey-256.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3r5AKIFBa05s4eqihUiBnk2XaZb3PpAtsxv76vtIvDEh6XLtsW1AuBii06aR5mE7_j_91-EqbgkKooxj6Zk8JifjPku23MihUJOH1t284d_6xwyiKwJGd2gHvfOdCAG0n90U_UUZO5Yo/s1600/chrome-grey-256.png" /></span></a></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Cbox Console의 경우는 상업적인 목적으로 탄생 한 것이 아니라, Chrome브라우저의 가능성을 선 보이고 싶어서 만든 프로젝트 입니다. 하지만, 개발 이후에 좀 더 발전 시키면 좋은 플랫폼이 될 듯 하여 v.0.2개발을 착수하였으며 조만간 보강하여 선보일 수 있도록 하겠습니다. 앞으로도 플랫폼의 상업적인 면은 배제할 것이지만, 게임 제작자들에게는 수익을 드릴 수 있는 방법을 강구 해 볼 예정입니다.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">우선, 이해를 돕는데 도움이 될 듯 하여 구조도를 간략하게 그려봤습니다.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDn_pbaL8dxP2TTpWPbH10dD8qCeqQzcDX2Pi9LS33h8CO3eP6h6yJT1Obce_zv75nAOiU72pNBYqUlsGb0e2yLyi_ylMi_0wm1FDpGr_rBb0NMgbCnns8tbohNVc_jPUpvmDnhEEtE8w/s1600/main.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="450" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDn_pbaL8dxP2TTpWPbH10dD8qCeqQzcDX2Pi9LS33h8CO3eP6h6yJT1Obce_zv75nAOiU72pNBYqUlsGb0e2yLyi_ylMi_0wm1FDpGr_rBb0NMgbCnns8tbohNVc_jPUpvmDnhEEtE8w/s640/main.PNG" width="640" /></span></a></div>
<div style="text-align: center;">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Native Client(이하 NaCl)을 이용하여 외부 기기와 연동을 하고, Cbox Console에서 Home과 Games부분을 컨트롤 하도록 하였습니다. Home의 경우에는 Script로 간단하게 제어가 가능 하지만, Game의 경우 외부 URL에 있는 부분을 제어해야 합니다.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">우선 Extensions나 App개발에서 Contents Script의 경우 데이터를 연동하기가 까다로운 부분이 있어, 도입한 라이브러리를 소개 시켜드립니다.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><a href="https://github.com/ohgyun/pubsub" style="background-color: white; border: 0px; color: #6611cc; cursor: pointer; font-size: 13px; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;" target="_blank">https://github.com/ohgyun/<wbr></wbr>pubsub</a>라는 라이브러리를 도입하였으며, 사용법은 다음과 같습니다.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><b>[App 부분]</b><span style="text-align: center;"> </span></span><br />
<span style="text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></span>
<div style="text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeTE36kfQW-Rm7XXVuaJ6IACnKD18TZZetftmBZ1-UbJi9wMBW1fFBlZ7gDmS-qg0EZ3jV8R4QkfRQ0cCZDKNAXDTPz4E-ewLxieZSmHpA461xBwi19780OPmBx3VjTZxfvE8KY4i65Jw/s1600/s1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="27" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeTE36kfQW-Rm7XXVuaJ6IACnKD18TZZetftmBZ1-UbJi9wMBW1fFBlZ7gDmS-qg0EZ3jV8R4QkfRQ0cCZDKNAXDTPz4E-ewLxieZSmHpA461xBwi19780OPmBx3VjTZxfvE8KY4i65Jw/s640/s1.PNG" width="640" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<b><span style="font-family: Arial, Helvetica, sans-serif;">[manifest.json]</span></b><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b><br /></b><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsBV6wJxvRm4RGVw4Aw06kvgwHp4AKYZgWiaQ8TF0rYYhNXIDXgD5cvXCEf8Dl6UPhbKTrWHgHhp6guSHkIUeXpNsiym1XoQlccTijnfQh0LeWh4QkZWbz8jJu8a34oxZFBhLoJdnB4II/s1600/s2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsBV6wJxvRm4RGVw4Aw06kvgwHp4AKYZgWiaQ8TF0rYYhNXIDXgD5cvXCEf8Dl6UPhbKTrWHgHhp6guSHkIUeXpNsiym1XoQlccTijnfQh0LeWh4QkZWbz8jJu8a34oxZFBhLoJdnB4II/s400/s2.PNG" width="400" /></a></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br />위와 같이 필요한 부분에 pubsub를 로드 시키고,</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /><b>[Pub를 할 부분 / 데이터를 송출]</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b><br /></b><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj_8KmunUrOXQjPC6FWcdwGQPMeRgARwUDTl1ybdKR4zeCOL1MRfo7IrgUlrpAhheQQp5Syrra8_qOk9rzLn8McvwNct-S8rkUS1M3Yw8I7t0ihLUFX8S2UntT6F41TOJ_DUhlVmyxndI/s1600/s3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="65" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj_8KmunUrOXQjPC6FWcdwGQPMeRgARwUDTl1ybdKR4zeCOL1MRfo7IrgUlrpAhheQQp5Syrra8_qOk9rzLn8McvwNct-S8rkUS1M3Yw8I7t0ihLUFX8S2UntT6F41TOJ_DUhlVmyxndI/s640/s3.PNG" width="640" /></a><br /><br /><b>[Sub를 할 부분 / 데이터를 수신]</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b><br /></b><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbCSxor1q45v8i6QzhC1oDwjXghr9Cs705b8fHG0wdBzq7EqlTCvM_MxG01lppRTqG31F_Izpl1GDk4tWY2K1w8EtqZpTkyAWh6Yxx_MzUl8pKCEJK4K6Nlfm3eOZ6GpYM3R9Hsv60xAE/s1600/s4.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="105" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbCSxor1q45v8i6QzhC1oDwjXghr9Cs705b8fHG0wdBzq7EqlTCvM_MxG01lppRTqG31F_Izpl1GDk4tWY2K1w8EtqZpTkyAWh6Yxx_MzUl8pKCEJK4K6Nlfm3eOZ6GpYM3R9Hsv60xAE/s400/s4.PNG" width="400" /></a></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br />그리고, Contents Scrript의 경우 Dom은 컨트롤이 되나, Script는 이용할 수 없습니다.<br />그래서 다음과 같은 방법을 도입하였습니다.(v.0.2에서 Sandbox를 제작하여 보완 할 예정입니다.)<br />게임 컨트롤러 부분에서는</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiSIS50S9MHgLcKDrM_SvD3mySsFkpTIUEH9spcupqKxTkuhl0w1DdXHdXHBmA5XWWasBuKt9TyHAI4enMdtcaI0r4X9QrjmZ1CjYqNaBCoVQMEb50l2WywV8TabMVpB4YwcUzfIigwv0/s1600/s6.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" height="47" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiSIS50S9MHgLcKDrM_SvD3mySsFkpTIUEH9spcupqKxTkuhl0w1DdXHdXHBmA5XWWasBuKt9TyHAI4enMdtcaI0r4X9QrjmZ1CjYqNaBCoVQMEb50l2WywV8TabMVpB4YwcUzfIigwv0/s400/s6.PNG" width="400" /></span></a><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">위 방식으로 cboxscript라고 정의 된 게임 페이지내부의 id 영역을 가져와서 실행을 시킵니다.<br /><br />게임 페이지 부분에서는</span><br />
<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSs3MpPgxyTvhXm5Oga1EjE-DHJ6jEaYwlP5_lqcdpWRAxP986AXNEVRX6DYSaF50zKjT3sfL6fsqr_M1v6ONbvq5KT_FDW8Wmy7I3hXlZWMr2WaXXQedvoOu0sRh5rBsMhVcOn65lJwo/s1600/s5.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSs3MpPgxyTvhXm5Oga1EjE-DHJ6jEaYwlP5_lqcdpWRAxP986AXNEVRX6DYSaF50zKjT3sfL6fsqr_M1v6ONbvq5KT_FDW8Wmy7I3hXlZWMr2WaXXQedvoOu0sRh5rBsMhVcOn65lJwo/s400/s5.PNG" width="400" /></a></span><div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">위 방식으로 하여 게임을 컨트롤 할 수 있게 되었습니다.<br />
이 외에도 랭킹 서버, 드라이버 연동 등 많은 부분이 있지만, 개념상 가장 핵심적인 부분이라고 생각 되는 부분을 간략하게 살펴봤습니다.<br />
Cbox Console는 아직 부족한 프로젝트이지만, Web에서 할 수 있는 모든 게임의 가능성을 열고, Console Game기로서의 발전을 생각하고 있습니다. 별다른 장비 없이 Chrome과 자신의 게임 컨트롤러만 있으면 어떠한 게임도 즐겁게 할 수 있는 세상을 생각하고 있으며, 많은 관심과 참여 부탁드리도록 하겠습니다.<br />
마지막으로 이렇게 해서 만들어진 Cbox Console v.0.1의 시연화면을 보시며 마무리 하도록 하겠습니다. 감사합니다.<br />
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/CZYZVQi8tM0?feature=player_embedded' frameborder='0'></iframe></span></div>
Anonymoushttp://www.blogger.com/profile/09184050528083344912noreply@blogger.com0tag:blogger.com,1999:blog-6613325491251369016.post-91849425254437961452012-03-24T08:06:00.000-07:002012-03-24T08:06:08.847-07:00[Dart] Dart Editor 설치기(OSX) 및 첫느낌근래에 Node.js를 만질 일이 있어서 깨작깨작 거리다가..<div>
Jade라는 Template Engine 을 만져보게 되었습니다.</div>
<div>
한동안, Transcompiler 등에는 그다지 관심을 가지고 있지 않았는데..</div>
<div>
혹시나 해서 Javascript에는 무엇이 대세인가...찾아보니.</div>
<div>
Coffee Script가 강세더군요..근래에 관심 가지고 있는 Project의 하나인 jq-console에서도 도입되어서 잠깐 깨작깨작 봤습니다.</div>
<div>
<br /></div>
<div>
그러던 중에 Chrome developer를 구독하는데 자꾸 Dart얘기가 나오니, Coffee Script에 관심을 가지고 있던 중에 새롭게 읽히더군요. :) 처음 Dart나왔을 땐, 실무적인 입장에서만 바라보다가 그냥 재미위주로 보니 재밌네요.</div>
<div>
<br /></div>
<div>
우선, 뭔가를 해봐야지~ 하면 개발환경을 꾸며봐야 하기 때문에..홈페이지를 찾았습니다.</div>
<div>
<a href="http://www.dartlang.org/docs/getting-started/editor/">http://www.dartlang.org/docs/getting-started/editor/</a></div>
<div>
뭐 설치는 링크를 읽어보면서 하면 될 듯 하구요..</div>
<div>
<br /></div>
<div>
간단한 포인트는..</div>
<div>
1. Eclipse 기반이다.</div>
<div>
2. Viewer는 설치 되어있고, Chromium 이다.</div>
<div>
3. Windows는 잘 모르겠고, OSX에서는 개인적으론 /Application 이하 혹은 /User/userid 에 다운 받은 dart디렉토리 자체를 복사해서 사용하시면 됩니다.</div>
<div>
4. Viewer 가 OSX최초 실행 시 보안등으로 인해서 한방에 뜨지 않을 때가 있으니, 그럴 땐 Chromium을 직접 실행 해주시고, 다시 View해보세요.</div>
<div>
<br /></div>
<div>
한 번 깨작깨작 해봤는데..</div>
<div>
Javascript가 되는 건 줄 알았는데, VM에서 .dart파일이 실행 되는 것이더군요.</div>
<div>
Javascript로 하기 위해선, Dartc를 이용해서 만들어 주면 되는 듯 합니다.(안해 봐서 다음에 좀 해봐야 할 듯 합니다.)</div>
<div>
기존 jQuery/YUI등과 같은 Framework랑 어떻게 엮는 것이 아니기 때문에(활용할 수 있을 듯 한데, 깔끔하진 않을 듯 하고..) 현저하게 모자른 UI Library들로 인해 한동안은 인기 없지 않을까 싶네요.</div>
<div>
그래도 언어 형태가 제가 좋아하는 형태라, 흥미있게 해볼 만 할 듯 합니다.^_^</div>
<div>
<br /></div>Anonymoushttp://www.blogger.com/profile/09184050528083344912noreply@blogger.com0tag:blogger.com,1999:blog-6613325491251369016.post-20779677946173853052011-12-21T06:23:00.000-08:002011-12-25T05:35:25.162-08:00Python Ecosystem - An Introduction (한글)(원본) <a href="http://mirnazim.org/writings/python-ecosystem-introduction/">http://mirnazim.org/writings/python-ecosystem-introduction/</a><br />
<br />
우선 발 번역임을 알려드리며..<br />
이 틀 동안 일하는 중간중간 쉬는 시간에 한 것이라 대단히 잘 못 된 점이 많습니다.<br />
블로그 글이기 때문에 출판을 위한 번역이라기보단..빨리 읽을 수 있는 것에 초점을 맞췄습니다. :) 이해가 안가는 부분이 있다면 알려주세요. 좀 더 자세하게 번역하도록 하겠습니다. ^_^<br />
<br />
<span style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: medium;"><span style="line-height: 28px;"><br /></span></span><br />
<div class="body" style="background-color: white;">
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
PHP, Ruby 혹은 다른 Platform를 다루던 개발자가 Python을 사용하고자 할 때, Python 생태계를 이해하는 것에서 많은 어려움을 느끼게 된다. 개발자들은 가끔 학습서를 원하거나 어떻게 좀 더 표준적인 방법으로 대부분을 해결할 수 있는 설명하는 것을 찾게 된다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
다음은 우리 <a href="http://ikraftsoft.com/">회사</a>에서 인턴, 훈련생과 다른 Platform에서 Python을 처음 사용하게 된 경력개발자를 위해 쓰여진 Web Application 개발을 위한 Python 생태계 기초 문서에서 발최하였다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<em>이것은 완벽한 소스가 아니다. 이 문서가 지속적으로 변경 되는 것이 목표이다. 시간이 어느정도 흐르면, 이것은 완벽한 지침서가 되길 희망한다.</em></div>
<h2 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 32px; line-height: 50px;">
예상 독자</h2>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">이것은 Python 언어 자체를 다루지 않을것이다. 이 지침서는 당신을 Python고수로 마법같이 변화 시켜주지 않을 것이다. 이 글을 읽는 사람은 Python의 기초는 이미 알고 있다고 예상하고 작성 하였다. 만약에 Python을 모르고 있다면, 이 글을 읽기에 앞서 "Zad Show"가 출판한 "</span><a href="http://learnpythonthehardway.org/" style="background-color: white; color: #2760bf; text-decoration: none;">Learn Python The Hard Way</a><span style="background-color: white;">"를 읽기 바란다.(온라인에서는 무료입니다.)</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">나는 여러분이 Linux(Ubuntu/Debian과 같은) 혹은 Linux와 유사한 OS를 이용할 것을 원한다. 필자가 가장 잘 아는 것이기 때문이다. 나는 MS Windows와 Mac OS X에서 Cross-browser 확인을 위한 업무 외에는 해 본적이 없다. 만약에 Linux외의 Platform에서 Python을 설치하고자 한다면 다음 문서들을 참고하기 바란다.</span></div>
<ul style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<li style="margin-top: -6px;"><a href="http://www.blog.pythonlibrary.org/2011/11/24/python-101-setting-up-python-on-windows/" style="color: #2760bf; text-decoration: none;">Python 101: Setting up Python on Windows</a></li>
<li style="margin-top: -6px;"><a href="http://docs.python.org/using/windows.html" style="color: #2760bf; text-decoration: none;">Official documentation for Python on Windows</a></li>
<li style="margin-top: -6px;"><a href="http://docs.python.org/using/mac.html" style="color: #2760bf; text-decoration: none;">Official documentation for Python on Mac OS X</a></li>
</ul>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">당신의 OS에 Python을 설치 하는 가장 좋은 방법은 인터넷을 검색해길 바란다. 개인적으론 </span><a href="http://www.stackoverflow.com/" style="background-color: white; color: #2760bf; text-decoration: none;">Stack Overflow</a><span style="background-color: white;">를 가장 권장한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<h2 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 32px; line-height: 50px;">
버전 설명</h2>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<em style="background-color: white;">참고 요약) Python 2.x는 현재진행 형, Python 3는 빛나는 미래형이다. 만약에 신경 쓰지 않는다면, 다음 Python 설치 부분은 읽지 않아도 된다.</em></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Python으로 시작할 때 3.x 버전을 설치하는 것이 당연한 과정으로 보이겠지만, 실상은 그렇지가 않을 수 있다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">현재 Python은 두 가지 개발버전을 가지고 있다. 하나는 2.7.x이며, 다른 하나는 3.x 이다.(Python 3, Py3K 혹은 Python 3000으로 불린다). Python 3는 Python 2와는 다른 언어라고 볼 수 있다. 미묘하게 다를 때도 있고 완전히 의미가 다른 구문도 존재하고 있다. 지금은 Python2.6 / 2.7이 가장 많이 사용되고 있다. 주류이며 중요한 Package / Framework / Tools / Utilities / Modules 들이 아직 Python 3에 맞게 동작되는 것이 많지 않다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">따라서, 2.x(자세하게 얘기하자면 2.7.x)를 사용하는 것이 안전한 선택이라고 할 수 있다. 만약에 정말로 원하거나, 의미를 완벽히 이했을 경우 Python 3를 선택하라.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<a href="http://python3wos.appspot.com/" style="background-color: white; color: #2760bf; text-decoration: none;">Python 3 Wall of Shame</a><span style="background-color: white;"> 에서 Python 3에 적합한 여러 Packages를 언급하고 있으니, Python 3로 시작하기로 결정하기 전에 읽어보길 바란다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 32px; line-height: 50px;">어떠한 VM을 이용할 것인가?</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Python 해석기 혹은 Python 가상머신은 몇 가지 다른 방법으로 구현 되어있다. 이 중에서도 CPython이 가장 많이 사용되고 있으며, 다른 가상머신의 구현에도 참고가 많이 되고 있다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<a href="http://pypy.org/" style="background-color: white; color: #2760bf; text-decoration: none;">PyPy</a><span style="background-color: white;">는 Python으로 구현되었고, </span><a href="http://www.jython.org/" style="background-color: white; color: #2760bf; text-decoration: none;">Jython</a><span style="background-color: white;">은 Java로 구현 되었으며, Java 가상머신에서 돌아갈 수 있도록 되어있다. 그리고, </span><a href="http://ironpython.net/" style="background-color: white; color: #2760bf; text-decoration: none;">IronPython</a><span style="background-color: white;"> 은 Microsoft .Net CLR에서 돌아갈 수 있도록 구현 된 것이다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">하지만, 이것들은 CPython을 정말 사용할 수 없는 경우에만 사용 하는 것이 좋다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">CPython을 사용하지 않는다면, 골치가 아픈 경우가 발생 될 것이다. 이건 날 믿어도 좋다.</span></div>
<h2 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 32px; line-height: 50px;">
Python 설치하기</h2>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">대다수의 Linux/Unix 배포판과 Mac OS X은 Python이 미리 설치 되어있다. 만약에 그렇지 않거나, 옛날 버전이면 다음 명령어로 2.7.x를 설치 할 수 있다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Ubuntu/Debian 계열 배포판에서는 다음과 같이 실행 한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo apt-get install python2.7
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<em><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">sudo</code></em><em> 는 일반 유저에게 다른 유저(일반적으로 superuser 혹은 root)의 보안 권한을 부여하여 programs를 실행 할 수 있도록 하는 Unix-like OS의 명령어이다. <a href="http://en.wikipedia.org/wiki/Sudo">Wikipedia에서 더 자세한 설명을 볼 수 있다.</a></em></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">Fedora/Red Hat 계열에선 다음과 같이 실행한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">sudo yum install python2.7
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<em style="background-color: white;">RHEL(Red Hat Enterprise Linux)의 경우엔 EPEL repositories에 접근할 수 있어야 정상적으로 설치 할 수 있다.</em></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">주의할 점은 앞으로 예제에서 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">sudo</span><span style="background-color: white;"> 를 사용하기 때문에 각자의 환경에 맞춰 변경을 해줘야 한다. </span></div>
<h2 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 32px; line-height: 50px;">
Packages의 이해</h2>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">처음에 알아두어야 할 점은 Python은 기본적으로 package를 관리하는 도구가 없다는 점이다. 실제로 Python의 package 개념은 상당히 느슨하다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">아마도 알고 있다시피, Python 코드는 modules로 구성이 된다. Module은 단지 1개의 function을 가지고 있는 독립된 한 개의 File일 수도 있고, 한 개 이상의 sub-module을 가지고 있는 Directory일 수도 있다. Package와 module의 차이는 거의 없다고 할 수 있고, 모든 module은 package로 취급 될 수 있다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">그럼, module과 package의 가장 큰 차이는 무엇 일 까? 그것을 알기 위해선 Python이 어떻게 module을 찾는지에 대한 이해가 필요하다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">어떠한 개발환경과 마찬가지로, Python에서도 functions와 classes (</span><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">str</code><span style="background-color: white;">, </span><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">len</code><span style="background-color: white;">, </span><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">Exception</code><span style="background-color: white;">과 같은)는 전역 scope(Python에서는 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">builtin</span><span style="background-color: white;"> scope라 불린다)와 다른 것을 포함하기 위해서 사용되는 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">import</span><span style="background-color: white;"> statement가 있다. 다음 예제를 보자.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="o">>>></span> <span class="kn" style="color: #6ab825; font-weight: bold;">import</span> <span class="nn" style="color: #447fcf; text-decoration: underline;">os</span>
<span class="o">>>></span> <span class="kn" style="color: #6ab825; font-weight: bold;">from</span> <span class="nn" style="color: #447fcf; text-decoration: underline;">os.path</span> <span class="kn" style="color: #6ab825; font-weight: bold;">import</span> <span class="n">basename</span><span class="p">,</span> <span class="n">dirname</span>
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">이 Packages는 </span><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">import</code><span style="background-color: white;"> statement 에 의해 찾을 수 있는 당신의 Filesystem 의 어딘가에 존재해야 한다. 어떻게 Python은 이 modules들의 위치를 알 수 있을까? 이 위치는 Python 가상머신을 설치할 때 자동적으로 해당 Platform에 맞추어 설치 되었다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Package들의 위치는 항상 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">sys.path</span><span style="background-color: white;"> 에서 알 수 있다. </span><em style="background-color: white;">Ubuntu 11.10 Oneric Ocelot가 설치 되어있는 나의 notebook에서는 다음과 같이 보인다.</em></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="o">>>></span> <span class="kn" style="color: #6ab825; font-weight: bold;">import</span> <span class="nn" style="color: #447fcf; text-decoration: underline;">sys</span>
<span class="o">>>></span> <span class="k" style="color: #6ab825; font-weight: bold;">print</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span>
<span class="p">[</span><span class="s" style="color: #ed9d13;">''</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7/plat-linux2'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7/lib-tk'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7/lib-old'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7/lib-dynload'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/local/lib/python2.7/dist-packages'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7/dist-packages'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7/dist-packages/PIL'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7/dist-packages/gst-0.10'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7/dist-packages/gtk-2.0'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/pymodules/python2.7'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7/dist-packages/ubuntu-sso-client'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7/dist-packages/ubuntuone-client'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7/dist-packages/ubuntuone-control-panel'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7/dist-packages/ubuntuone-couch'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7/dist-packages/ubuntuone-installer'</span><span class="p">,</span>
<span class="s" style="color: #ed9d13;">'/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol'</span><span class="p">]</span>
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">이렇게 설치 되어있는 Python의 Directories를 알 수 있다. 최종 단계의 Directory의 이름 순서대로 정렬 됨을 알 수 있다. 이것은 같은 이름의 Packages가 다른 Directories에 있다면 처음 발견 된 곳에서 멈추게 될 것임을 뜻한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">이미 알아차렸을지 모르겠지만, 이 Package 검색 방식은 당신의 Packages가 먼저 보일 수 있도록 쉽게 변경 할 수 있다. 다음과 같은 방식으로 가능하다. </span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="o">>>></span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi" style="color: #3677a9;">0</span><span class="p">,</span> <span class="s" style="color: #ed9d13;">'/path/to/my/packages'</span><span class="p">)</span>
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">하지만, 이러한 방식은 많은 상황을 발생 시킬 것이고, 너무 쉽게 남용 될 되어 당신을 난폭하게 만들 것이다.</span><b style="background-color: white;"> 정말로 필요하다면 사용하지만, 남용하진 말자.</b></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">site</span><span style="background-color: white;"> module 은 이러한 package 검색 경로들이 고정되도록 하는 method를 제어한다. 이것은 자동적으로 Python 가상머신들이 초기화 되는 시점에 자동으로 포함 된다. 만약에 이 것에 대해 더 알고 싶다면, </span><a href="http://docs.python.org/library/site.html" style="background-color: white;">공식문서</a><span style="background-color: white;">를 참고하도록 하자.</span></div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
The PYTHONPATH</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">PYTHONPATH</span><span style="background-color: white;"> 는 기본 Package 검색 경로를 확장할 수 있는 환경변수이다. Python에서만 사용되는 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">PATH</span><span style="background-color: white;"> 변수라고 생각할 수 있다. </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">sys.path</span><span style="background-color: white;"> 와는 다르게 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">:</span><span style="background-color: white;"> 로 구분된 Python modules를 가지고 있는 Directories의 단순한 리스트이다. 다음 예제를 보자.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nb" style="color: #24909d;">export </span><span class="nv" style="color: #40ffff;">PYTHONPATH</span><span class="o">=</span>/path/to/some/directory:/path/to/another/directory:/path/to/yet/another/directory
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">몇 상황에서는 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">PYTHONPATH</span><span style="background-color: white;"> 가 덮어씌어지질 않기를 원할 때가 있는데, 그럴 때는 다음과 같이 하면 된다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nb" style="color: #24909d;">export </span><span class="nv" style="color: #40ffff;">PYTHONPATH</span><span class="o">=</span><span class="nv" style="color: #40ffff;">$PYTHONPATH</span>:/path/to/some/directory <span class="c" style="color: #999999; font-style: italic;"># Append</span>
<span class="nb" style="color: #24909d;">export </span><span class="nv" style="color: #40ffff;">PYTHONPATH</span><span class="o">=</span>/path/to/some/directory:<span class="nv" style="color: #40ffff;">$PYTHONPATH</span> <span class="c" style="color: #999999; font-style: italic;"># Prepend</span>
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">일반적으로 </span><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">.bashrc</code><span style="background-color: white;">, </span><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">.zshrc</code><span style="background-color: white;"> 와 같은 shell startup 파일에 작성 한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<strong><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">PYTHONPATH</code>, <code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">sys.path.insert</code></strong> <strong>혹은 유사 기술은 해킹이고 일반적으로 일반적으로 이러한 해킹과 멀리하는 것이 좋다. 개인 local 개발환경의 문제를 해결하기 위해서만 사용하지만, 이것이 당신의 제품에 영향을 끼쳐서는 안된다. 같은 효과를 볼 수 있는 더 우아한 방법들이 있으며, 이것에 대해 추후에 알아보도록 하자.</strong></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<strong><br /></strong></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">지금은 Python이 어떻게 설치된 Packages를 찾는지 이해하는 것이고, 처음 질문으로 돌아가도록 하자. "Module 과 Package의 차이는 무엇인가?". Package는 한 개 이상의 Module 혹은 Module과 Sub-module의 Collection이다. 또한 일반적으로 1개의 파일로 압축된 형태이며(tarball), 이것은 다음의 내용을 포함하고 있다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
</div>
<ol>
<li>의존성에 대한 정보</li>
<li>기본 Package 검색 경로에 파일들을 복제 지시서</li>
<li>Compile 지시서(설치 전에 compile이 필요한 코드가 포함 되어있다면)</li>
</ol>
<br />
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
이것이 전부다.</div>
<h2 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 32px; line-height: 50px;">
외부 Packages</h2>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">본격적으로 Python으로 개발을 하기 위해선 다양한 작업을 하기 위한 외부 Packages를 설치해야 한다.</span><br />
<span style="background-color: white;"><br /></span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
Linux System에서 외부 Packages를 설치하기 위한 최소 3가지 방법이 존재한다.</div>
<br />
<ol>
<li><span style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: medium;"><span style="line-height: 28px;">배포본에서 제공하는 Package 관리 시스템을 이용한다.(deb,rpm 같은)</span></span></li>
<li><span style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: medium;"><span style="line-height: 28px;">다양한 community-developed 도구를 사용한다. </span></span><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: 18px; font-style: italic; line-height: 28px; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">pip</code><span style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">, </span><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: 18px; font-style: italic; line-height: 28px; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">easy_install</code></li>
<li><span style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: medium;"><span style="line-height: 28px;">Source files를 이용해 설치한다.</span></span></li>
</ol>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">이 3가지 방법은 같은 목적을 달성할 수 있다. 이것은 독립적으로 설치 되고, 필요하다면 compile을 하며, 표준 Package 검색 위치에 modules를 위치 시킨다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">2,3번은 OS환경에 영향이 거의 없이 같이 동작될 것이다. 다른 방법으로 외부 Package를 설치하고자 한다면, </span><a href="http://www.stackoverflow.com/" style="background-color: white; color: #2760bf; text-decoration: none;">Stack Overflow</a><span style="background-color: white;"> 에서 알아보도록 하자.</span><br />
<span style="background-color: white;"><br /></span></div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
외부 Package는 어디서 찾는가</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">외부 Packages를 설치하기에 앞서 어디선가 찾아야 한다. 다음과 같은 방법들이 있다.</span></div>
<ol>
<li><span style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: medium;"><span style="line-height: 28px;">배포본에서 제공하는 Package 관리 시스템.</span></span></li>
<li><span style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: medium;"><span style="line-height: 28px;"><a href="http://pypi.python.org/pypi" style="color: #2760bf; font-size: 18px; text-decoration: none;">Python Package Index (or PyPI)</a></span></span></li>
<li><span style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: medium;"><a href="https://launchpad.net/" style="color: #2760bf; font-size: 18px; line-height: 28px; text-decoration: none;">Launchpad</a><span style="font-size: 18px; line-height: 28px;">, </span><a href="http://github.com/" style="color: #2760bf; font-size: 18px; line-height: 28px; text-decoration: none;">GitHub</a><span style="font-size: 18px; line-height: 28px;">, </span><a href="https://bitbucket.org/" style="color: #2760bf; font-size: 18px; line-height: 28px; text-decoration: none;">BitBucket</a> 와 같은 다양한 Source Code 호스팅</span></li>
</ol>
<div>
<span style="background-color: white; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">배포본의 Package 관리 시스템으로 설치하기</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">배포본의 Package 관리 시스템으로 설치하는 것은 간단한 명령어 혹은 GUI app을 사용한다.예를 들어 </span><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">simplejson</code><span style="background-color: white;">(a JSON parsing utility)을 Ubuntu 시스템에서 설치하고자 한다면 다음과 같은 명령어를 친다. </span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo apt-get install python-simplejson
</code></pre>
</div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
pip를 이용하여 설치하기</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<em><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">easy_install</code></em><em> 는 거의 인기를 잃었다.</em><em><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">easy_install</code></em><em> 를 대체하기 위해 나온 </em><em><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">pip</code></em><em> 에 집중하도록하자.</em></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip(Python Package Index)</span><span style="background-color: white;"> 는 Python packages를 설치하고 관리하기위한 툴이다. </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span><span style="background-color: white;"> 는 Python 가상머신과 함께 설치 되지 않으므로, 먼저 설치하는 과정이 필요하다. Linux에서는 일반적으로 다음과 같이 설치 한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo apt-get install python-pip
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">다른 Package를 설치하기에 앞서 항상 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span><span style="background-color: white;"> 를 최신버전으로 유지를 한다. Ubuntu repositories에 있는 PyPI는 일반적인 PyPI보다 늦기 때문이다. pip를 이용하여 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span><span style="background-color: white;"> 를 업그레이드 한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo pip install pip --upgrade
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">지금 부터 Python의 Package를 설치하기 위해선 다음 명령어 패턴을 이용한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip install package-name.</span> 그럼 <span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">simplejson</span> 를 설치하기 위해선 다음과 같다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo pip install simplejson
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">Package 삭제는 쉽다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo pip uninstall simplejson
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">기본적으로 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span><span style="background-color: white;"> 는 PyPI의 가장 최신 안정 버전을 설치할 것이다. 그러나 가끔 프로젝트 상황에 따라, 정확한 버전의 Package를 설치해야 하는 상황이 있다. 그럴 때는 다음과 같이 실행 한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo pip install <span class="nv" style="color: #40ffff;">simplejson</span><span class="o">==</span>2.2.1
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">가끔은 업그레이드,다운그레이드 혹은 재설치를 해야하는 경우가 있는데, 그럴 때는 다음과 같이 실행한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo pip install simplejson --upgrade <span class="c" style="color: #999999; font-style: italic;"># Upgrade a package to the latest version from PyPI</span>
<span class="nv" style="color: #40ffff;">$ </span>sudo pip install <span class="nv" style="color: #40ffff;">simplejson</span><span class="o">==</span>2.2.1 --upgrade <span class="c" style="color: #999999; font-style: italic;"># Upgrade/downgrade a package to a given version</span>
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">이번엔, 버전관리 repository에는 있으나 PyPI에는 배포가 안된 Pacakge를 설치하기 위해선 어떻게 해야 할까? </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span><span style="background-color: white;"> 는 이것이 가능하다. 하지만, 그전에 버전 관리 시스템이 설치되어있어야 한다. Ubuntu 에서는 다음과 같이 설치를 한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo apt-get install git-core mercurial subversion
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">버전 관리 시스템을 설치한 후에는, 다음과 같이 버전 관리 repository에서 Package를 설치 할 수 있다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo pip install git+http://hostname_or_ip/path/to/git-repo#egg<span class="o">=</span>packagename
<span class="nv" style="color: #40ffff;">$ </span>sudo pip install hg+http://hostname_or_ip/path/to/hg-repo#egg<span class="o">=</span>packagename
<span class="nv" style="color: #40ffff;">$ </span>sudo pip install svn+http://hostname_or_ip/path/to/svn-repo#egg<span class="o">=</span>packagename
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">다음과 같은 방법으로 쉽게 같은 위치에 repository로 부터 설치를 할 수가 있다. Filesystem path에 3개의 slash를 사용한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo pip install git+file:///path/to/local/repository
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">git</span><span style="background-color: white;"> Protocol을 이용할 때 주의해야 할 점이 있다. 다음과 같이 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">git+git</span><span style="background-color: white;"> 를 써야한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo pip install git+git://hostname_or_ip/path/to/git-repo#egg<span class="o">=</span>packagename
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">이 </span><em style="background-color: white;">eggs</em><span style="background-color: white;"> 로 부터 무엇이 일어나는 것인지 궁금해할 것이다. 지금 부터 Package source와 metadata를 가지고 있는 압축된 Python Package에 대한 이해를 하도록 하자. </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span><span style="background-color: white;"> 는 Package를 설치하기 전에 egg정보를 만든다. Code 저장소에서 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">setup.py</span><span style="background-color: white;"> 를 열어보면 egg의 이름을 알 수가 있다.(대부분 거기에 있다). </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">setup</span><span style="background-color: white;"> 섹션을 찾아보면, </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">name="something"</span><span style="background-color: white;"> 와 같은 줄을 찾을 수 있을 것이다. 다음은 simplejson의 </span><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">setup.py</code><span style="background-color: white;"> 에서 가져온 Code 조각이다. </span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="n">setup</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="s" style="color: #ed9d13;">"simplejson"</span><span class="p">,</span> <span class="c" style="color: #999999; font-style: italic;"># <--- This is your egg name</span>
<span class="n">version</span><span class="o">=</span><span class="n">VERSION</span><span class="p">,</span>
<span class="n">description</span><span class="o">=</span><span class="n">DESCRIPTION</span><span class="p">,</span>
<span class="n">long_description</span><span class="o">=</span><span class="n">LONG_DESCRIPTION</span><span class="p">,</span>
<span class="n">classifiers</span><span class="o">=</span><span class="n">CLASSIFIERS</span><span class="p">,</span>
<span class="n">author</span><span class="o">=</span><span class="s" style="color: #ed9d13;">"Bob Ippolito"</span><span class="p">,</span>
<span class="n">author_email</span><span class="o">=</span><span class="s" style="color: #ed9d13;">"bob@redivi.com"</span><span class="p">,</span>
<span class="n">url</span><span class="o">=</span><span class="s" style="color: #ed9d13;">"http://github.com/simplejson/simplejson"</span><span class="p">,</span>
<span class="n">license</span><span class="o">=</span><span class="s" style="color: #ed9d13;">"MIT License"</span><span class="p">,</span>
<span class="n">packages</span><span class="o">=</span><span class="p">[</span><span class="s" style="color: #ed9d13;">'simplejson'</span><span class="p">,</span> <span class="s" style="color: #ed9d13;">'simplejson.tests'</span><span class="p">],</span>
<span class="n">platforms</span><span class="o">=</span><span class="p">[</span><span class="s" style="color: #ed9d13;">'any'</span><span class="p">],</span>
<span class="o">**</span><span class="n">kw</span><span class="p">)</span>
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">만약에 </span><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">setup.py</code><span style="background-color: white;"> 이 없어서 egg 이름을 어떻게 찾는가에 대해서 고민 할 필요는 없다. Package Source를 Project Directory에 넣고 import 하고 당신의 Code인 것처럼 사용하면 된다.</span></div>
<h4 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 25px;">
The --user switch</h4>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">앞선 예제들은 모두 System 전반적으로 사용되는 Packages를 설치하는것이다. 만약에 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip install</span><span style="background-color: white;"> 에 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">--user</span><span style="background-color: white;"> 옵션을 사용한다면 Packages 는 당신의 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">~/.local</span><span style="background-color: white;"> Directory에 설치 될 것이다. 예를 들면 다음과 같다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>pip install --user markdown2
Downloading/unpacking markdown2
Downloading markdown2-1.0.1.19.zip <span class="o">(</span>130Kb<span class="o">)</span>: 130Kb downloaded
Running setup.py egg_info <span class="k" style="color: #6ab825; font-weight: bold;">for </span>package markdown2
Installing collected packages: markdown2
Running setup.py install <span class="k" style="color: #6ab825; font-weight: bold;">for </span>markdown2
warning: build_py: byte-compiling is disabled, skipping.
changing mode of build/scripts-2.7/markdown2 from 664 to 775
warning: install_lib: byte-compiling is disabled, skipping.
changing mode of /home/mir/.local/bin/markdown2 to 775
Successfully installed markdown2
Cleaning up...
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<i style="background-color: white;">markdown2 Pacakge가 </i><em style="background-color: white;"><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">/home/mir/.local/bin/markdown2</code></em><i style="background-color: white;"> 에 설치 되었다.</i></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<i><br /></i></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">모든 Package가 System 전반적으로 설치 되지 않기를 원하는 이유는 몇 가지가 있다. 각 Project 별 분리되고 독립된 Python 환경을 꾸미는 것을 보여줄 때는 이것에 대한 설명을 건너띄도록 하겠다.</span></div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
Source로 부터 설치하기</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Source로 부터 설치하기 위해선 1줄의 명령어만 필요하다. 압축이 풀린 Package가 있는 Directory에서 다음 명령어를 실행 시켜준다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nb" style="color: #24909d;">cd</span> /path/to/package/directory
python setup.py install</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
비록 이 방법을 할 줄 알더라도, <span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span> 방법을 이해하는 것을 추천한다. 왜냐면, 업그레이드/다운그레이드 등의 Package를 관리하는 방법을 수동으로 다운로드 하고 압축을 풀고 설치를 하는 작업 없이 쉽게 실행 할 수 있기 때문이다. 모든 방법을 실행해보고도 안될 때 최후의 선택으로 Source로 설치하기를 하길 바란다.</div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
Compiling이 필요한 Package 설치하기</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
우리는 Package를 설치하기 위한 거의 모든 방법을 알았다. 하지만, 부족한 하나가 있다. 그것은 설치하고 사용하기 위해선 Compile이 필요한 C/C++ code를 가지고 있는 Python Package이다. Database Adapter 혹은 Image Processing Library등의 Package가 좋은 예이다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">pip가 source를 관리할 수 있지만, 개인적으론 배포본 Package 관리 시스템을 통해 설치하기를 선호한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">만약에 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span><span style="background-color: white;"> 로 설치하고 싶다면, Ubuntu 의 경우엔 다음과 같이 하자.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">Compiler와 관련 Tools을 설치하자.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo apt-get install build-essential
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Python 개발 파일을 설치하자.(header와 같은)</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo aptitude install python-dev-all
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">만약에 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">python-dev-all</span><span style="background-color: white;"> 의 배포본을 찾을 수 없다면, </span><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">python-dev</code><span style="background-color: white;">, </span><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">python2.X-dev</code><span style="background-color: white;"> 등을 찾아보도록 하자.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">PostgreSQL adapater Package 인 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">psycopg2</span><span style="background-color: white;"> 을 설치하자고 가정하면, PostgreSQL의 개발 파일들도 필요하게 된다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo aptitude install postgresql-server-dev-all
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">이러한 관련된 작업들이 완료 되면,이제 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip install</span><span style="background-color: white;"> 실행 할 수 있다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo pip install psycopg2
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<b style="background-color: white;">모든 Pacakge들이 <em><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">pip</code></em> 설치법에 호환이 되지 않을 수 있다는 점</b><span style="background-color: white;">을 잊지 말자. Source를 compiling 하는 것이 편하거나, 당신의 Platform에서 필요한 경험과 이해가 있다면 그대로 진행 하면 된다.</span></div>
<h2 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 32px; line-height: 50px;">
개발환경</h2>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">대부분의 개발 커뮤니티에서 한 가지 이상의 다른 사람들도 받아들일 만한 설정 방법을 제안하고 있음에도 자신이 좋아하는 방법으로 개발환경을 꾸미길 선호한다. 큰 문제가 없다면, 일반적으로 많이 사용되고, 실험 된 방법으로 설치하는 것이 좋다.(그냥 우선 이렇게 번역-_-;)</span></div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
virtualenv</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Python 개발환경으로 가장 유명한 것은 Virtualenv Package 이다. Virtualenv 는 독립된 Python 개발환경을 만들어 준다. 여기서 나올만한 질문 : 왜 독립된 Python환경이 필요하나요? 대답은 Virtualenv의 문서를 인용하도록 하겠다.</span></div>
<br />
<blockquote class="tr_bq">
근본적인 해결을 위한 방법은 독립과 버전들 간접적인 권한이다. Libfoo 의 Version 1에서 필요하지만, Version 2는 필요하지 않는 App을 상상해보라. 어떻게 이 App들을 둘 다 이용 할 것인가? 만약에 못든 것을 <span style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; font-style: italic; line-height: 28px;">/usr/lib/python2.7/site-packages</span> 에 설치한다면, 업그레이드 하지 말아야 하는 App도 업그레이드가 되어버리는 상황에 마주칠 것이다.</blockquote>
<br />
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">간단히 말하자면, 각 Project 별로 독립적인 Python 환경을 가질 수 있다는 것이고, 각각의 독립된 환경에 필요한 Packages를 설치하게 될 것이다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">그럼 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span><span style="background-color: white;"> 를 이용하여 virtualenv 를 설치하자. </span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo pip install virtualenv
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Virtualenv를 설치하고, 다음 명령어를 내려 Project를 위한 독립된 Python 환경을 만들어 보자.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>mkdir my_project_venv
<span class="nv" style="color: #40ffff;">$ </span>virtualenv --distribute my_project_venv
<span class="c" style="color: #999999; font-style: italic;"># The output will something like:</span>
New python executable in my_project_venv/bin/python
Installing distribute.............................................done.
Installing pip.....................done.
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
무슨일이 일어났는가? 독립된 Python환경을 가지는 <span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">my_project_venv</span> Directory가 생성이 되었다. <span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">--distribute</span> 옵션은 virtualenv가 <span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">setuptools</span> 에서 구 시스템에 의거하여 <span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">distribute</span> package 에 기반 되어 새롭게 사용 되게 해준다.(말이 되게 이상한데, 기존 시스템을 가지고 새롭게 독립적인 공간을 만들어준다는 뜻으로 보입니다.) <span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">--distribute</span> 옵션은 <span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span> 도 자동적으로 새로운 가상공간에 설치해주므로, 사용자가 직접 해야 할 것은 없다는 것을 이해하길 바란다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">My_project_venv</code> directory 를 살펴보도록 하자. 다음과 같은 구조를 발견 할 수 있을 것이다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="c" style="color: #999999; font-style: italic;"># Showing only files/directories relevant to the discussion at hand</span>
.
|-- bin
| |-- activate <span class="c" style="color: #999999; font-style: italic;"># <-- Activates this virtualenv</span>
| |-- pip <span class="c" style="color: #999999; font-style: italic;"># <-- pip specific to this virtualenv</span>
| <span class="sb" style="color: #ed9d13;">`</span>-- python <span class="c" style="color: #999999; font-style: italic;"># <-- A copy of python interpreter</span>
<span class="sb" style="color: #ed9d13;">`</span>-- lib
<span class="sb" style="color: #ed9d13;">`</span>-- python2.7 <span class="c" style="color: #999999; font-style: italic;"># <-- This is where all new packages will go</span>
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">다음 명령으로 virtualenv 를 활성화 시켜보자.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span><span class="nb" style="color: #24909d;">cd </span>my_project_venv
<span class="nv" style="color: #40ffff;">$ </span><span class="nb" style="color: #24909d;">source </span>bin/activate
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">activate</code> script 가 보여진 후, 다음과 같은 Prompt 를 볼 수 있을 것이다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="o">(</span>my_project_venv<span class="o">)</span><span class="nv" style="color: #40ffff;">$ </span><span class="c" style="color: #999999; font-style: italic;"># the virtualenv name prepended to the prompt</span>
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">다음 명령으로 virtualenv 를 비활성화 할 수 있다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="o">(</span>my_project_venv<span class="o">)</span><span class="nv" style="color: #40ffff;">$ </span>deactivate
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">다음 명령으로 시스템에 설치된 환경과 다름을 아는데 좀 더 도움이 될 것이다.(virtualenv가 활성화 되어있다면, 비활성화 시켜라)</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
처음으로 python/pip 명령어가 어디에 있는지 알아보도록 하자.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>which python
/usr/bin/python
<span class="nv" style="color: #40ffff;">$ </span>which pip
/usr/local/bin/pip
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<em><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">which</code></em><em> 명령어는 </em><em><a href="http://en.wikipedia.org/wiki/Which_%28Unix%29" style="color: #2760bf; text-decoration: none;">Wikipedia</a>에서 보도록 하자.</em></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">그럼 다시 virtualenv를 활성화 시키고 어떻게 다른지 살펴보자.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span><span class="nb" style="color: #24909d;">cd </span>my_project_venv
<span class="nv" style="color: #40ffff;">$ </span><span class="nb" style="color: #24909d;">source </span>bin/activate
<span class="o">(</span>my_project_venv<span class="o">)</span><span class="nv" style="color: #40ffff;">$ </span>which python
/home/mir/my_project_venv/bin/python
<span class="o">(</span>my_project_venv<span class="o">)</span><span class="nv" style="color: #40ffff;">$ </span>which pip
/home/mir/my_project_venv/bin/pip
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">virtualenv</span> 가 하는 것은 Python 실행 환경을 복제하고, utility script를 생성하며, 설치하고 업그레이드하며 삭제하는 모든 Project 주기를 관장하는 공간을 생성한다. 또한,</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
1) 사용자가 Package를 설치할 때, 활성화된 virtualenv 공간에만 영향을 끼칠 수 있도록하는,</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
2) 현재 활성화 된 virtualenv 공간과 시스템 전반적인 곳에서 import 가 가능하도록 하는, Package 검색 경로와 PYTHONPATH 에 대한 마법을 부린다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
중요한 점은 시스템 전반적으로 설치된 Python의 Package는 virtualenv에서도 사용이 가능하다는 것이다. 그 뜻은 만약에 시스템 전반적으로 영향을 받도록 <span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">simplejson</span> Package를 설치했다면, virtualenvs에서도 이것을 사용할 수 있다는 것이다. 이러한 것은 <span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">--no-site-packages</span> 옵션으로 끌 수 있다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>virtualenv my_project_venv --no-site-packages
</code></pre>
</div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
virtualenvwrapper</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">virtualenvwrapper</span> 는 <span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">virtualenv</span> 에서 제공 되는 Create/Activate / Manage / Destory를 좀 더 쉽게 하는 Utilities를 제공한다. <span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">virtualenvwrapper</span> 를 설치하기 위해서 다음과 같은 명령어를 이용한다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>sudo pip install virtualenvwrapper
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">설치 한 후에, 다음과 같은 설정이 필요하다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="k" style="color: #6ab825; font-weight: bold;">if</span> <span class="o">[</span> <span class="sb" style="color: #ed9d13;">`</span>id -u<span class="sb" style="color: #ed9d13;">`</span> !<span class="o">=</span> <span class="s1" style="color: #ed9d13;">'0'</span> <span class="o">]</span>; <span class="k" style="color: #6ab825; font-weight: bold;">then</span>
<span class="k" style="color: #6ab825; font-weight: bold;"> </span><span class="nb" style="color: #24909d;">export </span><span class="nv" style="color: #40ffff;">VIRTUALENV_USE_DISTRIBUTE</span><span class="o">=</span>1 <span class="c" style="color: #999999; font-style: italic;"># <-- Always use pip/distribute</span>
<span class="nb" style="color: #24909d;">export </span><span class="nv" style="color: #40ffff;">WORKON_HOME</span><span class="o">=</span><span class="nv" style="color: #40ffff;">$HOME</span>/.virtualenvs <span class="c" style="color: #999999; font-style: italic;"># <-- Where all virtualenvs will be stored</span>
<span class="nb" style="color: #24909d;">source</span> /usr/local/bin/virtualenvwrapper.sh
<span class="nb" style="color: #24909d;">export </span><span class="nv" style="color: #40ffff;">PIP_VIRTUALENV_BASE</span><span class="o">=</span><span class="nv" style="color: #40ffff;">$WORKON_HOME</span>
<span class="nb" style="color: #24909d;">export </span><span class="nv" style="color: #40ffff;">PIP_RESPECT_VIRTUALENV</span><span class="o">=</span><span class="nb" style="color: #24909d;">true</span>
<span class="k" style="color: #6ab825; font-weight: bold;">fi</span>
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">WORKON_HOME</code> 과 <code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">source /usr/local/bin/virtualenvwrapper.sh</code> 만 설정시 필요하며, 나머지 부분은 개인 환경을 따른다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">위의 환경을 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">~/.bashrc</span><span style="background-color: white;"> 에 위치하기 위해서 다음과 같은 명령을 실행한다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span><span class="nb" style="color: #24909d;">source</span> ~/.bashrc
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">Shell 창을 모두 닫아서 열거나, Tab을 열게 된다면 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">~/.bashrc</span><span style="background-color: white;"> 가 실행 되어 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">virtualenvwrapper</span><span style="background-color: white;"> 설정이 자동으로 적용되어 같은 효과를 기대할 수 있다. </span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">다음 명령어들을 실행하여, </span><span style="background-color: white;">virtualenv 을 </span><span style="background-color: white;">create/activate/deactivate/delete 해보자.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>mkvirtualenv my_project_venv
<span class="nv" style="color: #40ffff;">$ </span>workon my_project_venv
<span class="nv" style="color: #40ffff;">$ </span>deactivate
<span class="nv" style="color: #40ffff;">$ </span>rmvirtualenv my_project_venv
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<em style="background-color: white;">Tab-based bash shell 에서도 </em><em style="background-color: white;">virtualenvwrapper 가 잘 호환 된다.</em></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<a href="http://www.doughellmann.com/projects/virtualenvwrapper/" style="background-color: white; color: #2760bf; text-decoration: none;">virtualenvwrapper </a><span style="background-color: white;">홈페이지로 가서 더 많은 명령어와 설정 옵션을 보도록 하자.</span></div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
PIP와 Virtualevn를 이용한 기본 연계 관리</h3>
<div style="font-size: 18px; line-height: 28px;">
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif;">
<span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">virtualenv</span><span style="background-color: white;"> 에 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span><span style="background-color: white;"> 를 연결하여 Project를 위한 간단한 연계 관리 도구를 만들 수 있다.</span></div>
</div>
<div style="font-size: 18px; line-height: 28px;">
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif;">
<span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;"><br /></span><br />
<span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip freeze</span><span style="background-color: white;"> 명령어를 이용하여 현재 설치되어있는 Package 리스트를 볼 수 있다. 예를 들어 이 블로그를 만들기 위해 사용된 Python Packages를 보도록 하자.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif;">
<br /></div>
</div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>pip freeze -l
<span class="nv" style="color: #40ffff;">Jinja2</span><span class="o">==</span>2.6
<span class="nv" style="color: #40ffff;">PyYAML</span><span class="o">==</span>3.10
<span class="nv" style="color: #40ffff;">Pygments</span><span class="o">==</span>1.4
<span class="nv" style="color: #40ffff;">distribute</span><span class="o">==</span>0.6.19
<span class="nv" style="color: #40ffff;">markdown2</span><span class="o">==</span>1.0.1.19
</code></pre>
</div>
<div style="font-size: 18px; line-height: 28px;">
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif;">
<em style="background-color: white;"><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">-l</code></em> 옵션은 <em style="background-color: white;"><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">pip</code></em><span style="background-color: white;"> 명령어에서 현재 활성화된 가상공간에서 설치 된 것만 보여줄 수 있도록 하는 것이다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif;">
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">이렇게 뽑힌 리스트를 파일로 저장하고, 버전관리 시스템에 추가 할 수 있다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif;">
<br /></div>
</div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>pip freeze -l > requirements.txt
</code></pre>
</div>
<div style="font-size: 18px; line-height: 28px;">
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif;">
<span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;"><br /></span><br />
<span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip freeze</span><span style="background-color: white;"> 의 결과물을 가진 파일로 부터 새로 설치가 가능하다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif;">
<br /></div>
</div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>pip install -r requirements.txt
</code></pre>
</div>
<h2 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 32px; line-height: 50px;">
기타 중요 도구들</h2>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
VMs 와 Package 관리 등의 Python 버전의 기초를 보았다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<i style="background-color: white;">대부분이 Web apps 개발자에게 맞춰진 도구들임을 양해 바란다.</i></div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
편집기</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Python을 작성하기 위한 정말 많은 좋은 편집기들이 있다. 개인적으론 Vim을 선호하고, 편집기 전쟁에 뛰어 들고 싶지 않다. - 나중엔 모르겠지만... ;)</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Python을 지원하는 편집기와 IDEs는 다음과 같다. </span><span style="background-color: white;">Vim/Gvim, Emacs, GEdit for GNOME, Kate for KDE, Scribes, Komodo Edit/IDE from ActiveState, Wing IDE from WingWare, PyCharm from JetBrains, PyDEV for Eclipse. 다른 것들 도 많이 있지만, 이것 들이 유명한 것들이다. 이 중 당신에게 적합한 것을 고르면 된다.</span></div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
Pyflakes: Source checking and linting</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Pyflakes 는 File의 Text를 분석해 Python source의 에러를 검사해주는 간단한 프로그램이다. 문법과 간단한 로직 에러, 그리고 사용되지 않는 module이 import 되었는지, 사용이 한번 밖에 안되는 변수들이 있는지 정도를 검사 해준다.</span></div>
<div style="font-size: 18px; line-height: 28px;">
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif;">
<span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span> 를 이용하여 설치해보자.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif;">
<br /></div>
</div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>pip install pyflakes
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Terminal 상에서 Python source file을 불러낼 수 있다. 다음을 보자.</span><br />
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>pyflakes filename.py
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Pyflakes 는 사용하고 있는 편집기에서도 사용 할 수 있다. Vim 에서 어떻게 보여지는지 볼 수 있다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<a href="http://mirnazim.org/media/img/content/vim-pyflakes.png" style="color: #2760bf; text-decoration: none;" title="Pyflakes"><img alt="PyFlakes" src="http://mirnazim.org/media/img/content/vim-pyflakes.png" style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: auto; margin-right: auto; margin-top: 0px; max-width: 680px;" title="Pyflakes" /></a></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">사용하고 있는 편집기에서 </span><span style="background-color: white;">Pyflakes를 어떻게 연동 할 수 있는지는 </span><a href="http://www.stackoverflow.com/" style="background-color: white; color: #2760bf; text-decoration: none;">Stack Overflow</a><span style="background-color: white;">에서 알아보도록 하자.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<a href="https://launchpad.net/pyflakes" style="color: #2760bf; text-decoration: none;">Pyflakes website</a></div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
Requests: HTTP library for human beings</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Requests 는 HTTP를 컨트롤 할 수 있는 Library이다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
다음과 같이 <span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span><span style="background-color: white;"> 를 이용하여 설치한다.</span><br />
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>pip install requests
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">이번엔 예제를 보도록 하자.</span><br />
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="o">>>></span> <span class="kn" style="color: #6ab825; font-weight: bold;">import</span> <span class="nn" style="color: #447fcf; text-decoration: underline;">requests</span>
<span class="o">>>></span> <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s" style="color: #ed9d13;">'https://api.github.com'</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s" style="color: #ed9d13;">'user'</span><span class="p">,</span> <span class="s" style="color: #ed9d13;">'pass'</span><span class="p">))</span>
<span class="o">>>></span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span>
<span class="mi" style="color: #3677a9;">204</span>
<span class="o">>>></span> <span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s" style="color: #ed9d13;">'content-type'</span><span class="p">]</span>
<span class="s" style="color: #ed9d13;">'application/json'</span>
<span class="o">>>></span> <span class="n">r</span><span class="o">.</span><span class="n">content</span>
<span class="o">...</span>
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<a href="http://docs.python-requests.org/en/latest/index.html" style="color: #2760bf; text-decoration: none;">Requests documentation</a></div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
Flask: Microframework for web development</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Flask 는 Python을 위한 </span><span style="background-color: white;">Werkzeug와 </span><span style="background-color: white;">Jinja2를 기본으로 하는 </span><span style="background-color: white;">작은 Framework이다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">이 또한 </span><span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span><span style="background-color: white;"> 를 이용하여 설치한다.</span><br />
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>pip install Flask
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">사용예제는 다음과 같다.</span><br />
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="kn" style="color: #6ab825; font-weight: bold;">from</span> <span class="nn" style="color: #447fcf; text-decoration: underline;">flask</span> <span class="kn" style="color: #6ab825; font-weight: bold;">import</span> <span class="n">Flask</span>
<span class="n">app</span> <span class="o">=</span> <span class="n">Flask</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
<span class="nd" style="color: orange;">@app.route</span><span class="p">(</span><span class="s" style="color: #ed9d13;">"/"</span><span class="p">)</span>
<span class="k" style="color: #6ab825; font-weight: bold;">def</span> <span class="nf" style="color: #447fcf;">hello</span><span class="p">():</span>
<span class="k" style="color: #6ab825; font-weight: bold;">return</span> <span class="s" style="color: #ed9d13;">"Hello World!"</span>
<span class="k" style="color: #6ab825; font-weight: bold;">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s" style="color: #ed9d13;">"__main__"</span><span class="p">:</span>
<span class="n">app</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">그리고 실행은 다음과 같이 실행한다.</span><br />
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>python hello.py
* Running on http://localhost:5000/
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<a href="http://flask.pocoo.org/" style="color: #2760bf; text-decoration: none;">Flask website</a></div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
Django: Full stack framework for web development</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Django는 모든 것을 갖추고 있는 Web Framework이다. </span><span style="background-color: white;">ORM, HTTP library, form handling, XSS filtering, 그리고 templating 는 물론이고 다른 것들도 지원하고 있다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
다음과 같이 <span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span><span style="background-color: white;"> 를 이용하여 설치한다.</span><br />
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>pip install Django
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<a href="http://djangoproject.com/" style="background-color: white; color: #2760bf; text-decoration: none;">Django website</a><span style="background-color: white;"> 로 가서 문서를 따라해보며 익혀보도록 하자. 상당히 쉽다.</span></div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
Fabric: Streamline the use of SSH for deployment and/or system admin tasks</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Fabric 은 Python Library이며 SSH을 이용하는 app이나 system administration 작업을 실행 할 수 있는 </span><span style="background-color: white;">command-line 도구이다.</span></div>
<div style="font-size: 18px; line-height: 28px;">
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif;">
Local은 물론이고 Remote Shell상에서 실행 할 수 있으며(일반적으로 sudo를 이용하여), Files를 uploading/downloading 도 가능하다. 또한 사용자 입력을 받을 수 있으며, 실행을 취소 할 수도 있다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif;">
<span style="background-color: #eeeeee; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic;">pip</span> 를 이용하여 설치 할 수 있다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif;">
<br /></div>
</div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>pip install fabric
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">간단히 </span><span style="background-color: white;">Fabric 작업을 작성해보자.</span><br />
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="kn" style="color: #6ab825; font-weight: bold;">from</span> <span class="nn" style="color: #447fcf; text-decoration: underline;">fabric.api</span> <span class="kn" style="color: #6ab825; font-weight: bold;">import</span> <span class="n">run</span>
<span class="k" style="color: #6ab825; font-weight: bold;">def</span> <span class="nf" style="color: #447fcf;">host_type</span><span class="p">():</span>
<span class="n">run</span><span class="p">(</span><span class="s" style="color: #ed9d13;">'uname -s'</span><span class="p">)</span>
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">그 후 실행은 어떻게 되는지 확인 해보자.</span><br />
<br /></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;"><span class="nv" style="color: #40ffff;">$ </span>fab -H localhost host_type
<span class="o">[</span>localhost<span class="o">]</span> run: uname -s
<span class="o">[</span>localhost<span class="o">]</span> out: Linux
Done.
Disconnecting from localhost... <span class="k" style="color: #6ab825; font-weight: bold;">done</span>.
</code></pre>
</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<a href="http://fabfile.org/" style="color: #2760bf; text-decoration: none;">Fabric website</a></div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
SciPy: tools for scientific computing with Python</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">만약에 과학적이나 수학적인 계산을 해야 하는 경우 </span><span style="background-color: white;">SciPy가 필요한 도구일 것이다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
From SciPy website:<br />
SciPy 사이트에서 발췌한 글이다.</div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<blockquote class="tr_bq">
<span style="font-style: italic;">SciPy ("Sigh Pie"라고 읽는다.)는 수학, 과학, 공학을 위한 Open-source 소프트웨어이다. 그리고, 이것은 매우 유명한 컨퍼런스인 </span><span style="background-color: white; font-style: italic;">scientific programming with Python 이름이다. </span><span style="background-color: white; font-style: italic;">SciPy Library는 </span><span style="background-color: white; font-style: italic;">편리하고 빠른 </span><span style="background-color: white; font-style: italic;">N-dimensional array를 조작가능하게 하는 </span><span style="background-color: white; font-style: italic;">NumPy에 의존성이 있다. </span><span style="background-color: white; font-style: italic;">SciPy Library는 </span><span style="background-color: white; font-style: italic;">NumPy arrays를 가지고 동작 되고, 많은 사용자에게 익숙하고 효과적인 수치적 통합 및 최적화를 위한 루틴을 제공한다. 또한, </span><span style="background-color: white; font-style: italic;">거의 유명한 OS에서 동작이 되며, 빠르게 설치된다. 그리고 무료다. </span><span style="background-color: white; font-style: italic;">NumPy과 SciPy 는 사용하기 쉽지만 세계적인 과학자와 공학자들에게도 충분하다. 만약에 컴퓨터의 숫자를 생성하길 원하거나 결과를 보여주기를 원한다면, </span><span style="background-color: white; font-style: italic;">SciPy를 시도하세요.</span></blockquote>
<a href="http://www.scipy.org/" style="background-color: white; color: #2760bf; text-decoration: none;">SciPy website</a><span style="background-color: white;"> 에서 좀 더 자세하게 Download 와 설치에 대한 문서를 읽어보도록 하자.</span></div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
PEP 8: Python Style Guide</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<em style="background-color: white;">per se</em><span style="background-color: white;"> 소프트웨어 도구를 사용하지 않는다면, PEP 8은 Python에 관련된 정말 중요한 Resource이다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">PEP 8은 메인 Python 배포의 표준 Library 집합에서 사용되는 Python Code의 Coding Conventions의 정의를 다룬 문서이다. 이 문서의 중요한 목적은 코드의 같은 물리적 레이어와 변수의 Naming 패턴, Class와 Function의 이름을 가진 Python Code를 보장하는 것이다. 이것을 전부 이해하고 따르길 바란다. 많은 시간을 줄여줄 것이다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<a href="http://www.python.org/dev/peps/pep-0008/" style="color: #2760bf; text-decoration: none;">PEP 0008</a></div>
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 28px;">
The Mighty Python Standard Library</h3>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Python의 기본 Library는 매우 다양하고, 광범위한 분야를 제공하고 있다. 이 Library는 C로 짜여진 File I/O 같이 System에 접근할 수 있는 기능을 가진 Built-in Modules를 포함한다. 또한, 매일 개발할 때 발생 되는 많은 문제들을 해결하는 표준적인 해결법을 Python으로 제작된 Modules이다. 이 Modules의 몇은 </span><span style="background-color: white;">Platform 고유의 APIs 를 이용하여 Platform에 맞춰 Python 프로그램이 좀 더 잘 돌 수 있도록 </span><span style="background-color: white;">명시적으로 설계 되어있다. </span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<a href="http://docs.python.org/library/" style="background-color: white; color: #2760bf; text-decoration: none;">Official documentation for the Standard Library</a><span style="background-color: white;"> 이 곳에서 다운 받도록 하자.</span></div>
<h2 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 32px; line-height: 50px;">
더 볼 거리</h2>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">David Goodger가 쓴 </span><a href="http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html" style="background-color: white; color: #2760bf; text-decoration: none;">Code Like a Pythonista: Idiomatic Python</a><span style="background-color: white;"> 에서는 많은 핵심적인 Python 문법과 고급 테크닉, 그리고 당장에라도 사용할 수 있는 좋은 도구에 대해서 다루고 있다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Doug Hellmann의 훌륭한 시리즈인 </span><a href="http://www.doughellmann.com/PyMOTW/contents.html" style="background-color: white; color: #2760bf; text-decoration: none;">Python Module of the Week</a><span style="background-color: white;">가 있다. 이 시리즈는 Python의 기본 Library에 있는 Module들을 활용하는 예제들이 있다.</span></div>
<h2 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif; font-size: 32px; line-height: 50px;">
마치며</h2>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">여기서 다루고 있는것은 단지 수박 겉 핥기이다. 유용한 도구, Library 그리고 상상할 수 없는 일도 할 수 있는, 그리고 혼자서는 다 완성하지 못할 Python을 위한 소프트웨어들이 있다. 그러한 것은 스스로 찾아봐야 할 것이다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">Python은 대단히 좋은 커뮤니티가 있으며, 이 곳에 속한 사람들은 희생적이며 새롭게 시작하는 사람들에게 도움을 주는 태도를 가지고 있다. 그러므로, 선호하는 Open source project의 IRC 채널에 항상연결을 하라. 그리고 Mailing List에 가입을 하고, Python 뿐만 아니라 다른 것들로 이뤄진 작고 큰 system을 향상시키는 경험에 대해서 얘기를 하라. 시간이 지나면 당신의 경험과 지식이 스스로를 발전 시켜줄 것이다.</span></div>
<div style="font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
<span style="background-color: white;">난 </span><strong style="background-color: white;">Zen Of Python</strong><span style="background-color: white;">에 있을 것이다. 생각하고, 생각하라. 그리고 깨어나라! </span><i style="background-color: white;">즐거운 파이선 개발.</i><br />
<em><br /></em></div>
<div class="codehilite" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(0, 43, 54) !important; background-origin: initial !important; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; color: #d0d0d0; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.9em !important; line-height: 0.78em; margin-bottom: auto; margin-left: auto; margin-right: auto; margin-top: -15px; max-width: 99%; overflow-x: auto; overflow-y: auto; padding-bottom: 20px; padding-left: 20px; padding-right: 10px; padding-top: 40px;">
<pre style="background-attachment: initial !important; background-clip: initial !important; background-image: url(http://mirnazim.org/media/img/noise.png) !important; background-origin: initial !important; background-repeat: repeat no-repeat !important; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;"><code style="background: inherit; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-size: inherit; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
</code></pre>
</div>
</div>
<div class="meta" style="background-color: white; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; line-height: 28px;">
</div>
<div class="tags" style="background-color: white; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 18px; font-style: italic; line-height: 28px; text-align: right;">
This entry was tagged <a class="tag" href="http://mirnazim.org/tags/python" style="color: #2760bf; text-decoration: none;">python</a>, <a class="tag" href="http://mirnazim.org/tags/programming" style="color: #2760bf; text-decoration: none;">programming</a>, <a class="tag" href="http://mirnazim.org/tags/tools" style="color: #2760bf; text-decoration: none;">tools</a>, <a class="tag" href="http://mirnazim.org/tags/tutorial" style="color: #2760bf; text-decoration: none;">tutorial</a></div>
<div id="underpost" style="background-color: white; font-family: 'Gentium Basic', Gentium, Palatino, Georgia, serif; font-size: 0.85em; line-height: 28px; margin-top: 120px;">
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif;">
Discussions/Feedback.</h3>
If you wish to, you can discuss/mock/upvote/downvote at <a href="http://news.ycombinator.com/item?id=3286399" style="color: #2760bf; text-decoration: none;">Hacker News</a>.<br />
I do not accept comments on this blog. Managing the spam is a headache and I am better off without it. However, I do welcome your feedback - good or bad via email at <code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-family: 'Ubuntu Mono', Inconsolata, Consolas, Monaco, 'Droid Sans Mono', 'Bitstream Vera Mono', monospace; font-style: italic; padding-bottom: 0px; padding-left: 2px; padding-right: 2px; padding-top: 0px;">feedback@mirnazim.org</code>. Specifically, I would be grateful for your feedback on errors, omissions, broken links, etc.<br />
<h3 style="border-bottom-color: rgb(238, 238, 238); border-bottom-style: solid; border-bottom-width: 1px; color: #444444; font-family: 'Yanone Kaffeesatz', Ubuntu, Helvetica, Arial, sans-serif;">
Credits.</h3>
<br />
My gratitude to the the people who provided valuable feedback over the Hacker News discussion and via direct email. A special thanks to <a href="http://www.natguy.net/" style="color: #2760bf; text-decoration: none;">Nathaniel Guy</a> who took out time and actually sent me a patch with improvements in grammar, naration and other some other fixes.</div>Anonymoushttp://www.blogger.com/profile/09184050528083344912noreply@blogger.com1tag:blogger.com,1999:blog-6613325491251369016.post-78538895384946050462011-10-10T07:19:00.000-07:002011-10-14T22:52:04.176-07:00[Javascript] Facebook History Manager 분석 (2)저번 포스트에서 initialization 하는 부분 까지 봤습니다.<br />
다른 부분들을 util 들이라고 보시면 되고, 그 다음 중요한 부분인 go 부분을 살펴보고 마무리 할까 합니다.<br />
<br />
go 는 parameter로 c, e, f를 받아오는데요.<br />
우선 History를 지원하는 최신 Browser의 경우는 입력된 c를 이용하여 이동을 하게 됩니다.(history back 같이) 이는 제일 간단히 가고 싶은 url로 이동하게 됩니다. h 등을 설정하고 하는 부분이 있는데요. 이 부분은 Facebook의 url에 관련되어있기 때문에 자신이 하고자하는 형태에 다라 변경 해줄 수 있습니다.<br />
<br />
이제 지원하지 않는 Browser의 경우를 살펴보도록 하겠습니다.<br />
ie 8 이하의 Browser의 경우엔 이미 만들어 놓은 iframe의 변화를 살펴야 하기 때문에 750ms 마다 url을 체크 하여, 변화가 있을 경우 그 url을 이용하여 사용자의 url을 변경 시킵니다.<br />
그 외 Hash event를 지원하는 Browser의 경우는 변화에 따라 Hash를 분석하여 url을 변경 시켜줍니다.<br />
<br />
위와 같이 전체적인 로직은 간단합니다.<br />
이대로 마무리하면 재미가 없을 것이라 생각 되기 때문에, Facebook 개발자들이 작성한 재밌는 Point를 살펴보도록 하겠습니다.<br />
<br />
먼저 "#!" 이 부분인데요. Twitter에서도 이 방식을 택했습니다.<strike> 왜 그런지는 정확히는 모르겠지만, 코드 상으로 볼때는 2중으로 검증을 하기 위해서가 아닐까 합니다. 기존의 라이브러리들은 대다수 # 만으로 구분을 하곤 했는데, 잘 못 되는 경우를 좀 더 보기 위해서 해놓은 의도적인 행위가 아닐까 합니다.</strike> 동료 분이 찾아주신 바에 의하면 크롤링이 가능한 Hash처리였네요. 공부가 부족했습니다.^_^ (<a href="http://googlewebmastercentral.blogspot.com/2009/10/proposal-for-making-ajax-crawlable.html">참고 링크</a>) 우선 #으로 뒤에 부분을 분리 후 !가 맞는지를 check하고, !는 확인 후 삭제 하여 의미 없게 처리가 됩니다.<br />
<br />
그리고, 불필요한 double go back(?)을 방지하기 위한 팁으로 업데이트가 될 때마다, Lastchanged 시간을 기록하여 방지를 하고 있습니다. 이것이 이론적으론 한 400ms인가 봅니다. 이렇게 많이 check하고 있네요.<br />
<br />
그 외에엔 시간을 들여서 오류가 나지 않도록 하는 Code들이라 찬찬히 읽어보시면 되지 않을까 합니다.^_^ 전 그럼 빠른 시간 내에 jQuery Ajax History를 작성하여 공개할 수 있도록 하겠습니다.<br />
<br />
그럼~Anonymoushttp://www.blogger.com/profile/09184050528083344912noreply@blogger.com0tag:blogger.com,1999:blog-6613325491251369016.post-17425748835368158652011-10-07T06:30:00.000-07:002011-10-07T06:38:32.992-07:00[Javascript] Facebook History Manager 분석 (1)<div style="text-align: left;">
요즘 SNS시대가 도래하고, 상하로 이동하는 Scroll Navigation의 형태를 지니는 사이트들이 많아지고 있습니다. Facebook/Twitter가 가장 대표적이고, me2Day, G+ 도 이와 같은 형태를 지니고 있습니다.</div>
<div style="text-align: left;">
기존 Page Navigation에 비해서 마우스 스크롤로 간편하게 움직일 수 있는 이러한 형태는 치명적인 단점을 가지고 있는데요. 하단으로 상당히 내려간 후에, 그 페이지를 벗어난 경우 다시 돌아올 때 불편함을 가지게 될 수 있습니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
이러한 단점을 극복하기 위해서 Facebook는 History Manager 라는 Object를 만들어 이러한 문제를 약간이나마 해결을 하였습니다. 기존에 photo 등을 클릭하면 End Page로 가던 것을 까만 배경의 Layer 형태로 바꿨었고, 이번 개편에서는 History Manager를 이용하여 Back에도 대응할 수 있도록 진행을 하였습니다. 사용자가 Url을 Copy하게 되면, 그 것이 바로 End Page로 갈 수 있게 하여 Share가 용이하게 되었다는 점에서도 상당히 좋은 선택이라고 보고 있습니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
UX의 장단점에 대해서는 사용자들과 연구원들이 좀 더 판단 해줄 것이라 생각을 하고, 저는 기술쟁이 입장에서 History Manage에 대한 분석으로 접근하여, 이후 jQuery용 Ajax History Plugin을 제작/공개할까 합니다.(많이 써주실랑가 모르겠네요.^_^)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
우선 전체 소스는 여기서 참고하시면 됩니다. (<a href="http://jsfiddle.net/Songhun/nCqFm/">Source</a> by <a href="http://jsfiddle.net/">jsFiddle</a>)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
첫 번째로 init에 대해서 보고 넘어갈 수 있도록 하겠습니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Facebook에서는 History를 위해서 pushStaus 를 이용합니다.</div>
<div style="text-align: left;">
<a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#the-history-interface">문서</a>와 <a href="http://html5demos.com/history">예제</a>를 보시면 어떤 기능인지에 대한 이해에 도움이 될 것입니다.</div>
<div style="text-align: left;">
현재 이 기능은 아직 널리 퍼진 기술이 아니므로 현대 Browser 외 에는 지원을 하지 않고 있습니다.</div>
<div style="text-align: left;">
그 이전의 Browser 사용자들을 위해서 hashchange Event 와 iframe을 이용하여 history 기능을 구현 하였습니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
pushStatus를 이용하게 되면, url이 변경 되지만 Page 가 replace되지 않으므로 간단히 List 위에 레이어를 띄울 수 있게 됩니다. 또한, 변경 된 url을 이용해 End Page link도 사용자에게 전달 할 수 있게 됩니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
이제 지원되지 않는 Browser들을 위한 Logic을 살펴보도록 하겠습니다.</div>
<div style="text-align: left;">
이제 IE 7 이하 의 "hashchange" 이벤트를 지원하지 않는 Browser와 지원하는 Browser 나뉘게 됩니다. (<a href="https://developer.mozilla.org/en/DOM/window.onhashchange">문서</a> 참조)</div>
<div style="text-align: left;">
일반적으로 화면이 변화 하지 않으면서도 사용자의 location 을 변경 하고 싶을 때 "#"hash를 사용하게 됩니다. 이를 이용한 방법이 제일 많이 사용되던 Ajax History 방식이였습니다.</div>
<div style="text-align: left;">
이것이 변경 되는 것을 인지 할 수 있는 Browser들은 단순히 Event Listen을 하게 두었고, 지원하지 않는 Browser의 경우(IE 7 이하) iframe에 현재 정보를 전달 하여, onLoad Event를 사용하도록 하였습니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
이것이 기본적인 History Manager가 동작을 하기 위한 기본 설정입니다.</div>
<div style="text-align: left;">
다음 Post에서는 이 설정을 가지고 실제로 어떻게 진행이 되는지 살펴보도록 하겠습니다.^_^</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
그럼~</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span class="Apple-style-span" style="font-family: monospace;"><span class="Apple-style-span" style="font-size: 14px; line-height: 20px; white-space: pre;"><br /></span></span></div>
Anonymoushttp://www.blogger.com/profile/09184050528083344912noreply@blogger.com0tag:blogger.com,1999:blog-6613325491251369016.post-87402713694680076472011-10-05T06:12:00.000-07:002011-10-05T06:13:52.968-07:00[Google Appengine] Flickr API 연동 하기<i style="background-color: white; color: #666666; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: x-small;">(주) 해당 내용은 제가 개인적으로 공부하는 것을 노트 하는 것이므로, 심도 깊은 내용을 기대하시긴 어렵습니다.</i><br />
<br />
Flickr 와 연동 되는 Python library는 상당히 많습니다.<br />
하지만, Google Appengine 에서 제약이 많이 있기 때문에 처음에 좀 당황했습니다.<br />
그러다 찾은 것이 <a href="http://www.geoffreyspear.com/gaeflickrlib/index.html">gaeflickrlib</a> 입니다.<br />
우선은 이 Library를 이용하고 이후에, 이 코드를 발전 시키던지 기존의 Library를 brach 해서 GAE에 맞게 만들어야 겠습니다.<br />
<br />
우선은 Flickr에서 API key를 획득해야 합니다.<br />
<a href="http://www.flickr.com/services/api/">http://www.flickr.com/services/api/</a><br />
이곳에 가면 한국어 버전도 있으니 이를 이용하면 될 듯 합니다.<br />
<br />
가장 중요한 것은 API key / secret 을 획득하기 위해 자신의 APP을 만듭니다.<br />
이후 API key / secret을 획득할 수 있습니다.<br />
<br />
이후, gaeflickrlib를 이용하여 하고자 하는 작업을 진행 하면 됩니다.<br />
<br />
예제는 다음과 같이 되어있습니다. (from <a href="http://packages.python.org/gaeflickrlib/started.html">Document</a>)<br />
<br />
<pre style="background-color: #eeffcc; border-bottom-color: rgb(170, 204, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: rgb(170, 204, 153); border-top-style: solid; border-top-width: 1px; color: #333333; line-height: 15px; overflow-x: auto; overflow-y: hidden; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;"><span class="kn" style="color: #007020; font-weight: bold;">from</span> <span class="nn" style="color: #0e84b5; font-weight: bold;">gaeflickrlib</span> <span class="kn" style="color: #007020; font-weight: bold;">import</span> <span class="n">GaeFlickrLib</span>
<span class="n">flickr</span> <span class="o" style="color: #666666;">=</span> <span class="n">GaeFlickrLib</span><span class="p">(</span><span class="n">api_key</span> <span class="o" style="color: #666666;">=</span> <span class="s" style="color: #4070a0;">'some key'</span><span class="p">,</span>
<span class="n">api_secret</span> <span class="o" style="color: #666666;">=</span> <span class="s" style="color: #4070a0;">'some secret'</span><span class="p">,</span>
<span class="n">token</span> <span class="o" style="color: #666666;">=</span> <span class="s" style="color: #4070a0;">'some user</span><span class="se" style="color: #4070a0; font-weight: bold;">\'</span><span class="s" style="color: #4070a0;">s credentials'</span><span class="p">)</span>
<span class="n">photos</span> <span class="o" style="color: #666666;">=</span> <span class="n">flickr</span><span class="o" style="color: #666666;">.</span><span class="n">photos_search</span><span class="p">(</span><span class="n">text</span> <span class="o" style="color: #666666;">=</span> <span class="s" style="color: #4070a0;">'...'</span><span class="p">)</span></pre>
<br />
다만 여기서 Token의 경우는 따로 받아서 진행 하는 경우에 설정 해주시면 되고, 할당을 받지 않은 경우는 api_key , api_secret 변수에 할당을 해주시면 작동은 됩니다. Token이 필요한 API의 경우에만 token을 설정 하면 됩니다.<br />
<br />
금일은 소개 수준의 연동만 적고, 이후에 심화적으로 접근 해보도록 하겠습니다.<br />
이 Library가 문서가 적어서 이거저것 만들어 봐야 겠네요. ^_^<br />
<br />
그럼~Anonymoushttp://www.blogger.com/profile/09184050528083344912noreply@blogger.com0tag:blogger.com,1999:blog-6613325491251369016.post-57878339254870021052011-09-30T20:42:00.000-07:002011-09-30T20:50:05.062-07:00[PyCharm] PyCharm에서 Google Appengine 사용하기<span class="Apple-style-span" style="background-color: white; color: #666666; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: xx-small;"><i>(주) 해당 내용은 제가 개인적으로 공부하는 것을 노트 하는 것이므로, 심도 깊은 내용을 기대하시긴 어렵습니다.</i></span><br />
<br />
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;">
<div style="text-align: left;">
근래에 intelliJ(<a href="http://www.jetbrains.com/idea/">http://www.jetbrains.com/idea/</a>)를 소개 받고부터는 JetBrains 제품들에 상당히 흥미를 느끼고 있었습니다. 이유는 WebStorm(<a href="http://www.jetbrains.com/webstorm/">http://www.jetbrains.com/webstorm/</a>)의 기능인데요. WebStorm은 HTML/CSS/Javascript의 기능을 따로 하나로 모은 솔루션이고, 언어의 특성에 따른 IDE에 WebStorm의 기능들이 들어가 있습니다.(intelliJ : Java / PHPStorm : PHP 등)</div>
</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;">
<div style="text-align: left;">
<br /></div>
</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;">
<div style="text-align: left;">
그러다보니, 자연스럽게 PyCharm(<a href="http://www.jetbrains.com/pycharm/">http://www.jetbrains.com/pycharm/</a>)에 관심을 가지게 되었고 50% 할인 혜택이 있어서 이번에 구입을 하게 되었습니다.(약 5만원) 개발툴을 돈 주고 구입한다는 사실을 잘 이해 못하시는 분들도 있겠지만.. :)</div>
</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;">
<div style="text-align: left;">
<br /></div>
</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;">
<div style="text-align: left;">
사설이 길었네요. 이제 어떻게 PyCharm에서 Google Appengine을 연동하는지 보도록 하겠습니다.(현재 버전 1.5.4) 참고로 제가 Mac만 사용하므로, Windows 사용자 분들은 약간 다를 수 있습니다.</div>
</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;">
<div style="text-align: left;">
<br /></div>
</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;">
<div style="text-align: left;">
우선 PyCharm은 IDE이므로 Project 단위로 진행이 됩니다.</div>
</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;">
<div style="text-align: left;">
그로인해, Project가 달라짐에 따라 항상 해주셔야 합니다.</div>
</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;">
<div style="text-align: left;">
그럼 우선 SDK 연동을 보도록 하겠습니다.</div>
</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;">
<div style="text-align: left;">
<br /></div>
</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;">
<div style="text-align: left;">
<span class="Apple-style-span" style="font-size: large;">Google Appengine SDK연동</span></div>
</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;">
</div>
<div style="background-color: white; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;">
<ol>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">메뉴의 설정(Preference)으로 들어갑니다. // 아마 윈도우 버전은 Project Setting일 것입니다.</span></span></li>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">그 중에 Google App Engine 메뉴를 들어가 Enable Google App Engine support를 체크 합니다.</span></span></li>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">이후 SDK directory를 찾아줘서 넣어줍니다.</span></span></li>
<ol>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">Mac의 경우는 GoogleAppEngineLuncher.app 안에 위치하고 있습니다.</span></span></li>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">중요한 점은 "dev-appserver.py"가 있는 디렉토리를 선택 해주셔야 하는 점입니다.</span></span></li>
</ol>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">이후 Account 설정을 해주세요.</span></span></li>
</ol>
<div>
<div style="text-align: left;">
<span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: large;"><span class="Apple-style-span" style="line-height: 19px;">Local Server 설정</span></span></div>
</div>
<div>
<ol>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">개인 개발 환경에서 Luncher를 이용해서 바로 진행 할 수가 있습니다.</span></span></li>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">상단의 메뉴에서 Run 부분에서 Edit Configurations 을 통해 Luncher를 설정하게 되어있습니다.</span></span></li>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">기본에 Default로 되어있는 것은 그냥 두셔도 됩니다만, 만약에 Default를 수정해서 사용하시고 싶은 분들은 수정하여 저장 해두고 사용하셔도 좋습니다. 하지만, 개인적으론 그런 경우는 거의 없는 듯 합니다.</span></span></li>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">Add New Configuration을 선택하여 "App Engine Server"를 선택 합니다.</span></span></li>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">그 다음, Name / Working directory / Port 등을 설정 합니다.</span></span></li>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">이 후 상단 메뉴에 자신이 생성한 Run이 생겼는지 확인 합니다.</span></span></li>
</ol>
<div style="text-align: left;">
<span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: large; line-height: 19px;">Deployment 설정</span></div>
</div>
<div>
<ol>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">이 것은 가장 간단 합니다.</span></span></li>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">상단 메뉴 > Tools > Google App Engine > Upload ... 을 선택 하시면 됩니다.</span></span></li>
<li style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">최초에는 Google Account를 입력하라고 하는 경우가 있습니다. 간단히 입력 해주시면 됩니다.</span></span></li>
</ol>
<div>
<span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;"><br /></span></span></div>
<div>
<span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: large;"><span class="Apple-style-span" style="line-height: 19px;">[참고이미지]</span></span></div>
<div>
<ul>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">SDK 연동 / Add New Configuration / Local Server 설정 후</span></span></li>
</ul>
</div>
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJmutbaKkDL8EBvuVv-yHwPtKKAahen22tAyhFqTAONLIv9y_YT2Tm7GcTRbgm_3chczChhEdknpWw1vQ0rp9o2YFibmkTDYn4cswPprC9gWMpVG2U-_2Q3IjQC4W0bTeBTQbPF7SWSig/s1600/Screen+Shot+2011-10-01+at+12.15.58+PM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="137" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJmutbaKkDL8EBvuVv-yHwPtKKAahen22tAyhFqTAONLIv9y_YT2Tm7GcTRbgm_3chczChhEdknpWw1vQ0rp9o2YFibmkTDYn4cswPprC9gWMpVG2U-_2Q3IjQC4W0bTeBTQbPF7SWSig/s640/Screen+Shot+2011-10-01+at+12.15.58+PM.png" width="640" /></a></div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="clear: left; float: left; margin-bottom: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHMTPTvO4Ts2yiY3E8aBdNatSNxa2zd8Ah2ecJxiIq9ax6Y33ACTUxlm-uXeCX8FwSxbIEi8D1cNhAjxSuKkQBi1alYFnsZEGLgoRJ4fm-Jx_CqNjA28mkSZZ1aELgAzAHqd0NjLMOSaQ/s1600/Screen+Shot+2011-10-01+at+12.27.34+PM.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHMTPTvO4Ts2yiY3E8aBdNatSNxa2zd8Ah2ecJxiIq9ax6Y33ACTUxlm-uXeCX8FwSxbIEi8D1cNhAjxSuKkQBi1alYFnsZEGLgoRJ4fm-Jx_CqNjA28mkSZZ1aELgAzAHqd0NjLMOSaQ/s1600/Screen+Shot+2011-10-01+at+12.27.34+PM.png" /></a></td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDlb1ZP35_OpVqzSeVc1GeorA23OL1JgYRZLSsB40AHwZ9n2X4IaQge6j4qf6FzzBc1BMVE0hHemeIIti-CDc9im70tSukfrpcntrI0kTLQ1IEtRu6l99bMMXfHLiS9Khlb-w5tAnKYzQ/s1600/Screen+Shot+2011-10-01+at+12.28.15+PM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="529" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDlb1ZP35_OpVqzSeVc1GeorA23OL1JgYRZLSsB40AHwZ9n2X4IaQge6j4qf6FzzBc1BMVE0hHemeIIti-CDc9im70tSukfrpcntrI0kTLQ1IEtRu6l99bMMXfHLiS9Khlb-w5tAnKYzQ/s640/Screen+Shot+2011-10-01+at+12.28.15+PM.png" width="640" /></a></div>
<div>
<span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;"><br /></span></span></div>
<div>
<span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;"></span></span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;"></span></span></div>
</div>
</div>
<div style="background-color: white; color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify;">
<br /></div>
Anonymoushttp://www.blogger.com/profile/09184050528083344912noreply@blogger.com0tag:blogger.com,1999:blog-6613325491251369016.post-79939848072333438502011-09-30T19:55:00.000-07:002011-09-30T20:07:02.478-07:00[Google Appengine] Application + Github<span class="Apple-style-span" style="background-color: white; color: #666666; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: xx-small;"><i>(주) 해당 내용은 제가 개인적으로 공부하는 것을 노트 하는 것이므로, 심도 깊은 내용을 기대하시긴 어렵습니다.</i></span><br />
<br />
<div style="text-align: justify;">
<span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">이 방법은 일반적이라기보단, 제가 선호하는 방법이므로 100% 이 방법이 맞다고 할 수는 없습니다.</span></span></div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;"><br /></span></span></div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">제가 프로젝트를 생성하는 순서는 다음과 같습니다.</span></span></div>
<div style="text-align: justify;">
<div>
<ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">Github에 새로운 Repository를 생성</span></span></li>
<ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;"><a href="https://github.com/">https://github.com/</a></span></span></li>
</ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">Tool들을 이용해 우선 Clone을 합니다.</span></span></li>
<ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">Terminal / shell 등을 이용.</span></span></li>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">githug:mac 을 사용(<a href="http://mac.github.com/">http://mac.github.com/</a>)</span></span></li>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">저같은 경우는 <a href="http://www.jetbrains.com/pycharm/">pycharm</a>을 사용하는 데, 이 IDE가 github를 지원 합니다.</span></span></li>
<ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">좋긴 한데 유료고 좀 비싼 편이라 적극 권장은 못하겠네요.</span></span></li>
</ol>
</ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">Google AppEngine Dashboard 로 가서 Application을 생성 합니다.</span></span></li>
<ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;"><a href="https://appengine.google.com/">https://appengine.google.com</a></span></span></li>
</ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">위에서 생성된 Application ID와 동일한 Directory를 Repository Root에 만듭니다.</span></span></li>
<ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">나중에 Deploy 할 때, 이 명칭을 사용하므로 잘 맞춰주셔야 합니다.</span></span></li>
</ol>
</ol>
<div>
<span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;"><br /></span></span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">그럼, 기존에 누군가 만들어둔 환경을 설정하는 방법은 어떻게 되는지 보겠습니다.</span></span></div>
</div>
<div>
<ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">우선 Github에서 생성된 Repository를 Sync 받습니다.</span></span></li>
<ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">위에서 언급된 툴을 이용하여 받으면 됩니다.</span></span></li>
</ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">IDE가 Google AppEngine Luncher를 지원하는 경우는 단순히 디렉토리만 맞춰주면 되더군요.</span></span></li>
<ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">이 부분은 <a href="http://www.jetbrains.com/pycharm/">pycharm</a>을 사용하시는 분들이 있다면 따로 언급하도록 하겠습니다.</span></span></li>
</ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">일반적으로는 Google AppEngine Luncher를 사용하실 것입니다.</span></span></li>
<ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">오른쪽 마우스를 클릭하게 되면 Add Existing... 이 있는데 이것을 위에서 생성된 Directory를 선택 하시면 됩니다.<br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNRIYGI3h5lQdiD1ZEndWrkkfUOZzTw4aMN5-XVfiDnN6DbPfZpkyAuFHATHmC_nqigiqYlqOFNz8FZB1usPudg1sQGvQnOF50RTMoLnWeo290q1kpl7Pr3z65kTQmKEywdLB5RPHdFlw/s1600/Screen+Shot+2011-10-01+at+11.52.44+AM.png" imageanchor="1" style="clear: left; font-family: 'Nanum Gothic'; font-size: medium; line-height: normal; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="193" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNRIYGI3h5lQdiD1ZEndWrkkfUOZzTw4aMN5-XVfiDnN6DbPfZpkyAuFHATHmC_nqigiqYlqOFNz8FZB1usPudg1sQGvQnOF50RTMoLnWeo290q1kpl7Pr3z65kTQmKEywdLB5RPHdFlw/s320/Screen+Shot+2011-10-01+at+11.52.44+AM.png" width="320" /></a></span></span></li>
</ol>
<li><span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">이후엔 개발하고 commit/publish 를 하면 됩니다. 참 쉽죠잉.</span></span></li>
</ol>
<div>
<span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;"><span class="Apple-style-span" style="font-size: 14px; line-height: 19px;">^_^)~씨유!</span></span></div>
<ol><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNRIYGI3h5lQdiD1ZEndWrkkfUOZzTw4aMN5-XVfiDnN6DbPfZpkyAuFHATHmC_nqigiqYlqOFNz8FZB1usPudg1sQGvQnOF50RTMoLnWeo290q1kpl7Pr3z65kTQmKEywdLB5RPHdFlw/s1600/Screen+Shot+2011-10-01+at+11.52.44+AM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNRIYGI3h5lQdiD1ZEndWrkkfUOZzTw4aMN5-XVfiDnN6DbPfZpkyAuFHATHmC_nqigiqYlqOFNz8FZB1usPudg1sQGvQnOF50RTMoLnWeo290q1kpl7Pr3z65kTQmKEywdLB5RPHdFlw/s1600/Screen+Shot+2011-10-01+at+11.52.44+AM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br /></a></div>
</ol>
</div>
</div>
Anonymoushttp://www.blogger.com/profile/09184050528083344912noreply@blogger.com0tag:blogger.com,1999:blog-6613325491251369016.post-44123053700294927672011-09-29T07:17:00.000-07:002011-09-29T07:18:09.218-07:00[Google Appengine] Datastore 사용 해보기<div style="text-align: justify;">
<span class="Apple-style-span" style="background-color: white; color: #666666; font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: xx-small;"><i>(주) 해당 내용은 제가 개인적으로 공부하는 것을 노트 하는 것이므로, 심도 깊은 내용을 기대하시긴 어렵습니다.</i></span><br />
<br />
이제 Web app개발에서 가장 중요한 Data를 다루는 방법을 테스트 해봤습니다.</div>
<div style="text-align: justify;">
Google Apps Engine에서는 Datastore를 이용하여 Database를 사용할 수 있습니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
재밌는 것은 Datastore Admin을 들어가도 Entity(DB의 Table정도 개념인 듯)를 생성을 할 수 없었습니다. 이것은 python의 경우 google.appengine.ext 의 db를 이용하여 진행해야 합니다.</div>
<div style="text-align: justify;">
이후, Entity를 구성하는 Class를 만들어서 이 Class.put()으로 Entity를 생성할 수 있습니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
또, 주의점은 Local 에서 진행 되는 Datastore와 Service에서 되는 Datastore가 분리 되어있으므로, Local에서 아무리 데이터를 집어 넣어도 Admin으로 조회를 할 수가 없습니다.(처음에 왜 안되나 한참 고민 했네요. Deploy 후 고민 해결)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
그럼 로컬에서 어떻게 볼 것인가?</div>
<div style="text-align: justify;">
<a href="http://localhost:8080/_ah/admin/">http://localhost:8080/_ah/admin/</a></div>
<div style="text-align: justify;">
에서 볼 수가 있습니다.(Port는 자신에게 맞게 변경해주세요)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Database의 Admin에 익숙하고 요즘 Database의 트렌드를 전혀 보고 있지 않다보니, 이러한 방식이 참 어색하긴 하네요. 흥미 있는 방법이긴 합니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
그 외에는 DB를 다루는 것과 비슷하게 GQL을 이용해서 진행 할 수도 있지만, 객체처럼 사용해서 진행 하는 방법에도 익숙해질 필요가 있을 듯 합니다.(복잡한 조건문이 아니면, Key를 이용해서 값을 가져올 수 있는 듯 하네요)</div>
<div style="text-align: justify;">
<br /></div>
Anonymoushttp://www.blogger.com/profile/09184050528083344912noreply@blogger.com0tag:blogger.com,1999:blog-6613325491251369016.post-43844150525058006602011-09-29T05:49:00.000-07:002011-09-29T07:18:17.793-07:00[Python] Modules 공부<span class="Apple-style-span" style="color: #666666; font-size: x-small;"><i>(주) 해당 내용은 제가 개인적으로 공부하는 것을 노트 하는 것이므로, 심도 깊은 내용을 기대하시긴 어렵습니다.</i></span><br />
<br />
뭔가 만들 때, 개발자는 어떻게 묶을까를 고민을 하게 되는데요.<br />
<br />
그럴 때, Python에서는 Modules라는 내용에서 이 부분을 해결 하고 있습니다.<br />
그 중 제가 유심하게 본 부분은 Package 영역입니다.<br />
(참고) <a href="http://docs.python.org/tutorial/modules.html#packages">http://docs.python.org/tutorial/modules.html#packages</a><br />
<br />
<blockquote>
<span class="Apple-style-span" style="background-color: white; font-family: sans-serif; font-size: 16px; line-height: 20px;">The </span><tt class="docutils literal" style="background-color: white; font-size: 0.95em; line-height: 20px; padding-bottom: 0px; padding-left: 1px; padding-right: 1px; padding-top: 0px; text-align: justify;"><span class="pre">__init__.py</span></tt><span class="Apple-style-span" style="background-color: white; font-family: sans-serif; font-size: 16px; line-height: 20px; text-align: justify;"> files are required to make Python treat the directories as containing packages; this is done to prevent directories with a common name, such as </span><tt class="docutils literal" style="background-color: white; font-size: 0.95em; line-height: 20px; padding-bottom: 0px; padding-left: 1px; padding-right: 1px; padding-top: 0px; text-align: justify;"><span class="pre">string</span></tt><span class="Apple-style-span" style="background-color: white; font-family: sans-serif; font-size: 16px; line-height: 20px; text-align: justify;">, from unintentionally hiding valid modules that occur later on the module search path. In the simplest case, </span><tt class="docutils literal" style="background-color: white; font-size: 0.95em; line-height: 20px; padding-bottom: 0px; padding-left: 1px; padding-right: 1px; padding-top: 0px; text-align: justify;"><span class="pre">__init__.py</span></tt><span class="Apple-style-span" style="background-color: white; font-family: sans-serif; font-size: 16px; line-height: 20px; text-align: justify;"> can just be an empty file, but it can also execute initialization code for the package or set the </span><tt class="docutils literal" style="background-color: white; font-size: 0.95em; line-height: 20px; padding-bottom: 0px; padding-left: 1px; padding-right: 1px; padding-top: 0px; text-align: justify;"><span class="pre">__all__</span></tt><span class="Apple-style-span" style="background-color: white; font-family: sans-serif; font-size: 16px; line-height: 20px; text-align: justify;"> variable, described later.</span></blockquote>
<br />
즉, __init__.py 파일이 있는 디렉토리는 Package로 인식하여, 그 이하의 모든 파일들을 import할 수가 있게 됩니다.<br />
또한, 디렉토리 명과 파일이 namespace의 역할을 하게 되는 듯 합니다.<br />
# python에서는 namespace가 따로 있는거 같은데, 이것과 관련이 있는지는 아직 못 봤습니다.<br />
<br />
예를 들자면, 다음과 같이 디렉토리가 구성 되면,<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTZ-vIDnKg2VtcRo44yusFkyAXcvrphFlm0q9hJw-nwgBrO4SxroooFaUvPuiIh9H9iwRfLiq57JtWGxc57ruA_wWvMIPEYP9HZjvucCCIQo45QY6kQuTb1CP9dOj1fgF-QJnusc5MX80/s1600/Screen+Shot+2011-09-29+at+9.45.21+PM.png" imageanchor="1" style="clear: left; display: inline !important; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTZ-vIDnKg2VtcRo44yusFkyAXcvrphFlm0q9hJw-nwgBrO4SxroooFaUvPuiIh9H9iwRfLiq57JtWGxc57ruA_wWvMIPEYP9HZjvucCCIQo45QY6kQuTb1CP9dOj1fgF-QJnusc5MX80/s1600/Screen+Shot+2011-09-29+at+9.45.21+PM.png" /></a><br />
<br />
<br />
<br />
<br />
<br />
아래와 같이 Package를 구성하게 됩니다.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRY75A1YbQ9_p717iV9VcGmjVp7BvuT3xLgGqTM_bVBkK_nBe1rjnvOazhOfuw3WQafZ3ZmjJUN1qm2yKDbGiOel_2Po6rMrGZqNjrIk1ekUPE2SKQ101JW5qeiLGmMZXkSSHH8JWPjQw/s1600/Screen+Shot+2011-09-29+at+9.45.35+PM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRY75A1YbQ9_p717iV9VcGmjVp7BvuT3xLgGqTM_bVBkK_nBe1rjnvOazhOfuw3WQafZ3ZmjJUN1qm2yKDbGiOel_2Po6rMrGZqNjrIk1ekUPE2SKQ101JW5qeiLGmMZXkSSHH8JWPjQw/s1600/Screen+Shot+2011-09-29+at+9.45.35+PM.png" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
이를 이용하면 좀 더 깔끔하게 모듈들을 구성할 수 있을 것으로 보입니다. :)</div>
Anonymoushttp://www.blogger.com/profile/09184050528083344912noreply@blogger.com0tag:blogger.com,1999:blog-6613325491251369016.post-30212557182121609102011-09-28T03:16:00.000-07:002011-09-28T03:17:28.890-07:00Blogger로 다시 돌아오기..<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br />
<br />
<br />
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
사람의 마음은 참 갈대 같기도 하지..</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
<div style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
Anonymoushttp://www.blogger.com/profile/09184050528083344912noreply@blogger.com0