1

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

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

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

4

2 回答 2

1

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

于 2019-07-23T21:18:49.637 回答
0

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


-> Python
-> Program
-> run.bat

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

运行.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%"

This solution works for in my both application (64 bits and 32 bits) installation.

于 2019-07-24T18:23:23.120 回答