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

2016년 3월 29일 화요일

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

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

앞서의 포스팅에서 파이썬이 모두 빌드되었다.
(처음엔 뭐가 부족하거나 문제가 있는게 아닌가 싶었는데 확인해 보니 모두 빌드 되어 있었음. 단지 빌드시에 나온 여러개의 워닝 메시지와 스킵한 프로젝트가 뭔지는 아직 미확인.)

빌드의 결과물은 PC/VS9.0 폴더에 있으며, 릴리즈 버전인 python.exe와 python27.dll, 디버그 버전인 python_d.exe와 python27_d.dll이다. (각 써드 파티의 라이브러리는 각 해당 폴더에 있음)

빌드된 python.

배포되는 Python 실행. 빌드버전과 CRC로 보이는 숫자가 있고 다음에 빌드 시각 2015년 12월 5일 20시 32분.

새로 빌드된 Python 실행. 버전 대신 default, 빌드 시각은 2016년 3월 28일 23시 18분.

Python 소스의 트리 구조

Python의 트리 구조

파이썬 소스의 폴더는 바이너리 배포 버전의 폴더와 약간은 다른데, 여기에서 고민이 생긴다.
완벽한 파이썬의 실행 환경이 갖추어져 있지 않으므로 바로 여기에서 디버깅을 하기엔 제약이 따른다는 것이다.

그러면 어떻게 디버깅을 해야 하는가?

1) 빌드된 디버그 버전의 바이너리를 원래의 환경에 복사해 넣고 디버깅을 한다?
소스와 바이너리의 위치가 다를 경우엔 어떻게 해야 하지?
gdb라면 간단하게 소스 위치만 지정하면 될텐데, Visual Studio의 IDE 환경에서도 이게 가능할까?

2) 소스 디렉토리에 필요한 나머지 파일들을 복사해 놓고 디버깅?
파이썬이 비록 인스톨러로 설치가 되긴 하지만, PATH에 경로를 지정하는 것 외에는 별다른 작업이 필요하지 않은 것 같던데? 아닌가?
그리고 Windows/system32 폴더에 python27.dll이 복사되어 있는 것도 보았다.



먼저 2번의 방법을 좀 더 생각해 보다가, 이런 의문이 떠 올랐다.
- 맨 처음의 NumPy와 SciPy를 설치할 때도 특별히 파이썬의 위치를 지정하지 않았지만 알아서 설치가 되었다. 이건 어떻게 가능했을까? (PATH를 보고? 설치 프로그램인 pip의 위치를 기준으로?)
: 이걸 새로 빌드된 환경에서 시험해 보려고 했는데, 아무리 찾아봐도 pip가 보이질 않는다.
 그냥 복사를 해서라도 해 볼까 하다가 걍 포기.

- 파이썬 인터프리터에서 import를 하면 해당 라이브러리를 잘 찾아낸다. 어떻게 가능한걸까?
: 구글에서 "python import dir order"로 검색을 하자 파이썬의 문서에서 "module-search-path" 부분을 찾아서 보여준다.
https://docs.python.org/2/tutorial/modules.html#the-module-search-path

위 링크에서 언급하는 sys.path를 직접 확인해 보았다.

Python의 sys.path

새로 빌드된 Python의 sys.path
환경변수인 PATH에 지정된 경로와는 상관없이, 현재 실행된 위치를 기반으로 내부의 탐색 경로가 바뀌는 것을 알 수 있다.


다시 위의 디버깅에서 1번의 방법에 대해 알아보니, 빌드시에 생성된 pdb에 소스의 위치 정보가 있으므로 바이너와 소스의 위치가 달라도 소스 레벨의 디버깅이 가능하다고 한다......정말일까?

그래서 빌드된 exe, dll, pdb 파일들을 모두 원래의 파이썬이 설치되어 있던 폴더에 복사했다. (원래의 exe와 dll은 다른 폴더에 피신 시켜 둠.)

새로 빌드한 파일들을 파이썬 설치 폴더에 복사

