为何Python虚拟环境未安装PyInstaller却可直接使用?
问题原因说明
为什么不用安装PyInstaller就能调用?
virtualenv创建的虚拟环境不会彻底屏蔽系统的PATH环境变量。如果PyInstaller之前已经通过系统级Python(比如全局pip install pyinstaller)安装过,它的可执行文件会存在于系统PATH包含的目录里。激活虚拟环境后,系统PATH依然有效,所以你直接输入pyinstaller时,系统会找到这个系统级的可执行文件并运行——本质上你用的是系统环境里的PyInstaller,而非虚拟环境内的版本。
为什么未安装的模块会提示找不到?
虚拟环境的核心隔离作用体现在Python的模块搜索路径(sys.path)上。当你在虚拟环境里运行Python脚本时,Python会优先查找虚拟环境内部的site-packages目录,不会自动加载系统级安装的模块(除非创建虚拟环境时特意加了--system-site-packages参数)。所以导入未在虚拟环境中安装的模块时,Python会正常抛出“module unfound”错误,这是虚拟环境的正常隔离效果。
一句话总结
pyinstaller是可执行命令,靠系统PATH找到系统级版本,所以不用在虚拟环境安装也能调用- Python模块导入受虚拟环境的
sys.path限制,只认虚拟环境内的安装包,未安装的模块自然找不到
内容的提问来源于stack exchange,提问作者leotsing
相关产品推荐
相关产品推荐

