所需软件
- autoenv:shell扩展,如果你使用zsh,可以直接以插件形式载入,如果是其他shell,请移步autoenv的github page,安装非常简单。
- venv:python的自带模块
方法介绍
我们此处使用的autoenv,可以在我们使用命令行进入某个目录时自动执行该目录下的.env
脚本,在退出这个目录时(该目录的子目录不视为退出),执行该目录下的.env.leave
脚本。
既然是这样,思路也就非常清晰了,我们要做的就是配置.env
和.env.leave
两个脚本即可。
插一句题外话,由于我们是以脚本的形式进入和退出虚拟环境,而脚本编写是非常灵活的,实际上这样的方案具有极佳的普适性,我们只要根据不同的具体任务编写脚本即可。
编写脚本
先简单说下思路,
首先,使用python自带的venv模块创建虚拟环境
然后在.env
脚本中进入虚拟环境,在.env.leave
脚本中编写推出虚拟环境的逻辑即可。
.env
脚本已经写好,再次给大家做个参考。
#!/bin/bash
ENV_DIR=wherever/you/like
echo chacking if the virtual environment exist...
if [ -d "$ENV_DIR" ]; then
echo Virtual environment exist.
else
echo Virtual environment NOT exist.
echo Creating virtual environment...
mkdir $ENV_DIR
#use python builtin to create vertial environment
python -m venv $ENV_DIR
fi
echo Launching Virtual Environment...
source $ENV_DIR/bin/activate
figlet env ready -f future
这里使用了figlet
输出醒目的大字,如果你不喜欢,换成echo
即可 😃
请注意,这只是一个简单的demo,请不要直接放到生产环境中使用,frankly,每当你cd进虚拟环境子目录时,这个脚本都会重新执行一遍🥲,解决方式也非常简单,设置一个shell变量并检查即可。
.env.leave
这个脚本就相当简单了,我们只要调用venv
提供的api即可。
#!/bin/bash
#a python api to quit virtual env
deactivate
figlet quit env
其他
关于shell中命令提示符显示错乱问题
由于autoenv已经有命令提示符了,而venv
又输出了一个,如果你觉得不美观,可以到虚拟环境的/bin
文件夹下找到activate
脚本,禁用和VIRTUAL_PS1
有关的两个if
函数即可。当然也可以在修改环境配置脚本在初始化环节自动配置。
关于nvim某些插件不能正确调用python环境问题
在nvim/vim的配置文件中配置
let g:python3_host_prog = '/usr/bin/python3.12' " 替换为全局Python 解释器的路径
具体python解释器的版本请根据需要修改。
目前我发现的问题就这些,如果有其他问题,欢迎在评论区交流。