>백엔드 개발 >파이썬 튜토리얼 >Windows의 휴대용 Python 번들

Windows의 휴대용 Python 번들

Barbara Streisand
Barbara Streisand원래의
2025-01-26 20:17:10911검색

Python 응용 프로그램과 환경을 다른 사용자가 사용할 수 있도록 Python 응용 프로그램과 환경을 MS Windows에 포장하여 모든 컴퓨터에서 언제든지 실행할 수 있도록 까다로운 작업입니다. 이 블로그 기사는 내 개인 솔루션에 대해 설명합니다. 나는 그것을 Python의 Windows 버전이라고 부릅니다.

는 가상 환경과 유사하지만 기계간에 이식 할 수 있습니다. 파이썬 번들은 가상 환경, 기존의 파이썬 설치 및 Pyinstaller 또는 Py2Exe와 같은 도구로 만든 독립적 인 실행 파일에서 제공하는 독립적 인 실행 파일에 있습니다. 이러한 번들을 만드는 데 새로운 도구가 필요하지 않습니다. 이것은 폴더 구조와 일부 포장 스크립트의 경우 느슨하고 가벼운 계약 일뿐입니다. 수동으로 쉽게 만들 수 있습니다. 또는 스크립트 또는 CI 작업으로 생성을 자동화했습니다. 질문 언제든지 "언제든지 실행"하는 방식으로 파이썬 응용 프로그램 또는 환경을 사용자에게 포장해야한다고 가정 해 봅시다.

우리는 어떤 버전의 파이썬을 설치했는지 알지 못하거나 전혀 설치되지 않을 수 있습니다. 우리는 추가 파이썬 버전의 설치를 요구하지 않는 것을 포함하여 이미 존재할 수있는 파이썬 설치를 조작하고 싶지 않습니다. 다시 말해 : 소프트웨어 패키지는 응용 프로그램을 실행하거나 파이썬 환경을 사용하는 데 필요한 모든 것이어야합니다.

가상 환경의 문제

well -thinking의 조합 후, 우리는 가상 환경 (Python -m venv venv_dir)을 생성하고 모든 컨텐츠를 가상 환경에 설치 한 다음 가상 환경 폴더를 사용자에게 압축하고 배포하는 것을 생각할 수 있습니다. 그러나 가상 환경 폴더는 생성 위치와 다른 경로를 다시 배치하기가 쉽지 않다는 것을 알고 있습니다. 또한 가상 환경은이 경로에서 동일한 Python 버전 사용을위한 기본 Python 설치에 따라 다릅니다. 따라서 우리는 사용자에게 가상 환경 사본을 어디에 두어야하는지 알려야합니다. 특정 경로에 특정 버전의 Python을 설치해야합니다. 이것은 우리가 원하는 것이 아닙니다.

파이썬 설치 문제 우리는 기존의 Python 설치에 모든 요구를 설치 한 다음 가상 환경 대신 폴더 (예 : C : 프로그램 Filespython 3.13.1)를 압축하여 배포 할 수 있습니다. 이것은 가장 효과적입니다. Windows의 Python 설치 디렉토리는 일반적으로 다른 경로를 다시 배치 할 수 있습니다 (이것은 UNIX의 정적 접두사 경로로 인해 그렇지 않습니다. 그러나 이것은 또 다른 테마입니다).

