.. _translating-on-windows: Windows에서 번역(translation)하기 ================================= RPython은 Windows 2000부터 시작하는 Windows 플랫폼에서 지원됩니다. 다음 텍스트는 PyPy를 예시로 사용하여, RPython으로 작성된 인터프리터를 번역(translation)하는 방법에 대한 몇 가지 힌트를 제공합니다. pypy-c를 빌드하려면 작동하는 python 환경과 C 컴파일러가 필요합니다. CPython 2.6이나 2.7로 번역(translation)하는 것도 가능하지만, 아키텍처에 따라 실행하는 데 2~3배 정도 더 오래 걸리기 때문에 권장하는 방법은 아닙니다. 그러니 `our downloads`_\ 로 이동하여 최신 안정 버전을 받으십시오. 컴파일러로는 Microsoft Visual Studio\ 가 선호되지만, gcc\ 의 mingw32 포트로도 성공했다는 보고가 있습니다. .. _our downloads: https://www.pypy.org/download.html 어떤 컴파일러를 사용하고 어떻게 찾을 것인가? -------------------------------------------- Windows에서 Python용으로 무언가를 빌드할 때 처음 맞닥뜨리는 걸림돌은 컴파일러, 헤더, 라이브러리의 경로를 어떻게 찾아내느냐입니다. MSVC 컴파일러 도구는 독립형 빌드 도구부터 완전한 Visual Studio IDE 설치판까지 여러 버전을 설치할 수 있습니다. 이러한 사용 사례마다 컴파일러가 서로 다른 위치에 놓이며, 그 배치는 시간이 지나면서 계속 바뀝니다. stdlib에 위치한 ``distutils``\ 패키지는 이 탐색 코드를 넣기에 자연스러운 곳이지만, 파이썬 버전에 의해 고정되어 있습니다. pip으로 설치 가능한 ``setuptools``\ 는 새로운 도구에 맞춰 더 빠르게 움직일 수 있습니다. 따라서 PyPy를 빌드한 후 가장 먼저 일어나는 일은 pip을 설치하고 ``setuptools``\ 를 다운로드한 다음, stdlib에서 사용되는 cffi 모듈을 빌드하는 것입니다. PyPy에는 닭과 달걀 문제가 있습니다: 무언가를 컴파일하려면 ``setuptools``\ 가 필요하지만, ``setuptools``\ 를 얻으려면 ``_ssl``\ 을 필요로 하는 pip이 필요하고, ``_ssl``\ 은 컴파일되어야 합니다. 따라서 PyPy는 ``rpython/tools/setuptools_msvc.py``\ 에 ``msvc.py``\ 의 사본을 포함시켜 배포합니다. PyPy는 찾을 수 있는 가장 최신 MSVC 컴파일러로 컴파일하는 것을 선호하는데, 이는 사용 중인 exe를 컴파일하는 데 사용된 컴파일러로 컴파일하려는 CPython의 방침과는 다른 점입니다. Visual Studio를 사용한 PyPy 번역(translation) --------------------------------------------- 저희는 일반적으로 Visual Studio 2019, MSVC160을 사용하여 PyPy의 변환을 테스트합니다. 다른 구성도 동작할 수 있습니다. 최소한 Visual Studio 2012를 사용해야 합니다. 변환 스크립트가 컴파일러에 필요한 환경 변수를 알아서 설정하므로, 변환 전에 vcvars를 실행할 필요는 없습니다. 이 스크립트들은 찾을 수 있는 가장 최신 Visual Studio 컴파일러를 선택합니다. 또한 대상 아키텍처(32비트, 64비트)가 자동으로 선택됩니다. 32비트 빌드는 32비트 Python으로만 빌드할 수 있으며, 그 반대도 마찬가지입니다. 기본적으로 인터프리터는 Multi-threaded DLL(/MD) 런타임 환경을 사용하여 빌드됩니다. 다른 컴파일러(mingw 또는 다른 버전의 MSVC)를 사용하도록 이 탐지 방법을 재정의하려면\ 다음과 같이 하십시오: * 필요에 따라 PATH 및 기타 환경 변수를 설정합니다 * 사용할 컴파일러 실행 파일을 지정하려면 `CC` 환경 변수를 설정하십시오. 다른 버전의 MSVC라면 `SET CC=cl.exe`\ 를 사용하십시오. **참고:** RPython 번역기(translator)는 특수한 64비트 파이썬이 필요합니다, 아래를 참조하세요 Python과 C 컴파일러만 있으면 PyPy를 빌드할 수 있지만, 서드파티 라이브러리에 의존하는 일부 모듈은 빠지게 됩니다. 아래에서 이를 가져오고 빌드하는 방법을 확인하십시오. 더 많은 정보는 :doc:`비\ 윈도우 안내 `\ 를 참고하십시오. 특히 변환\ 은 RAM을 많이 소모한다는 점에 유의하십시오. 표준 변환\ 에는 약 4GB가 필요하므로 특별한 준비가 필요하거나, 다음 방법을 사용하여 변환 속도를 늦추는 대신 메모리 사용량을 줄일 수 있습니다.:: set PYPY_GC_MAX_DELTA=200MB pypy --jit loop_longevity=300 ../../rpython/bin/rpython -Ojit targetpypystandalone set PYPY_GC_MAX_DELTA= # This is done as part of translation PYTHONPATH=../.. ./pypy-c ../../lib_pypy/pypy_tools/build_cffi_imports.py 대규모 빌드를 위한 Windows 준비 ------------------------------- 일반적으로 32비트 프로그램은 Windows에서 메모리가 2GB로 제한됩니다. Windows 64비트에서는 이 제한을 거의 4GB까지 늘리는 것이 가능합니다. 다음을 실행해야 합니다:: \vc\vcvars.bat editbin /largeaddressaware translator.exe 여기서 ``translator.exe``\ 는 번역(translation)에 사용할 pypy.exe 또는 cpython.exe입니다. 이 작업은 PyPy 변환 과정에서 기본적으로 수행되므로, 별다른 조치 없이도 잘 동작할 것입니다. 외부 패키지 설치 ---------------- PyPy 내부에는 Windows용 빌드 의존성의 바이너리 컴파일 버전을 담고 있는 mercurial repository_\ 가 있습니다. `rpython` 설정 단계의 일환으로, 이 의존성들을 사용하기 위한 환경 변수가 설정됩니다. 이 저장소에는 복제 방법을 설명하는 README 파일과, 지원되는 각 플랫폼에 대한 브랜치가 있습니다. 여러분의 플랫폼과 PyPy 버전에 맞는 브랜치를 체크아웃하려면 `get_externals.py` 유틸리티를 실행할 수 있습니다. 이 단계를 놓치면 ``cannot open include file: 'ffi.h'``\ 와 같은 오류가 발생합니다. .. _repository: https://foss.heptapod.net/pypy/externals mingw 컴파일러 사용하기 ----------------------- --cc=mingw32 옵션을 사용하여 mingw 컴파일러로 RPython 프로그램을 컴파일할 수 있습니다. gcc.exe가 PATH에 있어야 합니다. -cc 플래그가 "ming"으로 시작하지 않으면, 유효한 gcc 파생 컴파일러의 이름이어야 합니다. 예를 들어 64비트 대상을 만드는 64비트 컴파일러의 경우 x86_64-w64-mingw32-gcc입니다. mingw 디렉터리 계층 구조에 없는 로컬 설치 패키지의 헤더 파일, lib 또는 dll, dll을 각각 가리키도록 CPATH, LIBRARY_PATH, PATH 환경 변수를 설정해야 할 것입니다. mingw 컴파일러를 위한 libffi ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _rawffi (및 ctypes) 모듈을 활성화하려면 mingw 버전의 libffi를 컴파일해야 합니다. 다음은 이를 수행하는 한 가지 방법으로, win64 또는 win32용으로 빌드를 시도할 수 있게 해줍니다: #. `mingw32 build`_\ 나 `mingw64 build`_\ 를 다운로드하여 압축을 풀어, 예를 들어 c:\mingw에 넣습니다 #. cygwin을 사용하지 않는다면, make, autoconf 도구 및 기타 유용한 것들을 제공하는 msys가 필요합니다. #. `msys for mingw`_\ 를 다운로드하여 압축을 해제합니다. 예를 들어 c:\msys에 압축을 해제합니다. #. c:\msys\etc\fstab 파일을 편집하여 c:\mingw\ 를 마운트합니다 #. `libffi source files`_\ 를 다운로드하고 압축을 해제한 뒤, 기본 디렉터리에 압축을 푸십시오. #. c:\msys\msys.bat 또는 cygwin 셸을 실행하십시오. 셸 도구가 포함된 셸 프롬프트이므로 더 편안하게 느껴질 것입니다. #. 쉘 안에서 libffi 디렉터리로 cd한 후 다음을 실행합니다:: sh ./configure make cp .libs/libffi-5.dll dll을 찾을 수 없고 libtool이 "정의되지 않은 심볼은 허용되지 않습니다(undefined symbols not allowed)"라는 경고를 표시했다면, 최상위 디렉터리에 있는 libffi Makefile을 수정해야 합니다. libffi_la_LDFLAGS 정의에 -no-undefined 플래그를 추가합니다. win64로 실험해보고 싶다면, 플래그와 함께 configure를 실행해야 합니다:: sh ./configure --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 mingw64 다운로드에 따라 이와 비슷한 것이 될 수 있습니다. mingw 컴파일러로 PyPy 해킹하기 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PyPy를 해킹한다는 것은 테스트를 실행한다는 것을 의미하므로, (번역(translation)과 달리) 해킹할 때 mingw 컴파일러를 지정할 방법이 필요합니다. 2012년 3월 기준으로, --cc는 pytest.py의 유효한 옵션이 아닙니다. 하지만 환경 변수 CC를 컴파일러 실행 파일로 설정하면, 테스트에서 이를 사용합니다. .. _mingw32 build: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Automated%20Builds .. _mingw64 build: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Automated%20Builds .. _msys for mingw: https://sourceforge.net/projects/mingw-w64/files/External%20binary%20packages%20(Win64%20hosted)/MSYS%20(32-bit)/ .. _libffi source files: https://sourceware.org/libffi/ 완전한 64비트 변환을 위해 무엇이 빠져 있는가 -------------------------------------------- 이는 이 주제에 대한 오래된 링크를 위한 자리표시자입니다. 저희는 :ref:`64비트 번역(translation) 문제를 해결했으며 `, 64비트 윈도우용 나이틀리 빌드도 있습니다.