首页 > 解决方案 > 如何使用 bash 脚本激活 python virtualenv 并在脚本完成后保留它?

问题描述

我像往常一样创建了一个新的 python venv:python -m venv .venv

我需要创建一个 bash 脚本,它可以激活此 venv 并在完成后保持该状态。

我知道,激活 venv 的正常解决方案是source .venv/bin/activate从终端调用或通过别名使用它。

但是我需要在我的 bash 脚本中使用这个功能,它为我的开发做了很多其他有用的事情。

我试图以一种简单的方式做到这一点:

我的脚本.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 $

完成脚本后是否可以保持激活的 venv?

我的脚本需要它,p它有很多关于 python、pip、twine 等的不同帮助命令。

我希望能够用我的脚本p和 venv 做这样的事情:

$ p v

1)如果已经激活了venv,什么也不做

2) 如果有 .venv 文件夹,则激活 venv 并返回 ACTIVATED venv bash 提示符。

3)如果没有 .venv 文件夹,首先创建 venv 然后激活它。并且还返回 ACTIVATED venv bash 提示符。

标签: pythonbashvirtualenv

解决方案


不,你不能那样做,因为当你像这样运行你的脚本时,它会在一个子shell中运行所有东西,这些东西在完成时会被销毁

...但它很容易

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

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


推荐阅读