[python] 다른 사람들이 내 파이썬 프로그램을 실행할 수 있도록하는 강력한 방법

GitHub에 파이썬 프로그램을 설치하고 다른 사람들이 여러 운영 체제가있는 컴퓨터에서 다운로드하여 실행하도록하고 싶습니다. 나는 파이썬에 비교적 익숙하지 않지만 포함 된 모든 모듈의 여러 버전을 함께 사용하는 것이 문제가 될 수 있음을 알기에 충분히 사용했습니다. 방금 requirements.txt( pipreqs명령어를 사용하여 생성 하고 배포 한) 사용법을 발견 pip install -r /path/to/requirements.txt했지만 requirements.txt실제로 어떤 버전의 파이썬이 사용되는지 명시하지 않았으므로 분명히 완전한 솔루션이 아닙니다. 그래서 내 질문은 : 내 프로젝트를 다운로드하는 누군가가 실제로 가능한 가장 적은 문제로 프로젝트를 실행할 수 있도록하기 위해 어떤 사양 / 파일 / 뭔가 다른 것이 필요한지입니다.

편집 : 내 계획은 답이 가장 많은 답변을 얻은 사람에 의해 안내되었습니다. 그러나 지금까지 4 번의 답변과 127 번의 조회 후에는 단 하나의 답변도 하나의 공감대를 갖지 못했습니다. 답변 중 일부가 좋지 않은 경우, 좋지 않은지에 대한 의견을 보는 것이 유용합니다 .



답변

setup.py파일 설정을 고려 했습니까 ? 모든 설정을 한곳에 묶는 편리한 방법입니다. 따라서 사용자는 A) 리포지토리를 복제하고 B) pip install .실행하여setup.py

이것에 대한 훌륭한 스택 토론이 있습니다.

요청 담당자가 작성한 핸들 예제는 물론입니다.

여기에는 대부분의 사용 사례가 포함됩니다. 이제 실제로 배포 할 수 있게 하려면 공식 배포 허브 인 PyPi에서 설정해야합니다 .

프로그램을 “독립형”으로 만드는 방법을 묻는다면 하나의 크기가 모든 것에 맞지는 않습니다. 코드로 수행하는 작업에 따라 다릅니다. 특정 코드가 해당 OS 등과 어떻게 상호 작용하는지 조사해야합니다.


답변

이 작업을 수행하는 방법에는 여러 가지, 여러 가지, 여러 가지, 여러 가지가 있습니다. 나는 각각의 원리를 뛰어 넘을 것이고 그것은 유스 케이스입니다.

1. 파이썬 환경

이를 수행하는 방법에는 여러 가지가 있습니다. pipenv, 콘다 requirments.txt

이 중 일부를 사용하면 파이썬 버전을 지정할 수 있습니다. 다른 사람들과 함께 작동하는 파이썬 버전의 범위를 지정하십시오. 예를 들어 python 3.7을 사용하는 경우 3.6을 지원하지 않을 것입니다. 하나 또는 두 개의 사소한 변경 사항 만 있습니다. 3.8도 잘 작동합니다.

또 다른 유사한 방법은 setup.py입니다. 이들은 일반적으로 가져 오기 / 명령 줄 사용을 위해 PyInstaller (아래에서 언급 할 다른 솔루션) 또는 numpy, wxPython 또는 PyQt5 등과 같은 라이브러리를 배포하는 데 사용됩니다. 파이썬 패키징 안내서는 매우 유용하며, 많은 튜토리얼이 있습니다. (google python setup.py tutorial)이 파일에서 요구 사항을 지정할 수도 있습니다.

2. 컨테이너

도 커가 큰 것입니다. 당신이 그것을 듣지 않으면 나는 놀랄 것이다. 요약에 대한 간단한 구글 이 이것으로 나옵니다 .

