Python 运行时可选的动态依赖项?

问题描述 投票:0回答:1

我正在构建一个复杂的 Python 应用程序,在支持不同的库方面采用最大限度的方法,其中一些是使用数 GB 的机器学习库。我现在正准备发布该项目,但我意识到构建大小非常巨大,其中 99% 不是我的代码,其中一些可能永远不会被用户调用。

我希望能够做的是让用户下载具有最小依赖项的版本,如果他们选择在 GUI 中使用其他版本,则提示他们并在运行时安装它们,甚至可能使用以下命令重建应用程序pyinstaller.

我不希望所有用户都是开发人员,因此仅拥有可配置的构建脚本并不是最佳选择,而且我不想发布多个版本。

我所描述的内容可以用 Python 实现吗?这是一种常见模式吗?我该如何完成这样的事情?

如果这个问题更适合软件工程堆栈交换,我可以将其移至那里。

编辑: 我的一些软件包也仅适用于 Linux 或 Windows。我想使用 PyInstaller 之类的工具将我的项目发布为可移植可执行文件。我也不期望我的用户了解如何管理 venv 或系统 Python 版本。我想我可以理解制作另一个软件来安装和构建程序并管理它自己的 python 版本、venv 和可执行文件,就像安装的系统包一样。有必要采用如此复杂、霸道的解决方案来解决这个问题吗?

python pip setuptools
1个回答
-1
投票

动态安装依赖项是一项多步骤任务,这在很大程度上取决于您计划如何在客户端运行应用程序。虽然我不知道有任何众所周知的库可以解决此任务,但您可以实现自己的解决方案。

  1. 如果您的发行版依赖于安装

    pip
    ,最简单的解决方案是使用
    subprocess
    从应用程序内调用
    pip
    并下载依赖项。

  2. 如果您的发行版使用像 PyInstaller 这样的东西,那么它已经与 python 解释器捆绑在一起,解决方案可能是使用

    urllib
    下载依赖项并使其可供该解释器使用,例如将下载的文件夹位置附加到
    sys.path
    或将文件夹放置在捆绑程序描述的特定位置。

© www.soinside.com 2019 - 2024. All rights reserved.