【问题标题】:Installing into a venv with setup.py setuptools使用 setup.py setuptools 安装到 venv
【发布时间】:2026-02-18 11:45:01
【问题描述】:

我正在寻找一种通过特定路径将整个 python 应用程序单命令安装到venv 的方法。


我对这个主题做了一些研究,特别是在this thread 中,有一个关于Makefile 流程自动化的讨论。它还建议使用pyinvoke,在我看来,它是包裹在python 中的命令行命令。因此,我目前编写了以下简单的膝上 shell 脚本:

install_venv.sh

#!/bin/bash

PYTHON="$1"
VENV_PATH="$2"
SOURCE_ROOT="$(dirname "$(readlink -f "$BASH_SOURCE")")"

echo "$PYTHON"
echo "$VENV_PATH"
echo "$SOURCE_ROOT"

cd $SOURCE_ROOT
$PYTHON -m venv $VENV_PATH
source "$VENV_PATH/bin/activate"
python -m pip install -r "$SOURCE_ROOT/requirements.txt"
python setup.py install

这个脚本可以运行,比如./install_venv.sh python3.7 /tmp/test_venv。如果路径中已经存在venv,则它不处理这种情况,但可以以直接的方式对其进行扩展。

这看起来是一个很常见的任务,所以也许setuptools 已经有办法做到这一点,或者仍然需要编写这样的脚本?或者首选的方式是什么?

【问题讨论】:

  • 查看pipx 工具github.com/pipxproject/pipx
  • @wim 它可以按路径运行 Wheel 包吗?我安装了python3.7 -m pipx install target/dist/my_fancy_app-0.0.1-py3-none-any.whl 并得到了错误Could not find package target/dist/my_fancy_app-0.0.1-py3-none-any.whl. Is the name correct?。运行也没有像我预期的那样工作python3.7 -m pipx run target/dist/my_fancy_app-0.0.1-py3-none-any.whl 引发'target/dist/my_fancy_app-0.0.1-py3-none-any.whl' executable script not found in package 'target/dist/my_fancy_app-0.0.1-py3-none-any.whl'. Available executable scripts:。我检查了包,脚本在那里。

标签: python python-3.x bash setuptools python-venv


【解决方案1】:

不确定真正的意图是什么......


也许这些工具之一可以提供帮助:

这些工具允许您以隔离的方式安装 Python 应用程序及其所有必需的依赖项。有些基于虚拟环境,有些则不是。


也许您正在寻找诸如poetry(或pipenv,但不确定它是否仍在维护)之类的工具。


比较简单直接,setuptools有这个插件:

【讨论】:

  • 我试过pipx,但它似乎无法从.whl 档案中安装包。我的主要目的是自动化venv 设置、库requirements.txt 安装,并且基本上只需一个命令即可在其中安装应用程序。
  • 可能是tox,这很擅长创建虚拟环境并在其中安装requirements.txt。虽然它做了很多,所以它可能太复杂了。对于带有 wheel 的用例,什么都没有想到。如果我遇到你的情况,我可能会自己编写脚本,你的 shell 脚本走在正确的轨道上,或者直接用 Python 脚本来做。
  • 在没有即时解决方案的情况下,py-script 可能是更好的选择......我认为