레이블이 SciPy인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SciPy인 게시물을 표시합니다. 모든 게시물 표시

2016년 3월 21일 월요일

파이썬의 라이브러리 NumPy + SciPy _____ 4

==========================================================
이 포스팅은 쓸모 없어진 포스팅입니다.
(NumPy + SciPy ____ 4 ~ NumPy + SciPy ____ 8)
해당 문제점은 Scipy 패키지를 빌드했던 툴(아마도 MS Visual Studio 201x)이 Windows XP를 지원하지 않아서 발생한 것으로 추측하고 있습니다.
이후의 포스팅에서 이 시행착오를 정리할 계획입니다. (아마도 NumPy + SciPy ____ 9)
==========================================================

배포판마저 실패하게 되자 뭔가 근본적인 문제가 있지 않나 생각하게 되었다.

이미 굉장히 많은 사람들이 사용하고 있는 패키지인데, 여러 소스를 통해 받아 보아도 동일하게 문제가 발생하고 있다면, 내가 아주 기본적인 무언가를 빼먹었거나 아니면 누구나 안되는 걸 가지고 골머리를 썪이고 있는게 아닐까?

보통은 혼자서 끄적여 보고, 시행착오도 거치고 난 후에 결론이 나오면 포스팅을 하곤 하는데, 이젠 귀차니즘 때문인지 두번 반복하는게 싫어졌고, 그래서 거의 직접 하면서 중간 중간 포스팅을 하고 있다.
그 때문인지 자꾸 옆으로 새거나 아무 쓸모 없는 내용들도 포함이 되고 있다.


배포판의 실패로 이번에는 scipy.org를 다시 살펴 보다가 등록된 문제점이 있는지 확인 해 보았다.



저기에서 ScyPy 항목으로 들어가서


너무 많길래 scipy.special로 검색해 보니, 비슷한 문제점이 등록되어 있다.

https://github.com/scipy/scipy/issues/5570

읽어보니 문제는 나와 동일한 상황.
이 사람도 크리스토프 골케의 버전을 받아서 사용했다고 한다.

여기에 누군가 댓글을 달았는데, MS의 런타임 라이브러리 문제같다면서 받아서 설치해보라고 한다.(아마도 MSVCRTxx.DLL 이런걸 말하는 듯)
그런데 문제점을 올린 사람이 이미 다 설치되어 있는 상황이라고 했으니 이 문제는 아닌 듯.

여기에 관리자가 이건 NumPy나 SciPy의 문제가 아니라 Third Party에서 배포한 버전에서 발생한 문제라면서 문제점을 Close 시켜 버렸다.


이게 직접적인 도움은 되지 않았지만, 암튼 같은 문제를 겪고 있는 사람이 있으며, 사용 환경에 따라 발생할 수 있는 문제라는 걸 알게 되었다.

먼저 _ufuncs.pyd에 대해 좀 더 살펴 보기로 했다.

이 파일을 에디터로 읽으면 바이너리 파일이라 알아 볼 수 없게 나온다.


하지만 맨 앞의 MZ는 MS의 실행파일에 붙는 일종의 표식이다.

이건 _ufuncs.pyd가 DLL일 수 있다는 의미.

그래서 몇가지 툴로 이 파일의 정체를 분석을 시도해 보다가 올리 디버거(OllyDbg)에서 불러들이는 과정에 이상한 메시지를 보게 되었다.


libifcoremd.dll을 찾을 수 없다?

저게 대체 뭔데?

다시 구글 검색.
https://www.google.co.kr/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=libifcoremd.dll



검색 결과 중 몇개를 찾아보니 Intel의 Fortran Comiler에서 사용하는 DLL이라는 정보.

처음엔 웬 Fortran? 이랬는데 생각해보니 과학 기술용 패키지를 빌드하는데 포트란을 사용했을지도 모르겠다는 생각이 들었다.