그런데.... 안된다.
Visual Studio에서 읽어 들여 보았으나, 디스어셈블 코드만 보여 줄 뿐, 소스를 찾지 못한다.
심지어 소스 폴더를 지정하는 옵션도 없다.


그래서....Visual Studio에서 프로젝트의 속성을 수정했다.
Python 프로젝트의 속성에서 Debugging의 Command 항목 수정

저기에 직접 디버깅할 실행 파일 이름을 지정해주면 된다.
Debugging 위의 General에서 Output Dir을 바꿔주는 것도 방법이긴 한데, 수정 - 빌드 - 디버깅 작업이 그리 많지 않을거라 생각하기에 최소한만 건드리는 방법을 택한 것이다.

그리고 Visual Studio에서 Start Debugging(F5)을 하면 다음과 같이 나온다.
여기에서 sys.path로 작업중인 디렉토리를 확인할 수 있다.
Start Debugging후에 sys.path로 작업중인 위치 확인.

그리고 그토록 알고자 했던 그 문제점이 재현되는지 확인하기 위해 "from scipy import special, optimize"를 입력하자...

기존의 문제점이 재현되는지 확인....어?
출력되는 메시지가 다르다. 에러는 에러인데....뭔가 이상하다.

아까 디버그와 릴리즈 버전의 바이너리를 모두 복사해 놓은 상태이기에, Visual Studio를 거치지 않고 바로 실행해서 다시 확인해 보았다.


먼저 디버그 버전의 경우..

디버그 버전
역시나 맨 처음과는 다른, Visual Studio를 거쳤을 때와 같은 에러 메시지.

그럼 릴리즈 버전의 경우는...
릴리즈 버전
애초에 보았던 것과 동일한 에러 메시지.

이런 x같은 경우를 보았나.

디버그 버전과 릴리즈 버전의 동작이 서로 다르단 말인가? 왓더뻐~어~억 쒜트 쒜~에~트

메시지를 차근 차근 확인해 본 결과, 릴리즈 버전은 numpy를 먼저 다 import하고 난 후에 scipy의 special을 import하는 중에 에러가 발생했고, 디버그 버전은 numpy를 import하는 과정에서부터 에러가 발생한 것으로 보인다.


침착하고.....
이 문제점이 내가 빌드하는 과정에서 발생한 것인지, 파이썬 자체의 소스 혹은 빌드 구성에 문제가 있는 것인지 알려면 빌드 로그를 모두 꼼꼼하게 확인해 보아야 한다.

그리고 애초에 문제가 되었던 부분에 대한 확인은, 당장은 릴리즈 버전으로 밖에 할 수 없는 상황이고, 이것도 메시지 출력을 이용하거나, 의심되는 부분을 바로 수정해서 확인해 보는 방법 뿐인 듯 하다.

단, 하나의 문제점 때문에 너무나 많은 과정을 거치고 있고, 자꾸 곁가지를 치면서 목표의식마저 흐릿해져 가고 있는 듯 하다.

디버그 버전과 릴리즈 버전의 문제를 확인하기 앞서서, 본래의 문제점을 먼저 해결하길 나 자신에게 바래 본다.

2016년 3월 28일 월요일

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

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

앞선 포스팅에서 언급한 방법 중, 첫번째인 파이썬 직접 빌드 시도.

파이썬의 창시자가 구글에서 일하고 있으며, 구글의 지원아래 업무시간의 일정 부분을 파이썬 개발에 할애하고 있다고.....누군가한테 들은 적이 있었다.

각설하고...파이썬 소스를 보면서 잠깐 보았던 빌드에 관한 문서를 보고, 빌드 해보고, 실패하고, 인터넷 검색하고, 다시 좌절하고, 귀찮아지고...아마 며칠간은 귀차니즘에 손도 안댔던 거 같다.

그래도 이제 고지가 코 앞이라...는 희망으로 다시 힘을 내 보자.


시작하기 전에 필요한 것들 미리 정리해 보았다.
===========================================

1) 파이썬 소스 : 나는 파이썬 2.7.11을 받아서 빌드하기로 했음. 파이썬 3.x는 Windows Vista 이상에서만 빌드되고 실행되니 이 점은 주의 할 것.