그렇다면 왜 모두가 컨테이너와 Docker를 좋아합니까? Parallels의 서버 가상화 CTO이자 선도적 인 Linux 커널 개발자 인 James Bottomley는 Hyper-V, KVM 및 Xen과 같은 VM 하이퍼 바이저는 모두 “가상 하드웨어 에뮬레이션을 기반으로합니다. 시스템 요구 사항.”

그러나 컨테이너는 공유 운영 체제를 사용합니다. 이는 시스템 리소스 측면에서 하이퍼 바이저보다 훨씬 효율적이라는 것을 의미합니다. 컨테이너는 하드웨어를 가상화하는 대신 단일 Linux 인스턴스 위에 배치됩니다. 즉, “쓸모없는 99.9 %의 VM 정크를 남겨두고 응용 프로그램이 포함 된 작고 깔끔한 캡슐을 남길 수 있습니다.”

그것은 당신을 위해 그것을 요약해야합니다. (컨테이너를위한 특정 OS는 필요하지 않습니다.)

실행 파일

글을 쓸 때이를 수행하는 두 가지 주요 도구가 있습니다. PyInstaller 및 cx_Freeze. 둘 다 적극적으로 개발되었습니다. 둘 다 오픈 소스입니다.

스크립트를 가져 와서 도구가 스크립트를 바이트 코드로 컴파일하고 가져 오기를 찾은 다음 복사하여 최종 사용자가 파이썬없이 대상 시스템에서 스크립트를 실행하는 이식 가능한 Python 환경을 만듭니다.

개인적으로 PyInstaller를 선호합니다. 저는 개발자 중 한 사람입니다. PyInstaller는 명령 줄 스크립트를 통해 모든 기능을 제공하며 생각할 수있는 대부분의 라이브러리를 지원하며 더 많은 기능을 지원하도록 확장 할 수 있습니다. cx_Freeze에는 설정 스크립트가 필요합니다.

두 도구 모두 Windows, Linux, macOS 등을 지원합니다. PyInstaller는 단일 파일 exe 또는 하나의 폴더 번들을 작성할 수 있지만 cx_Freeze는 하나의 폴더 번들 만 지원합니다. PyInstaller 3.6은 python 2.7 및 3.5-3.7을 지원 하지만 4.0 python 2를 지원 하지 않습니다 . cx_Freeze는 마지막 주요 릴리스 (6.0 생각)에서 python 2 지원을 중단했습니다.