에라 모르겠다 하는 심정으로 Intel 사이트에서 Fortran용 실행 라이브러리를 받았다.
https://software.intel.com/en-us/articles/redistributable-libraries-of-the-intel-c-and-fortran-compiler-for-windows


이걸 설치하려다가.....정말 무슨 귀신이 씌운건지... 우연히 살펴보게 된 NumPy의 디렉토리.
NumPy/core 폴더에 이런 파일들이 있다.


중간즈음에 libxxxxx.dll들이 눈에 뜨인다.

이 폴더에 들어있는 모든 DLL 들을 확인해 보니 모두 Intel에서 만든 것이고, 이 DLL들을 모두 SciPy/special 폴더에 복사해 넣으면 O.K.

혹은 PATH에 있는 경로에 추가해도 될 거 같은데....개인적으로는 좀 찝찝하다.

=========================================================
이젠 지긋지긋해져서 그냥 마무리 하고 싶은데,

그래도 궁금한건 궁금한거니까...추가.

몇가지 더 확인을 해 보니, SciPy의 모듈 여러가지에서 에러가 발생하고 있다.

대부분은 동일한 문제로 _ufuncs를 로드하지 못해서 발생하는 것이다.

그렇다면 위에서 찾은 dll들을 따로 따로 복사할 수 없으니 한군데에 모아두고 사용하고 싶어진다.
그래서 MS-Windows에서 DLL을 탐색하는 범위를 찾아 보니 다음과 같았다.
  1. 현재 프로세스의 실행 모듈이 있는 디렉터리
  2. 현재 디렉터리
  3. Windows 시스템 디렉터리. GetSystemDirectory 함수가 이 디렉터리의 경로를 검색합니다.
  4. Windows 디렉터리. GetWindowsDirectory 함수가 이 디렉터리의 경로를 검색합니다.
  5. PATH 환경 변수에 나열된 디렉터리

그런데, python 디렉토리에 넣어두어도, 그 python 디렉토리를 PATH에 넣어두어도 문제가 발생한다.

심지어는 Windows\System32 디렉토리에 넣어도 안된다....ㅠ.ㅠ

대체 이건 무슨 조화인가?
=========================================================

2016년 3월 19일 토요일

파이썬의 라이브러리 NumPy + SciPy _____ 3

이도 저도 안되니 결국은 과학기술용 파이썬 배포판을 사용해 보기로 했다.

과학기술용 파이썬 배포판들


위의 링크들을 대충 살펴보고 가장 기대치가 낮은 것부터 시도해 보기로 한다.

왜 나는 항상 이런식일까?

처음에 가장 좋은 것을 선택하면, 한번에 성공하고, 시간도 절약되고, 얼마나 좋은가?

그런데 왜? 가장 허접해 보이는 걸 먼저 선택하고, 실망하고, 다음걸 선택하고.... 결국은 많은 시간과 노력을 소모하는 방법을 택하는 걸까?

가보지 않은 길을 만들지 않기 위해서?
최종 선택에 아무련 후회가 남지 않도록 하기 위해서?


아무튼....

첫번째 선택은 Pyzo.
http://www.pyzo.org/index.html


Pyzo는 Python3에 Conda라는 패키지 관리자와 iPython, 그리고 IEP라는 IDE를 포함하고 있다고 되어 있다.


Pyzo가 허접하다고 생각한 이유는 홈페이지의 모습도 그러하지만, 바로 저 배포 버전의 이름 때문이었다.

OS별, CPU별 구분이야 당연한 것이고, 그 외에는 달랑 2015a라는 것 하나 뿐이다.

하지만 그만큼 이 배포판은 제약이 적을거라는 생각도 할 수 있다.
왜냐하면 특정 패키지의 업그레이드를 각 사용자들이 자유로이 해야 할 테니까...

설치 방법을 보아도 그러함을 예상할 수 있는데, exe 파일의 installer도 있지만, zip 파일을 받아서 원하는 폴더에 풀어서 사용하는 방법도 있다고 하니 말이다.

