내가하려는 것은 다른 파이썬 버전이 설치되어 있거나 내 앱에 필요한 패키지가 없을 수있는 원격 서버로 내 코드를 전달하는 것입니다.
지금 당장은 이러한 이식성을 달성하기 위해 인터프리터와 코드를 사용하여 재배치 가능한 virtualenv를 구축해야합니다. 이 접근 방식에는 몇 가지 문제가 있으며 (예 --always-copy
: 예상대로 작동하지 않으므로 여러 라이브러리를 수동으로 virtualenv에 복사해야 함 ) 일반적으로 느립니다.
(이론적으로) 파이썬 자체를 정적으로 빌드 하는 방법 이 있습니다.
내 코드와 함께 인터프리터를 하나의 바이너리로 압축하고 내 애플리케이션을 모듈로 실행할 수 있는지 궁금합니다. 비슷한 것 : ./mypython -m myapp run
또는 ./mypython -m gunicorn -c ./gunicorn.conf myapp.wsgi:application
.
답변
문제를 해결하기 위해 갈 수있는 두 가지 방법이 있습니다.
- 고정, 또는 같은 정적 빌더를 사용
pyinstaller
하거나py2exe
- 다음을 사용하여 컴파일
cython
첫 번째 방법은 크로스 플랫폼 및 버전이 아니며 다른 답변에서 설명했기 때문에 두 번째 방법을 사용하여 수행하는 방법을 설명합니다. 또한 pyinstaller와 같은 프로그램을 사용하면 일반적으로 파일 크기가 커지며 cython을 사용하면 KB 크기의 파일이 생성됩니다.
먼저 cython
. 그런 다음, 파이썬 파일 (예를 들어 이름을 변경 test.py
로) .pyx
파일
sudo pip install cython
mv test.py test.pyx
그런 다음 cython
GCC와 함께 사용 하여 컴파일 할 수 있습니다 ( 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 정의를 사용합니다.
- 추가 라이브러리 (예 :)를 사용하는 경우를 사용
opencv
하여 디렉토리를 제공-L
한 다음-l
GCC 플래그에서 사용하는 라이브러리 이름을 지정해야 할 수 있습니다 . 이에 대한 자세한 내용은 GCC 플래그를 참조하십시오.
답변
답변
모든 라이브러리가 포함 된 Python 애플리케이션을 정적 바이너리로 컴파일 할 수있는 Freeze와 같은 것을 찾고있을 것입니다.
답변
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와 같은 패키지 관리자에 대한 액세스 권한이 있으면 모든 것이 훨씬 쉬워집니다.