'파이썬'에 해당되는 글 6건

  1. 2014.04.18 VS를 파이썬 IDE로 사용하기.
  2. 2013.10.23 두쪽 PDF를 한쪽 단위로 나누기.



C++ native 개발자에게도 생산성 문제때문에 스크립트 언어를 하나 정도 배워두면 좋다.

나는 개인적으로 파이썬을 선호한다. 기존 레거시 시스템들 중에서는 Perl이나 Erlang 등을 사용하 것들이 있지만, 최근 새롭게 시작하는 프로젝트에서 스크립트 언어를 선택하라면 파이썬을 선택하겠다.

특히 2.7 버전. 다행히 2.7 버전의 지원은 2020년까지로 연장되었다.


여하튼 파이썬으로 개발할 때 내가 바라는 파이썬 IDE의 기능은 다음과 같다.

  • breakpoint
  • syntax highlighting
  • callstack
  • 인텔리센스 기능(있으면 좋은 기능)

개인적으로 몇가지 IDE를 사용해 보았지만, 그닥 만족스러운 결과를 얻지는 못했다.
그래도 회사에서는 Komodo를 구매해서 사용하였다.
최근 다시 관련 도구를 사용하면서 PTVS(Python Tools for Visual Studio)가 2.x로 버전업한 것을 알게되었다.

PTVS는 생각보다 많은 기능을 제공한다.
  • CPython 이외에도 윈도우라서 IronPython까지 지원한다.
  • 장고앱 개발 가능.
  • 성능 프로파일링.
  • 원격 리눅스/맥 디버깅을 지원한다고 한다.(테스트 해보지 못했다.)
  • VirtualEnv를 지원하여 특정 버전의 파이썬으로 작성중인 코드를 테스트할 수 있다.

IPython 코드를 실행한 VSIPython 코드를 실행한 VS




나의 조합은 VS + PTVS+Anaconda이다.
  • PTVS 홈페이지: http://pytools.codeplex.com/
  • Anaconda: https://store.continuum.io/cshop/anaconda/
    • 아나콘다 패키지는 [User's Home]\Anaconda 폴더에 설치된다. 
    • conda.bat를 이용하여 conda와 ipython을 최신 버전으로 업데이트 한다. conda.bat는 Scripts 폴더에 있다.
      • conda update conda 실행
      • conda update ipython 실행
  • VS를 실행한 후 Tools>Options>Python Tools>Environment Options에서 방금 설치한 아나콘다의 파이썬 경로를 추가한다.
  • IPython을 사용하고 싶다면 Interactive Options에서 Interactive Mode를 Standard가 아닌 IPython으로 변경한다.
  • 참고) IronPython: http://ironpython.net/

몇가지 핫키
  • 파이썬 환경 창: Ctrl+K, `
  • 인터랙티브 파이썬 창: Alt+I
  • 선택된 코드를 인터랙티브 파이썬 창으로 보내기: Ctrl+E, Ctrl+E
  • 편집창 코드를 인터랙티브 파이썬 창에서 실행하기: Shift+Alt+F5

기타 관련 문서 


Posted by NeoZest



책읽기에 재미를 붙이 큰 아이의  생일 선물로 킨들 화이트페이퍼를 구입했다.

그동안 가지고 있던 PDF파일들을 킨들에 넣어주려 했는데, 아뿔사. 아이가 읽을 수 있는 PDF 파일들 대부분이 두쪽이 한장, 즉 왼쪽과 오른쪽으로 나뉘어지는 구조였다.

랜드스케이프모드에서 읽어보려고 했는데 글자가 너무 작았다.  결국  PDF를 반으로 나누어 하나의 파일로 만들어줄 도구가 필요했다. 이래저래 알아보다가 크랙을 하거나 쉐어웨어를 사용하기 보다는 그냥 직접 파이썬으로 작은 스크립트를 만들어 사용하기로 했다.


뭐 도움이 될까 해서 스크립트를 공개해둔다.

사실 가장 중요한 PDF파일 핸들링은 파이썬으로 작성된 pyPDF 모듈을 설치하여 사용하였다.

PyPdf : http://pybrary.net/pyPdf/


불필요한 페이지를 삭제하는 스크립트도 작성했지만, 나중에 좀 더 수정을 해봐야 겠다.


import copy
import sys
from os import path
from pyPdf import PdfFileWriter, PdfFileReader

def devidePages(filepath) :
	dirname  = path.dirname(filepath)
	filename = path.splitext(path.basename(filepath))[0]
	inPdf = PdfFileReader(file(filepath, "rb"))
	outPdf = PdfFileWriter()
	for page in [inPdf.getPage(i) for i in range(0, inPdf.getNumPages())] :
		rpage = copy.copy(page)
		(w, h) = page.mediaBox.upperRight
		page.mediaBox.upperRight = (w/2, h)
		rpage.mediaBox.upperLeft = (w/2, h)
		outPdf.addPage(page)
		outPdf.addPage(rpage)

	outStream = file(path.join(dirname, filename + "_out.pdf"), "wb")
	outPdf.write(outStream)
	outStream.close()

if __name__ == "__main__":
	if len(sys.argv) != 2 :
		print "Usage : " + path.basename(sys.argv[0]) + " [input pdf filepath]"
	else :
		if path.isfile(sys.argv[1]) :
			devidePages(sys.argv[1])
		else :
			print " Error : " + sys.argv[1] + " is not found."
Posted by NeoZest