다운로드 받은 Win32용 인스톨러는 148MB, Win32용 Zip파일은 213MB이다.


먼저 Zip 파일을 압축 풀면 대략 다음과 같이 나온다.


특별한 지시사항도 없다.
README를 읽어봐도 이상한 imageio에 관한 설명 뿐이다.

그래서 먼저 pyzo를 cmd에서 실행해 보았다.



그러자 위와 같은 화면이 나오는데, 이건 IDE라던 IEP로 보인다.

실행 중인 프로세스를 확인해 보니 다음과 같이 나온다.


이게 IEP가 아닌 Pyzo와 python 인터프리터가 실행 중.

어째서 IEP라는 IDE의 이름을 Pyzo라고 만든건지....


그래서 다음은 Pyzo_activate.exe를 실행.


몇개 묻고 끝.

환경 변수에 추가된것도 없음.

레지스트리 검색해보니 다음과 같은 것이 추가 되었음.(pyzo2015a로 검색)


Trolltech라는 회사/제품인데 이건 pyzo만 쓰는게 아니라, calibre라는 eBook 프로그램도 함께 사용중인 제품으로 보임.


그리고 iPython-qtconsole 실행.
실행 하고 시험삼아 문제가 되었던 SciPy를 import해 보았다.


이건 뭐지....역시나 같은 에러 메시지.

배포판에서도 문제가 있다는 말인가?


==========================================================
첫번째 포스팅의 마지막에 추가한 것과 마찬가지로, Pyzo에 포함된 Scipy 역시 Windows XP를 지원한지 않는 것으로 보인다.
Pyzo 사이트에서는 이에 대해 공식적으로 언급한 부분이 없는 듯이 보인다.
==========================================================

2016년 3월 16일 수요일

파이썬의 라이브러리 NumPy + SciPy _____ 2

앞서의 포스팅에서는 크리스토프 골케(?)라는 분이 미리 만들어 둔 NumPy와 SciPy 패키지의 인스톨 파일(whl)을 받아서 설치했는데,
무슨 이유에선지 예제 소스를 실행하는데 문제가 생겼다.
(SciPy/Special 모듈을 import하는 과정에서 에러 발생.)

에러 메시지를 이용해서 Python / SciPy / Google로 검색을 해 봤지만, 내 경우에 해당하는 것과 일치하는 검색 결과를 찾을 수는 없었다.


이 문제를 해결하는 가장 빠른 방법은...

과학 기술용 Python 배포판을 받아서 완전히 새로 설치해 주는 것.

하지만 이렇게 할 경우,
기존의 방법에서 문제가 발생한 원인을 알 수는 없으며,
새로운 패키지를 추가로 설치해야 하는 경우에 같은 종류의 문제가 다시 발생할 수 있으며,
그러면 역시 같은 어려움에 직면하여 같은 실수를 반복하게 될거라는....


일단 이번 포스팅에서는, 크리스토프 골케(?)의 패키지 설치파일에 문제가 있을 수 있다는 가정을 하고,
설치해 둔 NumPy와 SciPy를 제거한 후, 오리지널 파일을 이용해서 직접 설치해 보도록 할 것이다.

먼저 pip list로 설치된 패키지를 살펴보면,


NumPy 1.10.4와 SciPy 0.17.0이 설치되어 있음을 알 수 있다.


이제 pip uninstall scipy로 scipy를 제거한다.


제거할 파일의 목록을 보여주고 계속하겠냐고 묻는다.


y를 누르면 제거된다.


마찬가지 방법으로 NumPy도 제거


다시 pip list로 확인해 보면 NumPy와 SciPy가 제거된 것을 알 수 있다.



이제는 오리지널 NumPy와 SciPy를 받아보자.



이 링크에 보이는 numpy와 scipy를 클릭하면 다음과 같은 페이지가 나온다.

NumPy의 경우에는 파일의 목록이 보이는데, 최종 릴리즈 버전인 1.10.4의 zip 파일을 받았다.


