파이썬 애플리케이션을 정적 바이너리로 컴파일하는 방법이 있습니까?
내가하려는 것은 다른 파이썬 버전이 설치되어 있거나 내 앱에 필요한 패키지가 없을 수있는 원격 서버로 내 코드를 전달하는 것입니다.
지금 당장 이러한 이식성을 달성하려면 인터프리터와 코드를 사용하여 재배치 가능한 virtualenv를 빌드해야합니다. 이 접근 방식에는 몇 가지 문제가 있으며 (예 --always-copy
: 예상대로 작동하지 않으므로 여러 라이브러리를 수동으로 virtualenv에 복사해야 함 ) 일반적으로 느립니다.
(이론적으로) 파이썬 자체를 정적으로 빌드 하는 방법 이 있습니다.
내 코드와 함께 인터프리터를 하나의 바이너리로 압축하고 내 애플리케이션을 모듈로 실행할 수 있는지 궁금합니다. 비슷한 것 : ./mypython -m myapp run
또는 ./mypython -m gunicorn -c ./gunicorn.conf myapp.wsgi:application
.
문제를 해결하기 위해 갈 수있는 두 가지 방법이 있습니다.
- freeze, pyinstaller 또는 py2exe와 같은 정적 빌더 사용
- cython을 사용하여 컴파일
첫 번째 방법은 플랫폼과 버전을 교차하지 않고 다른 답변에서 설명했기 때문에 두 번째 방법을 사용하여 수행하는 방법을 설명합니다. 또한 pyinstaller와 같은 프로그램을 사용하면 일반적으로 파일 크기가 커지고 cython을 사용하면 KB 크기의 파일이 생성됩니다.
먼저 cython을 설치하십시오. 그런 다음 Python 파일 (예 : test.py)의 이름을 pyx 파일로 바꿉니다.
$ sudo pip install cython
$ mv test.py test.pyx
그런 다음 GCC와 함께 cython을 사용하여 컴파일 할 수 있습니다 (Cython은 Python .pyx 파일에서 C 파일을 생성 한 다음 GCC가 C 파일을 컴파일합니다) ( https://stackoverflow.com/a/22040484/ 참조). 5714445 )
$ cython test.pyx --embed
$ gcc -Os -I /usr/include/python3.5m -o test test.c -lpython3.5m -lpthread -lm -lutil -ldl
참고 : Python 버전에 따라 마지막 명령을 변경해야 할 수도 있습니다. 사용중인 Python 버전을 확인하려면 다음을 사용하십시오.
$ python -V
이제 찾고있는 바이너리 파일 'test'가 있습니다.
참고 : Cython은 정적 메모리 할당에 C-Type 변수 정의를 사용하여 Python 프로그램 속도를 높이는 데 사용됩니다. 그러나 귀하의 경우에는 여전히 전통적인 Python 정의를 사용합니다.
참고 2 : 추가 라이브러리 (예 : opencv)를 사용하는 경우 -L을 사용하여 디렉토리를 제공 한 다음 GCC 플래그에서 -l을 사용하여 라이브러리 이름을 지정해야 할 수 있습니다. 이에 대한 자세한 내용은 GCC 플래그를 참조하십시오.
Nuitka 를 조사하는 것이 좋습니다 . 파이썬 소스 코드를 받아 C ++ API 호출로 변환합니다. 그런 다음 실행 가능한 바이너리 (Linux의 ELF)로 컴파일됩니다. 몇 년 동안 사용되어 왔으며 다양한 Python 버전을 지원합니다.
사용하면 성능이 향상 될 수도 있습니다. 추천합니다.
고정 옵션 :
그러나 대상 서버에는 원하는 환경이 있어야합니다.-> '생성'할 수 있어야합니다. 그렇지 않은 경우 환경에 맞게 소프트웨어를 빌드해야합니다.
ssh 액세스 권한이 있다고 가정하고 사용자 지정 버전의 Python을 virtualenv에 설치하는 방법에 대한 편리한 가이드를 찾았습니다. https://stackoverflow.com/a/5507373/5616110
virtualenv에서는 무엇이든 pip 설치할 수 있어야하며 sudo 권한에 대해 걱정할 필요가 없습니다. 물론 apt와 같은 패키지 관리자에 대한 액세스 권한이 있으면 모든 것이 훨씬 쉬워집니다.
모든 라이브러리가 포함 된 Python 애플리케이션을 정적 바이너리로 컴파일 할 수있는 Freeze와 같은 것을 찾고있을 것입니다.
Python 실행 파일을 고정하고 코드와 함께 제공하려면 빈 셸 앱에 포함합니다. 공식 문서 에서 응용 프로그램에 파이썬을 포함하는 방법에 대한 지침을 따르십시오 . 웹 페이지에서 제공하는 C 샘플 코드에서 직접 샘플 앱 빌드를 시작할 수 있습니다.
해당 프로그램이 포함 된 Python을 통해 Python 애플리케이션을 실행하도록합니다. 프로그램, 사용한 내장 파이썬 및 파이썬 프로그램을 발송하십시오. 그 프로그램을 실행하십시오.
Mac을 사용하는 경우 py2app을 사용하여 .app 번들을 생성 할 수 있으며,이를 더블 클릭하면 Django 앱이 시작됩니다.
https://moosystems.com/articles/14-distribute-django-app-as-native-desktop-app-01.html 에서 Django와 CherryPy를 번들로 묶는 방법을 설명했습니다.
이 기사에서는 pywebview를 사용하여 로컬 애플리케이션 창에 Django 사이트를 표시합니다.
'IT박스' 카테고리의 다른 글
내가 "git push"하면 git은 이제 "Create pull request for…"라고 말합니다. (0) | 2020.12.31 |
---|---|
Project.json 정의 dnx451 대 .dotnet (4.51) (0) | 2020.12.31 |
GCC가 결과를 사용하지 않고 libc의 sqrt ()를 호출하는 이유는 무엇입니까? (0) | 2020.12.31 |
MongoDB와 CouchDB는 완벽한 대체품입니까? (0) | 2020.12.31 |
비밀번호 안전성 검사 라이브러리 (0) | 2020.12.31 |