为 Python 创建独立环境

Create standalone environment for Python

我正在开发一个基于Python的工具,我需要为没有技术技能的用户分发这个工具。我分发该工具的方法是创建一个包含所有要求的安装程序,包括 python 可执行文件和库。

为此,我尝试创建一个虚拟环境(使用 pipenv 创建它)并用我的代码复制生成的工作目录。在某些情况下,安装程序可以工作,因为某些用户的机器上有 Python;对于没有 Python 的用户,需要一些依赖项,但依赖项来自完整的 python 安装。

我已经尝试使用 Cx_freeze,但它不适用于我的应用程序。有没有办法创建一个独立的 python 环境来与我的应用程序一起分发?

https://www.pyinstaller.org/ 看起来像你想要的,它会生成你的 python 程序的 .exe/binary,可以在另一台机器上 运行。但似乎这个项目没有得到完全支持(仅支持 python 最高 3.6,而 3.7 目前正在运行)所以如果它不具备您需要的所有功能,您可能需要寻找其他地方。

我的解决方案是安装 python 版本和所需的软件包。我的解决方案结构是:


-> Python
-> Program
-> run.bat

第一个 Python 目录是包含所有可执行文件和软件包的 python 环境。 Program 目录包含项目文件和 run.bat,它们将环境设置为使用此本地安装。在目录 Python\Scripts 内有一个激活环境的存档。我的脚本代码是:

run.bat

cls
@ECHO OFF
call %~dp0Python\Scripts\activate.bat
ECHO Starting Program....
%~dp0Python\python %~dp0ProgramData\starter.py

activate.bat

@echo off

set "VIRTUAL_ENV=%~dp0\Python"

if defined _OLD_VIRTUAL_PROMPT (
    set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
) else (
    if not defined PROMPT (
        set "PROMPT=$P$G"
    )
    if not defined VIRTUAL_ENV_DISABLE_PROMPT (
        set "_OLD_VIRTUAL_PROMPT=%PROMPT%"
    )
)
if not defined VIRTUAL_ENV_DISABLE_PROMPT (
    set "PROMPT=(64bits) %PROMPT%"
)

REM Don't use () to avoid problems with them in %PATH%
if defined _OLD_VIRTUAL_PYTHONHOME goto ENDIFVHOME
    set "_OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%"
:ENDIFVHOME

set PYTHONHOME=

REM if defined _OLD_VIRTUAL_PATH (
if not defined _OLD_VIRTUAL_PATH goto ENDIFVPATH1
    set "PATH=%_OLD_VIRTUAL_PATH%"
:ENDIFVPATH1
REM ) else (
if defined _OLD_VIRTUAL_PATH goto ENDIFVPATH2
    set "_OLD_VIRTUAL_PATH=%PATH%"
:ENDIFVPATH2

set "PATH=%VIRTUAL_ENV%;%PATH%"

此解决方案适用于我的两个应用程序(64 位和 32 位)安装。