SciPy의 경우에는 NumPy와는 다르게 엄청나게 긴 내용의 Release Note가 나온다.

이 Release Note의 마지막 부분에 가면 다운로드 받을 수 있는 파일들이 나오는데, 그 가운데 zip 파일을 받았다.



이제 다운로드 받은 NumPy와 SciPy의 압축을 풀고 안에 있는 INSTALL.txt를 읽어보고 따라 하면 된다.

NumPy와 SciPy의 INSTALL.txt를 읽어보면 공통적으로 초보자는 그냥 배포판을 받아서 사용할 것을 권장하고 있으며, C/C++ 컴파일러를 필요로 하고 있다.
SciPy의 경우에는 조금 더 복잡해서 필요로 하는 다른 패키지들이 꽤 되는 듯이 보였다.
Blas/Lapack이라는 것은 필수적이고 Sphinx와 Cython이라는 것도 경우에 따라서 필요하다고 한다.

Windows 환경에서 가장 딜레마가 되는 건 컴파일러인데, 여기에선 mingw나 MS Visual Studio를 사용해야 하는 것으로 보인다.

mingw가 gcc를 포팅한 것이지만, 어딘지 미심쩍어 보이기도 하는게 사실이다.
cygwin이나 DJGPP도 역시나 비슷비슷한 수준이 아닌가 싶기도 하고...

MS Compiler는 언제나 범용성에서는 2% 부족하게 느껴지기에.....


이 와중에 아까 사용한 pip의 패키지 제거 과정이 떠올랐다.

pip는 패키지를 다운로드, 설치, 업그레이드, 제거가 모두 가능하므로....

혹시나 하고 pip를 이용해서 직접 해 보았다.

pip install numpy
그냥 설치 완료....헐

그런데 다운로드 받은 파일의 이름을 보니 아까 크리스토프 골케(?)가 만든 파일과 이름이 조금 다르다.
크리스토프의 파일인 cp27-cp27m-win32....cp27m은 무슨 의미였던 걸까?

이어서 scipy도 시도.
pip install scipy

pip install scipy
NumPy와는 다르게 SciPy는 설치과정에서 에러를 뿌려댔다.

다운로드 받은 파일의 이름도 약간 미심쩍은게 cp27이나 win32와 같은 구분 요소가 없었다.
아마도 SciPy의 경우에는 시스템마다 개별적인 요소가 많아서 아예 소스로 다운 받아서 빌드해 나가는 것이 아닌가 싶다.

에러의 첫번째 부분에는 위에서 언급한 Blas/Lapack이 보인다.

    lapack_opt_info:
    openblas_lapack_info:
      NOT AVAILABLE

    lapack_mkl_info:
    mkl_info:
      NOT AVAILABLE
      NOT AVAILABLE

    atlas_3_10_threads_info:
      NOT AVAILABLE

    atlas_3_10_info:
      NOT AVAILABLE

    atlas_threads_info:
      NOT AVAILABLE

    atlas_info:
      NOT AVAILABLE

이 외에도 많은 라이브러리를 찾고 있는데, 이 모든 것이 필요한건지, 몇가지만 필요한건지도 모르겠다.

Blas/Lapack의 경우에는 Cygwin을 사용해야 하는 듯이 언급하고 있기도 하고....

제대로 한번 해결해 보겠다고 덤볐지만, 점점 산으로 가는 중인 듯...


일반적인 파이썬의 패키지는 pip install 로 설치하는 방법만 알면 될 듯 하고, 이 이상을 시도하는 것은 득보다 실이 많을 것 같아 포기. ㅠ.ㅠ

아마도 다음 포스팅은 과학 기술용 파이썬 배포판을 시도하는 것이 될 듯 하다.

파이썬의 라이브러리 NumPy + SciPy _____ 1

파이썬에는 유용한 라이브러리들이 많은 것으로 알고 있는데,

