Scientific Python 설치

http://stackoverflow.com/questions/22815673/cant-install-pyzmp-for-python-dependencies
http://stackoverflow.com/questions/6622490/ipython-no-readline-available-and-pip-install-readline-error

소개

  • http://www.scipy.org/
  • Python 언어를 수치해석, 과학기술용으로 사용하기 위해 필요한 라이브러리를 추가한 것이다.
  • 과학기술용 Python 환경을 좀 더 편하게 해 주는 환경을 패키지화해서 판매하는 상업적 서비스 업체들이 여럿 생겨났는데, 그 중에서 Enthought라는 회사에서 만드는 것을 많이 사용한다. 물론 다른 회사들 것도 많이들 사용한다.
  • Enthought사는 Canopy라는 통합 환경을 상품화해서 판매하는데, 이것은 기본적으로 오픈소스 Python 툴체인들을 필요한 것들만 쏙쏙 뽑아다가 미리 구성해 놓은 것으로 볼 수 있다. 물론 사용자 편의를 위해 자체적인 코드도 좀 들어가 있는 것 같다.
  • Canopy를 더 잘 만들기 위해, Enthought사는 오픈소스 쪽에도 기반 환경 구성을 위한 지원을 하는데 그것이 Scipy 쪽이다.
  • 따라서 무료 버전을 사용하려면 우리는 Scipy 환경을 구축하면 된다.
  • Scipy 자체는 하나의 Python 라이브러리이다. 행렬연산을 지원해주는 Numpy 라이브러리 위에 올라타서 더 많은 기능을 부여한 것으로 보인다.
  • Numpy, Scipy만 가지고는 부족하므로 몇가지 라이브러리를 더 붙여놨다. Pandas, Sympy, MatPlotLib, IPython 등이다.
  • 이렇게 구성한 환경을 여기서는 편의상 Sientific Python이라고 부르기로 한다.

장점

  • 범용 언어이므로, 이걸로 공학문제 해결에 간간이 써먹으면서 점차 익숙해지면, 나중에 다른 용도로도 써먹기가 쉽게 될 것이다.
  • 충분히 성숙된 생태계가 매우 빵빵하며, 최근에는 심지어 Java의 아성을 위협하는 수준까지 도달해 있기 때문에 아마 "내가 생각한 것"들은 이미 전부 다 존재하고 있을 것이다.
  • (비싼 가격과 구식 아키텍쳐로 인해서 최근 점차 쪼그라들고 있는) Matlab을 대체하는 가장 강력한 환경으로 보인다. 미국에서는 2008년부터 이미 Java를 제치고 대학교에서 가르치는 언어 랭킹 1위가 되었다.
  • 다양한 플랫폼에 이식되어 있다.
  • 중요한 오픈소스/상용 공학용 소프트웨어들은 매우 높은 비율로 Python 스크립트를 기본적으로 지원한다. 따라서 써먹을데가 많다.
  • 예를 들면, 로보틱스 학계에서 이제 거의 표준환경 처럼 인식되어가는 ROS는 기본적으로 Python 기반이다. FreeCAD, Paraview, Blender 같은 것들도 전부 Python Script를 기본으로 한다.
  • 배우기가 쉽다고 한다. (사실 동의하지는 않음)
  • 객체지향 개념을 배우기에 가장 쉽다고 한다. (사실 잘 모르겠음)

단점

  • 원래 90년대에 만들어진 언어이기 때문에, 3.x대 이전의 2.x대 버전까지는 유니코드를 기본으로 지원하지 못한다.
  • 또한 기본적으로 멀티코어 CPU 환경에 대응하지 않는다. (최근에는 여기에 대응하는 방법을 이리저리 개발해 나가고 있는 듯 하다.)
  • 문법에 일관성이 좀 떨어진다는 평이 있다. (영어 숙어 외우는 것 처럼 외워야 되는 예외적 구문들이 좀 있는 것 같다)
  • 기본적인 Python 구현체는 실행속도가 상당히 느린 편이다. (빠르게 구현한 것들도 있지만)
  • 2.x 버전의 문법과 3.x대의 문법이 상이하여 호환되지 않는다. 현재는 버전 이행의 과도기인데 아마 몇년 정도 더 혼란기를 거칠 것으로 생각된다.
  • '유행'에 대해서 말해보자면, Big Data 유행에 대해서는 잘 대응하는 것 처럼 보이는데, IOT 유행에 대해서는 대응이 용이하지 않아 보인다. 가벼운 임베디드에 환경 구축하기에는 좀 무겁게 된다. (VIPER 같은 구현체가 있기는 한데, 그래도 여전히 좀 무겁다고 생각된다.)
  • Matlab 사용자가 작업환경을 바꾸려면 학습기간이 필요하다. (Julia는 거의 학습기간이 필요치 않있다.)
  • 한국에서는 아직 Java 개발자가 대세이고, Python을 주력으로 사용하는 개발자들이 적은 편인 것 같다. (하지만 컴퓨터공학 이외의 과학기술분야에서는 Matlab 대체 개념으로 점차 많이들 쓰여 가는 듯 하다.)

배경지식

  • Linux 배포본에는 거의 100% 확률로 Python이 이미 설치되어 있을 것이다. Scientific Python을 구축하기 위해 몇가지 라이브러리를 추가로 설치해 주기만 하면 된다.
  • 편의성과 퍼포먼스로 따지면 Julia가 Python보다 훨씬 더 우월하다고 믿어진다. 하지만 Julia는 Python 만큼의 범용성과 방대한 생태계를 갖추지 못했기 때문에, Python 역시 무시하지 말고 가능하다면 익힐 필요가 있지 않나 생각된다.
  • Python도 처음 개발된지 오랜 시간이 흘렀기 때문에, 어느덧 최신 기술들에 비해 조금 뒤떨어진 감이 있다. 하지만 Python은 철저하게 완전히 오픈되어 있다는 장점을 살려, 아주 다양한 방식으로 자신의 단점을 없애고 최신기술을 반영하는 프로젝트들이 많이 나온다. 예를 들어 Pyston 프로젝트는 최신 LLVM 및 JIT 기술을 적용하여 새롭게 Python 구현체를 만드는 프로젝트이다. 이것이 구현된다면 기존 Python의 핵심적인 약점이 없어지게 될 것으로 생각된다.
  • Java의 경우에는 특정 대기업 1~2군데가 사실상 명세작성 및 구현체 개발의 주도권을 완전히 장악하고 있는데다가, 상업적 성격이 상대적으로 강하기 때문에 Python처럼 유연하게 다양한 방식으로 발전되어가는 모습과는 상반되는 듯 하다. (심지어 최근에는 구글과 소송해서 오라클이 이기는 바람에 더 암울해진 듯 하다.)
  • Python을 코딩하고 실행해 볼 수 있는 개발환경은, 뭐 여러가지 많이 있지만, 여기서는 LightTable 에디터를 주로 활용하는 것이 어떨까 한다. 고맙게도 LightTable을 깔면 기본적으로 Python Connection이 포함되어 있어서 새로 플러그인을 설치하는 것 조차 불필요하다. (단점은 몇가지 미구현되거나 약간 모자라는 점들이 간간이 보인다는 점이 있다. 답답하면 다른 환경을 쓰면 된다.)

설치 방법

  • 이곳을 참고한다.
    sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose