python - 如何使用 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 提示符。
解决方案
不,你不能那样做,因为当你像这样运行你的脚本时,它会在一个子shell中运行所有东西,这些东西在完成时会被销毁
...但它很容易
source ./my-script.sh
这不会创建一个新的子shell来运行它
(或更常见的别名. ./my-script.sh
)
推荐阅读
- c# - 为什么 collider.enable = true 在我的代码中不起作用?
- javascript - 从 Chrome 扩展程序注入后运行脚本
- dailymotion-api - 用于视频评论的dailymotion api
- c# - PipeAccessRights 中的第 6 位和第 7 位(十进制值 32 和 64)是什么,我应该删除它们吗?
- npm - 如何在不是模块的项目上使用 package.json
- angular - 使用 AGM 在 Angular 6/7 中编辑多边形边/顶点的问题
- javascript - 为轮播动态更改图像源
- html - 如何修复标题?
- c# - 将布局添加到 LinearLayout
- design-patterns - 工厂方法模式是否遵循模板模式,而抽象工厂模式不遵循?