[python] 파이썬 애플리케이션을 정적 바이너리로 컴파일하는 방법이 있습니까?

내가하려는 것은 다른 파이썬 버전이 설치되어 있거나 내 앱에 필요한 패키지가 없을 수있는 원격 서버로 내 코드를 전달하는 것입니다.

지금 당장은 이러한 이식성을 달성하기 위해 인터프리터와 코드를 사용하여 재배치 가능한 virtualenv를 구축해야합니다. 이 접근 방식에는 몇 가지 문제가 있으며 (예 --always-copy: 예상대로 작동하지 않으므로 여러 라이브러리를 수동으로 virtualenv에 복사해야 함 ) 일반적으로 느립니다.

(이론적으로) 파이썬 자체를 정적으로 빌드 하는 방법 이 있습니다.

내 코드와 함께 인터프리터를 하나의 바이너리로 압축하고 내 애플리케이션을 모듈로 실행할 수 있는지 궁금합니다. 비슷한 것 : ./mypython -m myapp run또는 ./mypython -m gunicorn -c ./gunicorn.conf myapp.wsgi:application.



답변

문제를 해결하기 위해 갈 수있는 두 가지 방법이 있습니다.

  1. 고정, 또는 같은 정적 빌더를 사용 pyinstaller하거나py2exe
  2. 다음을 사용하여 컴파일 cython

첫 번째 방법은 크로스 플랫폼 및 버전이 아니며 다른 답변에서 설명했기 때문에 두 번째 방법을 사용하여 수행하는 방법을 설명합니다. 또한 pyinstaller와 같은 프로그램을 사용하면 일반적으로 파일 크기가 커지며 cython을 사용하면 KB 크기의 파일이 생성됩니다.

먼저 cython. 그런 다음, 파이썬 파일 (예를 들어 이름을 변경 test.py로) .pyx파일

sudo pip install cython
mv test.py test.pyx

그런 다음 cythonGCC와 함께 사용 하여 컴파일 할 수 있습니다 ( cythonPython .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’가 있습니다.

참고할 기타 사항 :

  1. Cython은 정적 메모리 할당에 C-Type 변수 정의를 사용하여 Python 프로그램의 속도를 높이는 데 사용됩니다. 그러나 귀하의 경우에는 여전히 전통적인 Python 정의를 사용합니다.
  2. 추가 라이브러리 (예 :)를 사용하는 경우를 사용 opencv하여 디렉토리를 제공 -L한 다음 -lGCC 플래그에서 사용하는 라이브러리 이름을 지정해야 할 수 있습니다 . 이에 대한 자세한 내용은 GCC 플래그를 참조하십시오.


답변

Nuitka 를 조사하는 것이 좋습니다 . 파이썬 소스 코드를 받아 C ++ API 호출로 변환합니다. 그런 다음 실행 가능한 바이너리 (Linux의 ELF)로 컴파일됩니다. 몇 년 동안 사용되어 왔으며 다양한 Python 버전을 지원합니다.

사용하면 성능이 향상 될 수도 있습니다. 추천합니다.


답변

모든 라이브러리가 포함 된 Python 애플리케이션을 정적 바이너리로 컴파일 할 수있는 Freeze와 같은 것을 찾고있을 것입니다.

동결의 PyPi 페이지

Freeze의 Python Wiki 페이지

Freeze의 Sourceforge 페이지


답변

Mac을 사용하는 경우 py2app을 사용하여 .app 번들을 생성 할 수 있으며,이를 더블 클릭하면 Django 앱이 시작됩니다.

https://moosystems.com/articles/14-distribute-django-app-as-native-desktop-app-01.html 에서 Django와 CherryPy를 번들로 묶는 방법을 설명했습니다.

이 기사에서는 pywebview를 사용하여 로컬 애플리케이션 창에 Django 사이트를 표시합니다.


답변

고정 옵션 :

그러나 대상 서버에는 원하는 환경이 있어야합니다.-> ‘생성’할 수 있어야합니다. 그렇지 않은 경우 환경에 맞게 소프트웨어를 빌드해야합니다.

ssh 액세스 권한이 있다고 가정하고 사용자 지정 버전의 Python을 virtualenv에 설치하는 방법에 대한 편리한 가이드를 찾았습니다. https://stackoverflow.com/a/5507373/5616110

virtualenv에서는 무엇이든 pip 설치할 수 있어야하며 sudo 권한에 대해 걱정할 필요가 없습니다. 물론 apt와 같은 패키지 관리자에 대한 액세스 권한이 있으면 모든 것이 훨씬 쉬워집니다.


답변