얼마전에 우연히 호기심이 발동한 NumPy와 SciPy를 사용하는 방법을 정리해 두고 싶었다.


이유는.....

자칫 잘못하면 미궁에 빠져서 시간을 낭비할 수도 있겠다 싶어서....


우선 사용환경은,

OS : MS-WindowsXP sp3
Python : 2.7.1 (이 버전이 적합하다는 의미가 아니라, 처음에 이 버전으로 시작했다는 뜻. 나중에 업그레이드 하게 된다.)


먼저 NumPy와 SciPy를 찾아보자.
왜 두개의 라이브러리가 종종 자주 언급되는지는 금방 알게 된다.
같은 곳에서 만들어서 배포하고 있기 때문...

http://www.scipy.org/




이제 좌측 상단의 Install을 클릭해서 들어가면,



Windows와 Mac 사용자들은 과학 기술용 Python 패키지를 통째로 받아서 설치하는게 젤 쉽다고 가르쳐준다.
몇개의 배포판들이 있으니 각 배포판의 특징을 보고 자신에게 적당한 것을 고르면 된다.

하지만, 난 이미 Python이 설치되어 있으니 이 방법은 패스.

설치에 관한 설명이 있는 이 페이지의 하단을 가면 이런 부분이 나온다.

필요한 패키지들별로 각각의 링크가 되어 있으니, 사용자가 자신의 구미에 맞게 원하는 것을 설치하라는 것.

그리고 마지막의 문구가 눈에 똭~ 들어 온다.

Windows용 : 크리스토프 골케(?)라는 사람이 Python용 패키지들을 미리 빌드해서 설치할 수 있게 제공한다는 것.


흠....아마도 Python용 패키지들은 그냥 다운로드 받아서 적당한 위치에 복사하는 게 아니라 특별한 설치 과정이 필요한가 보다.

혹시라도 컴파일이 필요하다고 하면 뭘 싸야할지도 고민이니까 이걸 가져다 쓰자....라고 생각....


해당 사이트는 http://www.lfd.uci.edu/~gohlke/pythonlibs/

전혀 꾸밈이 없는 페이지.....이런 거 오래 못가던데....



패키지가 너무 많은 관계로 반드시 Ctrl-F를 이용해서 찾아야 한다.

그리고 모든 패키지의 나열을 한 페이지에서 하고 있기 때문에 브라우저의 부하가 심하다.

성능이 좀 떨어지는 컴퓨터에서는 부담을 느낄 수 밖에 없는 상황이다.



먼저 NumPy의 경우엔, MKL(Math Kernel Library)와 vanilla 빌드의 두가지가 있는데, 설명을 읽어 보니 MKL.
Python 2.x(cp27)에 Win32(win32) 환경이니 맨 위의 것을 다운로드 받는다.


SciPy의 경우에도 cp27과 win32인 맨 위의 것을 다운로드 받는다.
SciPy를 사용하려면 NumPy가 있어야 한다고 되어 있다.


그런데 다운로드 받은 패키지의 확장자가 whl임을 알 수 있는데,
이걸 설치하려면 pip이라는 것이 필요하다고 되어 있다.


그런데 pip은 Python 2.7.9 이상에 포함되어 있다고....ㅠ.ㅠ


별 수 없이 Python 업데이트 감행.

현재 최신 버전은 Python 2.7.11이고 기존 버전을 지우지 않고 설치하면 기존 버전에 Overwrite한다.


이제 [Python 설치 디렉토리]/Script/pip.exe가 있으므로 pip install [whl파일]을 실행하면 된다.....였는데...

pip의 버전이 낮아서 설치가 안 됨.

다행히 바로 pip을 업그레이드 하는 명령을 알려 준다.
(지금은 까먹었다. python -m pip install pip --upgrade 이게 맞는지 긴가민가 알쏭달쏭)


그렇게하고 나서 NumPy와 SciPy 설치