어쨌든 도구 기능에 대해서는 충분합니다. 당신은 그들 자신을 볼 수 있습니다. (자세한 정보는 https://pyinstaller.orghttps://cx-freeze.readthedocs.io 참조 )

이 배포 방법을 사용하는 경우 일반적으로 GitHub 리포지토리에 소스 코드를 제공하고 다운로드 할 준비가 된 몇 개의 exe (각 플랫폼마다 하나씩)와 코드를 실행 파일로 작성하는 방법에 대한 지침을 제공합니다.


답변

내가 지금까지 사용한 가장 좋은 도구는 Pipenv 입니다. 개발자를위한 전체 pip + virtualenv 워크 플로우를 통합하고 단순화 할뿐만 아니라 다른 사람들이 프로젝트를 실행할 때 모든 의존성 (파이썬 자체 포함) 의 정확한 버전이 충족되도록 보장 합니다.

프로젝트 웹 사이트는 도구 사용 방법을 설명하는 데 꽤 효과적이지만 완벽을 기하기 위해 여기에 간단한 설명을 드리겠습니다.

Pipenv를 설치 한 후 (예 :을 실행하면 pip install --user pipenv) 프로젝트 디렉토리로 이동하여 실행할 수 pipenv --python 3.7있으므로 Pipenv는 프로젝트의 새 virtualenv를 작성하고 Pipfile 및 Pipfile.lock을 작성합니다 (나중에 자세히 설명 함). . 계속 진행하면 pipenv install -r requirements.txt모든 패키지가 설치됩니다. 이제 pipenv shell새로운 virtualenv를 활성화하거나 pipenv run your_main_file.py간단히 프로젝트를 실행하기 위해 수행 할 수 있습니다.

이제 Pipfile의 내용을 살펴 보겠습니다. 다음과 비슷한 것이어야합니다.

[packages]
Django = "*"
djangorestframework = "*"
iso8601 = "*"
graypy = "*"
whitenoise = "*"

[requires]
python_version = "3.7"

이 파일에는 프로젝트의 종속성에 대한 사람이 읽을 수있는 사양이 있습니다 (Python 버전도 지정 함). requirements.txt에 고정 된 버전이 있으면 Pipfile에도 고정 버전이있을 수 있지만 정확한 버전은 Pipfile.lock에 저장되므로 안전하게 와일드 카드를 사용할 수 있습니다. 이제 pipenv update종속성을 업데이트하는 것과 같은 것을 실행할 수 있으며 Vip에 Pipfile 및 Pipfile.lock을 커밋하는 것을 잊지 마십시오.

일단 사람들이 프로젝트를 복제하면, 필요한 것은 실행 pipenv install되고 Pipenv는 나머지를 처리합니다 (정확한 Python 버전을 설치할 수도 있습니다).

이것이 도움이 되었기를 바랍니다. 저는 Pipenv와 관련이 없으며이 멋진 도구를 공유하고 싶었습니다.


답변

프로그램이 GUI에 관한 것이 아니거나 웹 GUI가있는 경우 Google Colaboratory를 사용하여 코드를 공유 할 수 있습니다.

https://colab.research.google.com/

누구나 같은 환경에서 실행할 수 있습니다. 설치할 필요가 없습니다.


답변

모든 파이썬 스크립트를 하나의 실행 파일로 변환하면 도움이 될 수 있다면 아래의 대답이 도움이 될 것입니다 …

나는 3 년 이래로 순수한 파이썬으로 대형 데스크탑 응용 프로그램을 개발해 왔습니다. pyqt 라이브러리 (QT C ++ 프레임 워크의 Python 바인딩) 위에 빌드 된 GUI 기반 도구입니다.

현재 ” py2exe “패키징 라이브러리를 사용하고 있습니다. distutils 확장 프로그램으로 Python 스크립트에서 독립형 Windows 실행 프로그램 (32 비트 및 64 비트)을 빌드 할 수 있습니다. 당신이해야 할 일은 :

  1. py2exe 설치 : ‘pip install py2exe’

  2. setup.py 스크립트 작성 : 최종 EXE의 컨텐츠 (이름, 아이콘, 작성자, 데이터 파일, 공유 라이브러리 등)를 지정하는 데 사용됩니다.

  3. 실행 : python setup.py py2exe

또한 “Inno Setup” 소프트웨어를 사용하여 설치 프로그램을 생성합니다 : 바로 가기 생성, 환경 변수, 아이콘 설정 등 …


답변

파이썬으로 도커를 사용할 수 있다고 생각합니다 https://github.com/celery/celery/tree/master/docker

친절하게 파일을 따르십시오. 파이썬 스크립트를 위해 도커 파일을 만드는 방법을 알아낼 수 있다고 생각합니다!


답변

다른 답변에서 누락되었으므로 완전히 다른 측면을 추가하고 싶습니다.

단위 테스트. 또는 일반적으로 테스트하십시오.

일반적으로 하나의 양호한 구성을 갖는 것이 좋습니다. 프로그램의 종속성에 따라 다른 패키지 조합을 테스트해야 할 수도 있습니다. 예를 들어 toxCI / CD 파이프 라인의 일부로 또는 자동화 된 방식으로이를 수행 할 수 있습니다 .

어떤 패키지 조합을 테스트해야하는지에 대한 일반적인 규칙은 없지만 일반적으로 python2 / 3 호환성이 중요한 문제입니다. 버전 차이가 큰 패키지에 대한 의존성이 강한 경우 이러한 다른 버전에 대한 테스트를 고려할 수 있습니다.