如何使用bash脚本激活Python虚拟环境并在脚本完成后保持虚拟环境状态?

3
我已经像往常一样创建了一个新的 Python venv: python -m venv .venv 我需要创建一个 bash 脚本,可以激活这个 venv 并在完成后保持该状态。
我知道,激活 venv 的正常方法是从终端调用 source .venv/bin/activate 或通过别名使用它。
但我需要在我的 bash 脚本中拥有这个功能,该脚本为我的开发提供了许多其他有用的功能。
我试图以简单的方式实现它:
my-script.sh:
#!/bin/bash

source ".venv/bin/activate"
echo $VIRTUAL_ENV

当脚本运行时,venv被激活,我通过$VIRTUAL_ENV进行检查。 但是在完成后,状态丢失了:

max@mbp t3 $ ./my-script.sh
/Users/max/t3/.venv
max@mbp t3 $ echo $VIRTUAL_ENV

max@mbp t3 $

在脚本结束后保持已激活的虚拟环境是否可能?

我需要这个功能来运行我的脚本p,该脚本包含许多用于 Python、pip、twine 等的不同辅助命令。

我想使用我的脚本p和虚拟环境做这样的事情:

$ p v

1) 如果已经有一个已激活的虚拟环境,则不进行任何操作

2) 如果存在 .venv 文件夹,则激活虚拟环境并返回已激活的虚拟环境 bash 提示符。

3) 如果不存在 .venv 文件夹,则首先创建虚拟环境,然后激活它。同时返回已激活的虚拟环境 bash 提示符。


这可能会对你有所帮助:https://stackoverflow.com/questions/70380736/python-script-that-creates-a-project-and-activates-venv/ - undefined
1个回答

3

不可以这样做,因为运行脚本时会在一个子shell中执行所有操作,当操作完成时该子shell便被销毁。

......但可以使用以下命令:

source ./my-script.sh 这将不会创建新的子shell来运行它

(或更常见的别名 . ./my-script.sh)


我已经在问题中更新了一个解释,说明为什么我需要通过我的脚本来激活 venv。我需要它用于我的脚本 p,该脚本具有许多不同的辅助命令,用于处理 Python、pip、twine 等等。我希望能够通过我的脚本 p 和 venv 来实现以下操作:$ p v
  1. 如果已经激活了 venv,则不执行任何操作。
  2. 如果存在 .venv 文件夹,则激活 venv 并返回已激活的 venv bash 提示符。
  3. 如果不存在 .venv 文件夹,则首先创建 venv,然后激活它。同时返回已激活的 venv bash 提示符。
- undefined
看起来你是对的,从脚本中激活Python虚拟环境并在退出后保持此状态似乎是不可能的 :( - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接