为Python创建独立环境

为Python创建独立环境,python,pipenv,python-standalone,Python,Pipenv,Python Standalone,我正在开发一个基于Python的工具,我需要为没有技术技能的用户分发这个工具。我分发该工具的方法是创建一个包含所有需求的安装程序,包括python可执行文件和库 为此,我尝试创建一个虚拟环境(使用pipenv创建它),并用代码复制生成的工作目录。在某些情况下,安装程序工作是因为某些用户的机器上有Python;对于没有Python的用户,需要一些依赖项,但这些依赖项来自完整的Python安装 我已经尝试使用Cx\U freeze,但它不适用于我的应用程序。有没有办法创建一个独立的python环境与

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

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


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

看起来就像你想要的,它将生成一个python程序的.exe/二进制文件,可以在另一台机器上运行。但是这个项目似乎不完全受支持(仅支持3.6版本的python,而3.7版本目前还处于运行状态),因此如果它没有您需要的所有功能,您可能需要到别处看看。

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


-> Python
-> Program
-> run.bat

Python的第一个目录是包含所有可执行文件和包的Python环境。目录程序包含项目文件和run.bat,它们将环境设置为与此本地安装一起工作。目录
Python\Scripts
中有一个用于激活环境的存档。我的脚本代码是:

跑步。蝙蝠

cls
@ECHO OFF
call %~dp0Python\Scripts\activate.bat
ECHO Starting Program....
%~dp0Python\python %~dp0ProgramData\starter.py
@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%"
激活.bat

cls
@ECHO OFF
call %~dp0Python\Scripts\activate.bat
ECHO Starting Program....
%~dp0Python\python %~dp0ProgramData\starter.py
@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位)安装。

我将尝试使用它,但我上次的体验很糟糕。