그러나 큰 결함이 있습니다. 스크립트의 존재는 파일을 실행할 수 있습니다 (.scripts 디렉토리의 .exe 파일, 일반적으로 라이브러리뿐만 아니라 핍의 입구로 스크립트를 제공했습니다. 실행 파일은 pip.exe 자체입니다. 이 스크립트는 파일을 실행할 수 있습니다. 파일은 "자체"에서 하드 코딩 된 파이썬 설치 경로에 의존 할 수 있습니다.

Pyinstaller의 문제 pyinstaller 또는 py2exe 도구는 Python 응용 프로그램과 모든 종속성을 단일 패키지에 번들로 할 수 있습니다. 사용자는 패키지를 실행하기 위해 Python 통역사 또는 모듈을 설치할 필요가 없습니다.

이것은 우리의 분포 요구를 완벽하게 해결합니다. 그러나 계량은 완전한 파이썬 환경을 배포하는 것이 아니라 맞춤형 단순화 된 번들 형식을 배포한다는 것입니다. 이것은 포장 응용 프로그램을위한 올바른 도구 일 수 있습니다. 그러나 IDE에서 사용할 수 있고 추가 PIP 설치를 통해 확장되는 "Entry Kit"파이썬 환경을 보내려면 적용 할 수 없습니다. 우리는보다 일반적인 솔루션을 찾고 있습니다.

파이썬 번들을 아는!

번들 생성 우리는 PowerShell에서 시작하여 번들에 대한 폴더를 만들 것입니다 : .

그러면 Python 설치를

python3에 추가합니다. 이 예에서는 Nuget에서 Python 3.13.1을 다운로드하여 추가합니다. (Nuget Zip 파일에서 Python은 도구 디렉토리에 설치됩니다. 이것이 여기에 필요한 모든 것입니다).

이제 우리 묶음은 다음과 같습니다

스크립트 디렉토리를 추가하겠습니다 :

우리는 아직 PIP를 활성화하지 않았으므로 지금하십시오.

PIP가 스크립트 디렉토리의 하드 코딩 된 파이썬 설치 경로에 따라 .EXE 파일을 작성하는 문제를 해결하기 위해 PIP를 수리하기 위해 PIP에 패키징 스크립트를 사용합니다.
<code>mkdir bundle
cd bundle</code>
파일을 만들어 봅시다. python_wrapperscriptspip.py :

어떻게 작동합니까? 포장 스크립트 (예 : Python3python.exe pip_wrapperscriptspip.py)를 통해 패키지를 설치할 때마다 Python3Scripts의 .exe 파일은 Python.exe (Python.exe) 만 지적하고 사용합니다. 변수 (c : python.exe 대신 c : program filespython 3.13.1python.exe). <..> 물론 이것은 위험하고 영향력이 있습니다. 이제 우리의 임무는 누군가가 그러한 "수리"스크립트*.exe 파일을 실행할 때 경로 변수의 python.exe가 올바른지 확인하는 것입니다. 그렇기 때문에 가상 환경과 유사하게 를 활성화하려면 번들이

이어야합니다. 나중에 이것에 대해 논의 할 것입니다. (이러한 종류의 PIP 포장 장치에 대한 자세한 내용은 여기를 참조하십시오)
<code>curl.exe -L "https://www.nuget.org/api/v2/package/python/3.13.1" -o python3.zip
Expand-Archive .\python3.zip -DestinationPath extracted_nuget
move .\extracted_nuget\tools python3
rm -R extracted_nuget
rm -R .\python3.zip</code>
지금, 우리가 여전히 PIP 포장을위한 pip.exe가 있다면 좋지 않습니까? 이런 식으로, 우리는 앞으로 PITHON PIP.PY 대신 PIP 명령 만 사용할 수 있습니까? 하나를 만들겠습니다. 물론, 그것은 또한 이식해야하므로 비슷한 방식으로 그것을 만들 것입니다.

이러한 이유로 PIP_WRAPPERBIN 폴더를 만들고 a.exe 파일을 만들어 봅시다.

<code>mkdir bundle
cd bundle</code>

그런 다음 python3python.exe를 사용하여 Python 셸(REPL)을 시작하고 다음 코드를 실행하여 pip.exe를 생성해 보겠습니다.

<code>curl.exe -L "https://www.nuget.org/api/v2/package/python/3.13.1" -o python3.zip
Expand-Archive .\python3.zip -DestinationPath extracted_nuget
move .\extracted_nuget\tools python3
rm -R extracted_nuget
rm -R .\python3.zip</code>

이제 폴더 구조는 다음과 같습니다.

<code>bundle
└───python3
    ├───python3.exe
    ├───Lib/
    ├───...</code>

비교

**Bundle** **虚拟环境** **Python安装** **Pyinstaller**
**路径独立(可以复制到文件系统中的任何路径)?** 否 (Python安装路径硬编码在虚拟环境中) 否 (.\scripts\*.exe文件将中断)
**可以在同一系统上有多个实例** 没有问题 (概念是一个Python版本每个用户或系统一个Python安装)
**磁盘使用情况** 大 (包含完整的Python安装) 小 (依赖于Python安装) 中等
**需要激活**
**单个可执行文件**
**可以用作常规Python安装(REPL、pip、脚本等)**
**可以与IDE一起使用?** 是,但您可能需要在IDE的运行/调试配置文件中配置环境变量
블라

이 출력은 원본 텍스트를 다시 작성한 것이지만 원본 텍스트의 모든 정보와 이미지는 그대로 유지됩니다. 좀 더 부드러운 표현을 사용했고, 이해하기 쉽도록 일부 구절을 재구성했습니다. 이미지 형식은 변경되지 않습니다.

위 내용은 Windows의 휴대용 Python 번들의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.