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


17

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

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


1
가능한 가장 적은 문제에 대해 Docker (또는 다른 컨테이너 기반 솔루션)를 고려 했습니까? docker.com
Zaccharie Ramzi

Re : Docker ... 방금 다음과 같은 사실을 발견했습니다. "개발자가 다른 Linux 시스템에서 응용 프로그램을 실행할 수 있다는 확신을 가질 수 있습니다." ( opensource.com/resources/what-docker )
Mick

일반적으로 모든 고전적인 OS : windows ( docs.docker.com/docker-for-windows ) 및 mac ( docs.docker.com/docker-for-windows )
Zaccharie Ramzi

2
여기에 대한 답변은 상황에 따라 다릅니다. 파이썬 프로그램은 일을하는지 있습니다 sys또는 os또는 하위 프로세스 유형 기능 이상의 수학 / 분석? 전자는 각 버전의 Python으로 변경 될 수 있으며 나중에 버전에 따라 상당히 독립적 일 수 있습니다. 어떤 종속 라이브러리? numpy와 pandas는 플랫폼에서 놀라운 일을하므로 최소 버전을 가지고 있는지 확인할 수 있습니다. 파이썬의 주요 버전은 무엇입니까? 종속 라이브러리가있는 Python 2.x와 3.x의 차이점은 여전히 ​​더 어려워집니다. 일반적인 주요 릴리스를 대상으로 좋은 코드를 작성하는 것이 좋습니다.
dawg

2
수많은 답변에서 알 수 있듯이이 문제를 해결하는 방법은 매우 많습니다. 응용 프로그램이 무엇인지 아는 것에 따라 답변이 변경되는지 궁금합니다 . 문제가되지 않아야한다고 생각하고 싶지만 가능하다고 생각합니다. 또한 의도 한 청중에 따라 크게 달라집니다. 기계 학습 응용 프로그램을 실행하는 정통한 물리학 박사-Joe 인터넷은 체커의 파이 게임을합니다.
Marcel Wilson

답변:


15

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

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

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

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

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


7

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

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 (각 플랫폼마다 하나씩)와 코드를 실행 파일로 작성하는 방법에 대한 지침을 제공합니다.


1

내가 지금까지 사용한 가장 좋은 도구는 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와 관련이 없으며이 멋진 도구를 공유하고 싶었습니다.


1

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

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

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


1

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

나는 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" 소프트웨어를 사용하여 설치 프로그램을 생성합니다 : 바로 가기 생성, 환경 변수, 아이콘 설정 등 ...


py2exe는 몇 년 동안 업데이트되지 않았습니다. 내가 찾을 수 있는 최근 활동을. 그런 다음 유지 관리되지 않은 것으로 가정합니다. (또한 Python <3.4 만 지원하므로 더 이상 사용되지 않는 Python 버전 만 지원합니다).
Legorooj


-1

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

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

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

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


이것은 소프트웨어 개발에서 매우 중요한 측면입니다. 그러나 이것은 질문에 완전히 대답하지 못합니다 . 단위 테스트는 프로그램 배포에 어떻게 도움이됩니까?
Legorooj

IMHO, OP는 배포에 대해 구체적으로 묻지 않습니다. 그는 다른 사람들이 자신의 프로그램을 실행할 수 있도록하는 방법을 묻습니다. 사람들이 사용할 수있는 패키지 세트에 제한이있을 수 있기 때문에 단위 테스트가 실제로 그렇게하는 데 도움이 될 것이라고 생각합니다. 일반적으로 배포 질문은 중요하지만 여기에서 답변을 받았지만 실제 시나리오에서는 하나의 단일 패키지에 대해서만 전체 venv를 만들 수는 없지만 적어도 일부 표준 구성과 호환되어야한다고 생각합니다.
Dschoni

단위 테스트가 올바르게 실행 되는지 확인하는 데 가치가 있다고 주장 하지는 않지만 OP는 코드를 "설치하기 쉬운"방식으로 공유하는 방법을 물었습니다. 그래서 나는 이것이 특정 질문에 대한 잘못된 대답이라고 생각합니다.
Legorooj

나는 여전히 문제는 배포에 관한 것이 아니라고 생각합니다. 그래서이 답변을 추가했습니다. 예를 들어 Windows에서 개발하는 경우 배포 전에 실행되는지 확인하려면 Unix에서 테스트해야합니다.
Dschoni

호기심에서 방금 말한 것과 어떻게 다릅니 까? ... making sure it runs correctly ...? 테스트는 올바르게 실행되도록하는 데 필수적인 부분이므로 배포 준비 의 필수 부분 이지만 실제로 배포 하는
것과는 아무런 관련이

-1

선택할 수있는 파이썬 패키징과 관련하여 사용 가능한 기존 솔루션 중 일부에 대해 간단히 요약합니다 (지식은 힘입니다).

  1. 프로젝트 구조화 에서 제공되는 지침을 따르십시오. 이 규칙은 파이썬 커뮤니티에서 널리 받아 들여지고 있으며 초보자가 파이썬으로 코딩을 시작할 때 일반적으로 좋은 출발점입니다. 이 지침을 따르면 pythonist는 github 또는 다른 유사한 장소에서 프로젝트 / 소스를 보는 방법을 설치하는 방법을 즉시 알 수 있습니다. 또한 이러한 규칙에 따라 프로젝트를 pypi에 업로드하고 CI를 추가하는 것은 쉽지 않습니다.

  2. 표준 규칙에 따라 프로젝트가 올바르게 구성되면 다음 단계는 사용 가능한 냉동고를 사용하는 것일 수 있습니다. 최종 사용자에게 파이썬을 설치하지 않고도 설치할 수있는 패키지를 최종 사용자에게 제공하려는 경우 기계. 이 도구는 코드 보호 기능을 제공하지는 않지만 최종 아티팩트에서 원래 파이썬 코드를 추출하는 것은 모든 경우에 사소한 일입니다

  3. 그래도 여전히 dev에 의존성을 설치를 시작하지 않고 사용자에게 프로젝트를 제공 할 당신 같은 당신이 도구를 사용할 수있는 기존 냉장고의 고려하지 않아도 당신은 또한 코드 보호에 관심 않으면 nuitka을 , shedskin , 사이 톤 또는 이와 유사한 것. 일반적으로 이러한 도구로 생성 된 아티팩트에서 코드를 되 돌리는 것은 결코 쉬운 일이 아닙니다. 반면에 크래킹 방지는 다른 문제이며 최종 사용자에게 물리적 바이너리를 제공하지 않으면 많은 작업을 수행 할 수 없습니다 속도를 늦추는 것 외에 :)

  4. 또한 파이썬 프로젝트에서 외부 언어를 사용해야하는 경우 https://wiki.python.org/moin/IntegratingPythonWithOtherLanguages 링크를 따라 다음과 같은 방법으로 CI에 이러한 도구의 빌드 시스템을 추가하십시오. 1의 규칙은 매우 쉽습니다.

즉, 시작하기에 충분할 것임을 알기 때문에 글 머리 기호 1을 고수하고 특정 포인트는 파이썬 "표준"프로젝트의 기존 사용 사례를 많이 포함해야합니다.

이 가이드를 따르면 완전한 가이드가 될 수는 없지만 파이썬 프로젝트를 대중에게 즉시 게시 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.