退出virtualenv虚拟环境后命令行出现PYTHONPATH设置语句的问题
问题描述
我有一个名为Test的Python 3.11虚拟环境,在VS Code中执行workon Test命令可进入该虚拟环境。但执行deactivate命令退出后,命令行中会显示语句if defined _OLD_VIRTUAL_PYTHONPATH (set "PYTHONPATH=" ),之后才会回到预期的正常命令提示符(C:\Users\ksarn\ENVS>)。
命令行操作记录如下:
C:\Users\ksarn\ENVS>pip list Package Version --------------------- ------- distlib 0.3.6 filelock 3.8.0 pip 22.3.1 platformdirs 2.5.4 setuptools 65.5.0 virtualenv 20.16.7 virtualenvwrapper-win 1.2.7 C:\Users\ksarn\ENVS>workon test (test) C:\Users\ksarn\ENVS>whereis python C:\Users\ksarn\ENVS\test\Scripts\python.exe (test) C:\Users\ksarn\ENVS>deactivate C:\Users\ksarn\ENVS>if defined _OLD_VIRTUAL_PYTHONPATH (set "PYTHONPATH=" ) C:\Users\ksarn\ENVS> C:\Users\ksarn\ENVS>whereis python C:\Users\ksarn\AppData\Local\Programs\Python\Python311\python.exe C:\Users\ksarn\ENVS>
已重装Python 3.11(已勾选路径选项)、virtualenv及virtualenvwrapper-win,但问题仍未解决。
原因分析
这个问题是因为virtualenvwrapper-win生成的deactivate.bat脚本里,相关命令未被@echo off指令包裹,导致执行deactivate时,脚本中的PYTHONPATH重置命令直接被输出到控制台,而非静默执行。
解决办法
修改单个虚拟环境的脚本
- 找到目标虚拟环境的
Scripts目录,比如示例中的C:\Users\ksarn\ENVS\test\Scripts - 打开目录下的
deactivate.bat文件 - 在文件最顶部添加一行
@echo off,确保后续命令不会被输出到控制台 - 保存文件后,重新进入虚拟环境再执行
deactivate,即可消除该显示问题
- 找到目标虚拟环境的
全局修改模板(一劳永逸)
- 找到Python安装目录下的virtualenv模板文件,路径通常为
Python安装路径\Lib\site-packages\virtualenv\activation\bat\deactivate.bat - 在该模板文件顶部添加
@echo off - 后续新建的虚拟环境会自动继承这个设置,无需逐个修改
- 找到Python安装目录下的virtualenv模板文件,路径通常为
内容的提问来源于stack exchange,提问作者Mojorizing
相关产品推荐
相关产品推荐