(pip가 이미 Python의 폴더를 알고 있으므로 별도로 설치할 폴더를 지정해주고 그럴 필요는 없다.)

그렇게 우여 곡절 끝에 다 설치가 되었다.


설치된 NumPy와 SciPy는 [Python 설치 디렉토리]/Lib/site-packages/에 존재하고 있으니 궁금하면 살펴 보길.


이제 scipy의 홈페이지에서 Getting Started 페이지를 가서 예제 프로그램을 저장하고 실행해 보자.
http://www.scipy.org/getting-started.html




헉...에러....

여기에서부터 본격적인 고난의 시작이다.

난 이 문제를 풀기 위해 고생을 좀 하고 있다.

먼저....파이썬의 저 난삽한 에러 메시지를 보는 법부터...

파이썬의 메시지는 처리한 순서대로 나온다. (most recent call last)

그러니까

1) example.py의 9번째 줄에 있는
   from scipy import special, optimize
  를 처리하기 위해서
2) [Python 설치 디렉토리]/Lib/site-packages/scipy/special/__init__.py를 읽어 와서 처리하던 중,
3) 627번째 줄에 있는
   from ._ufuncs import *
  를 처리하려고 했는데,
4) 여기에서 에러가 발생. 에러의 원인은
  Import Error : DLL load failed: 지정된 프로시져를 찾을 수 없습니다.


그러면 실제 저 모듈이 존재하는 걸까?


__init__.py도 존재하고 _ufuncs.pyd도 존재한다.


그러면 에러가 발생한 소스는?
__init__.py

에러메시지 그대로다.

아직은 python에 대해 완전히 초보와 마찬가지라 대체 무엇이 문제인지 감을 잡지도 못하겠다.

*.py가 아닌 *.pyd는 무슨 파일일까?
*.py가 아닌 *.pyd를 import 할 수 있는 걸까?
에러메시지의 DLL이라는 건 또 무슨 뜻일까?


====================================================
참고 삼아서, 아주 구닥다리 컴에서 Ubuntu Linux 10.04를 사용 중이다.
이제는 더 이상 지원을 해 주지도 않는 버전이라 패키지들의 업데이트 불가능한 상황.
확인해 보니 여기에 Python 2.6.5와 NumPy 1.3.0, SciPy 0.7.0이 설치되어 있었다.

간단한 예제 프로그램은 문제 없이 돌아가고 있는 상황.

그래서 위에서 문제가된 부분이 어떻게 되어 있는지 확인 해 보았다.


버전이 낮아서 그런지, 문제가 되었던 _ufuncs.pyd나 비슷한 이름의 파일은 보이지 않는다.

또한 __init__.py에서도 _ufuncs를 import하지도 않는다.
==========================================================


==========================================================
import error가 발생한 원인은, 크리스토프 골케의 바이너리가 MS-Windows XP를 지원하지 않기 때문인 것으로 보인다.

Windows XP및 WINE과는 호환성 없음
아직까지도 MS-WIndows XP를 사용하고 있었고, 그 이후의 버전은 사용해 본 경험이 없어서 몰랐는데, 마이크로소프트사가 Visual Studio의 어떤 버전부터 Windows XP와의 호환성을 선택사항으로 바꾼 것을 알게 되었다.

특별히 관심을 가지지 않은 오픈소스 혹은 프리웨어 개발자들은 이 사실을 모르고, 새로운 Visual Studio로 빌드한 바이너리를 배포했고, 이런 바이너리들은 Windows XP에서는 실행되지 않게 되었다.(빌드시에 옵션을 선택해주면 실행이 가능한 것으로 알고 있지만, 디폴트 옵션이 아니라고 들었다.)

어쨌든 이 포스팅이 8회까지 진행된 후에서야 이런 결론을 내리게 되어 매우 허탈하지만, 애초에 저 문구를 보지 못했던 내 자신을 탓할 수 밖에 없지 않겠는가.
- 2016년 11월 13일
==========================================================