2) 컴파일러 : MS Visual Studio 2008 이상. Express Edition도 된다고 함.

3) SVN client : svn.exe 이름으로 실행되는 command line 버전으로 어디서나 호출 되도록 PATH에 경로 지정 필요.
나는 Tortoise SVN을 사용했는데, 아래 링크된 정성태님의 글에도 나와 있지만 설치시에 반드시 command line client tool을 설치하도록 변경 해 주어야 한다.
그리고 Tortoise SVN은 1.7.15가 Windows XP에 설치되는 마지막 버전이다.(1.9.x & 1.8.x는 설치 안되는 거 확인했음.)
TortoiseSVN 1.9.3

TortoiseSVN 1.9.3 설치 안 됨.ㅠㅠ

TortoiseSVN 1.7.15는 설치 됨. command line client tools는 기본적으로 선택되지 않음.

command line client tools를 설치하도록 바꿈.

Explorere와 연동되는 툴이라서 어지간한 프로그램들을 종료해야 설치 됨.

그러고도 시스템 재시작 필요.


4) Perl interpreter : perl.exe 이름으로 실행되는 command line 버전으로 PATH 경로 지정 필요. 가급적 최신 버전으로 할 것. Strawberry Perl 5.12.2를 이용했으나 에러 발생.
빌드 중 에러 발생. 대놓고 Active Perl 쓰라고 함.
다시 정정. 아마도 Pre-Build event에 뭔가 잘못이 있는 듯 함.
ActivePerl 5.22.1을 설치했으나 다음과 같이 에러 발생.
ActivePerl 설치 후에 build -r로 rebuild한 결과. 마찬가지 에러 발생.
그러나 메시지를 보면, 에러 없이 ssl 라이브러리가 완성되었다.
단지 메시지의 문제였을 뿐?

5) NASM (v2.10 이상) : nasm.exe 이름으로 실행되는 command line 버전으로 PATH 경로 지정 필요.



시작하기 전에 읽어보면 도움이 될 것 들.
=====================================

1) 직접 파이썬을 빌드해 본 경험자의 정리 된 자료
  정성태님의 Python 소스 코드를 Visual C++로 빌드하는 방법 (단, 이건 Python 3.x를 64 bit로 빌드하는 경우)
  저 버전의 파이썬은 조금 예전 버전 경우라 그런지 참 이상한 문제들로 문제를 겪고 있는 부분들이 보인다. 이 버전에서 같은 문제가 발생하지 않을 수 있으니 반드시 증상을 확인한 후에 참조할 것.

2) 파이선 소스에 포함 된 readme.txt 첫번째 : Python-2.7.11/PCBuild/readme.txt

3) 파이선 소스에 포함 된 readme.txt 두번째 : Python-2.7.11/PC/VS9.0/readme.txt



미리 알아두면 좋은 것들.
=======================

1) 파이썬은 시간을 거치면서 많은 기능의 확장이 있었고, 이들 기능 중 일부는 이미 독립적인 라이센스를 가진 소스들을 이용하고 있다. 이런 소스들이 파이썬을 빌드하는데 필요하긴 하지만, 무작정 파이썬 소스에 묶어버리기엔 많은 문제점들이 존재한다. (카피라이트, 라이센스, 버전 관리 등)
따라서 이들 써드 파티의 소스는 별도로 가져와서 빌드를 해야 한다.

2) 위에서 읽어보라고 한 문서를 보면 알겠지만, 문서가 알아보기 쉽거나 간결하지 못하다. 중언 부언에, 내가 원하는 경우를 딱 꼬집어 찾기도 어렵고, 끝까지 읽어 보고 필요한지 아닌지 직접 판단해야 한다.

3) 예전에는 지원했지만, 이제는 지원을 하지 않는다고 없애지 않고 남겨진 폴더들이 있다.
VC6 (Visaul C++ 6.0), VS7.1 (Visual Studio 2003), VS8.0 (Visual Studio 2005)는 더 이상 지원하지 않는다고 하니 쓸데없는 희망을 가지지 말자.



