今天在处理其它需求时,发现只要用venv目录下的python.exe来解释py代码就可以正常运行。本来以为完事了,突然想起来,这样的话根本没有运行Activate命令,没有进入Python虚拟环境啊。

看了下Activate源码,其中最重要的动作是把venv虚拟环境的路径临时添加到系统Path路径最前面,这样venv的pip命令就能把模块(库)安装到虚拟环境目录里。Path配置的信息可以在PowerShell里,通过 $env:Path 命令查看,能够清楚的看到运行Activate之后venv目录添加到了Path配置的最前面。

是否Activate进入虚拟环境对pip的影响:

写一个py测试文件,引入os模块(库),然后执行 os.system("pip list")Activate进入虚拟环境,执行,列出venv中已经添加的模块

用系统Python执行,列出系统Python中已经添加的模块

不Activate虚拟环境,直接用venv目录里的python.exe执行,列出系统Python中添加的模块

也就是说不Activate进入虚拟环境,pip命令就直接继承系统Python了。

是否激活虚拟环境对Python.exe执行py代码有什么区别?

再建py文件,引入sys模块(库),打印Python相关的环境变量 print(sys.path)

首先用系统Python执行:

路径中包括 [当前源码目录、系统Python的dll和lib目录,以及系统Python的site-packages目录]

不Activate虚拟环境,直接用venv目录里的python.exe执行:

结果包括 [当前源码目录、系统Python的dll和lib目录,venv目录、venv的site-packages目录]

Activate进入虚拟环境并执行:

结果与上面相同

从目前的结果上来说,用venv的python.exe执行py代码,跟是否激活虚拟环境没有关系。Activate影响的是pip安装模块(库)的时候。

同时也弄清楚了venv里的Python还是继承系统Python的DLL和Lib,所以直接把venv拷贝给其它机器的话,至少需要对方机器里已经安装了同版本的Python。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