发布于 

fish运行venv的坑

今天本来打算开始折腾ESP32结果我的esptool和我其他的python包冲突。于是我就去用venv创了一个虚拟环境来搞ESP32。结果发现我特么启动不了环境。他启动环境的文件是<venv>/bin/activate,结果我的fish不兼容bash的语法就打不开这个bash的脚本,我换了一下bash的脚本果然跑起来了。But那个bash太捞了我看不上于是我就去网上搜,发现venv有fish版的脚本是bin目录下的activate.fish。我兴致勃勃的跑去跑结果我的shell给我又报了错。。。。

1
2
3
4
</> ~/G/EPS32 ./esp32/bin/activate.fish   
Failed to execute process './esp32/bin/activate.fish'. Reason:
exec: Exec format error
The file './esp32/bin/activate.fish' is marked as an executable but could not be run by the operating system.

我一看,嗯?这不是和我运行bash的报错一样嘛?这就非常迷惑了。我就继续去网上找资料,我发现py官网居然有venv的文档。我在文档里看到一个教我启动脚本的,我输了一下那个命令,跑起来了。非常迷惑,那命令和我的差不多。就是多了一个空格,我也不知道是什么神仙操作。

顺便官方的各个平台运行虚拟环境方法的表格为下:

平台 Shell 用于激活虚拟环境的命令
POSIX bash/zsh $ source /bin/activate
fish $ source /bin/activate.fish
csh/tcsh $ source /bin/activate.csh
PowerShell Core $ /bin/Activate.ps1
Windows cmd.exe C:> \Scripts\activate.bat
PowerShell PS C:> \Scripts\Activate.ps1

另外官方文档对venv的介绍写的不错,里面教程感觉不错就顺便也贴这了(点我

++++++

亿万年以后的补充:

现在py更新到了3.10版本,我按以前的方法来运行fish下的虚拟环境但是失败了。好在我把官方文档贴上面了,现在运行要使用scource,我也对其进行了修改。