시작
====
명령 프롬프트에서 PC/VS9.0으로 이동해서 build -e를 실행.

이 과정을 통해서 써드파티의 소스를 다운로드 받고 각각을 빌드한다.

문서에서는 pcbuild.sln을 열어서 빌드를 하라고 되어 있지만, 문서를 조금 더 읽어보면 그럴 수 없는 이유들이 나온다.

즉, 초기에 써드파티 소스를 가져오는 과정과 특별히 먼저 빌드되어야 하는 하위 프로젝트들이 존재하기 때문이다.
(하위 프로젝트들 가운데 좀 까다로운 부분이 Open SSL이고, 또 Tcl/Tk 그리고 이를 이용하는 tkinter 부분이라고 되어 있다. 특히 Tcl/Tk 부분은 pcbuild.sln으로는 빌드나 클린이 안되니 반드시 build.bat를 한번은 거쳐야 한다고 한다.)

아마도 처음에 이 부분들이 빌드가 되고 나면, 나머지 파이썬 자체의 소스를 변경하고 빌드하는 과정은 Visual Studio 내에서 가능하리라 생각한다.

build -e, 먼저 받은 소스가 있는 경우에는 skip하고 빌드.

25개 프로젝트 성공, 실패 없음, skip 1개?

이제 각 폴더에 남겨진 BuildLog.htm을 확인해 보고 문제가 없는지 확인해봐야 함.

그리고 Skip된 프로젝트가 무엇인지도...

2014년 10월 17일 금요일

Vim 파일 저장 오류 __ 3

먼저 Vim의 소스를 직접 빌드하여 디버깅 해 보기로 결정.

vim의 소스는 다음 링크에서...
ftp://ftp.vim.org/pub/vim/pc

MS-DOS의 경우에는 vim 7.1이 최종 소스이므로 vim71src.zip을 다운로드 하면 된다.

소스를 풀어서 src 디렉토리를 살펴보면 INSTALLpc.txt라는 파일에 소스 빌드에 관한 안내가 되어 있다.

그 가운데 MS-DOS에 관한 부분.
INSTALLpc.txt
네모친 부분을 읽어 보면 Borland C++을 사용하는게 제일 속편할 듯...

그리고 부가적으로 spawno라는 라이브러리가 필요하다고 한다.
위에서는 simtel에서 다운로드 하라고 하는데, 이걸 만든 저자 Ralf Brown의 사이트를 본 적이 있어서 그곳에서 다운로드 받았다.

http://www.cs.cmu.edu/~ralf/files.html (예전에 MS-DOS 인터럽트를 정리해 둔 곳이라고 했던 URL. 이 페이지를 살펴보면 spawno 라이브러리를 찾을 수 있다.)
http://www.cs.cmu.edu/~ralf/pub-files/spwno413.zip (spawno 라이브러리)

project라는 서브 디렉토리 아래에 모두 풀어 놓았다.
디렉토리 모습
vim과 spawno 트리

소스를 빌드하기 위한 작업은,
1. 당연한 사항이지만 Borland C++을 설치해서 path 지정해 두기
2. src/Make_bc3.mak를 Makefile로 복사(또는 이름 바꾸기)
3. Makefile 수정하기
Makefile 수정
4. make

빌드는 성공적으로 완료.
디버깅을 위해 터보디버거를 이용해 구동.
하지만 ...메모리 부족 에러 발생ㅠㅠ
터보디버거 에러

고민하며 둘러보다 Makefile을 추가적으로 수정해야 함을 알게 됨.
주석에 씌어진 대로 80386 코드로 생성하도록 "-1-"을 "-3"으로, 소스 디버깅을 위해서 "-v" 옵션을 추가.
Makefile 추가 수정

하지만 결과는 마찬가지...

이제 해 볼 수 있는 방법은,
td386.exe라는 386용 터보디버거를 사용하는 방법과
소스에 메시지를 넣어서 메시지로 디버깅하는 방법.
전자는 터보디버거에 대한 매뉴얼을 좀 읽어 봐야 할 수 있을 것 같으니 후자를 먼저 해 보는 것이 좋을 듯...