python 虚拟环境文件后移动后的一个错误
一、错误出现
在pycharm终端输入:
(myvenv01) PS F:\pythonProject\myvenv01> pip3 install pillow
其中myevev01是已经激活的python虚拟环境,结果输出以下错误:
Fatal error in launcher: Unable to create process using"F:\pythonProject\myproject01\myvenv01\Scripts\python.exe" “F:\pythonProject\myvenv01\Scripts\pip3.exe” install pillow’: ???
在虚拟环境python myvenv01 安装模块Pillow失败,产生致命错误。 而F:\pythonProject\myproject01\myvenv01是不存在的的虚拟环境路径,F:\pythonProject\myvenv01才是已经激活的虚拟环境路径。
在其他终端虚拟环境下输入:
(myvenv01) F:\pythonProject\myvenv01\Scripts> pip
Fatal error in launcher: Unable to create process using '“F:\pythonProject\myproject01\myvenv01\Scripts\python.exe” “F:\pythonProject\myvenv01\Scripts\pip.exe” ': ???
尝试在一个名为 myvenv01 的虚拟环境中使用 pip,但遇到了与上面同样的一个错误。
二、错误分析
“F:\pythonProject\myproject01\myvenv01\Scripts\python.exe” “F:\pythonProject\myvenv01\Scripts\pip.exe” 不在同一个地方。原来myvenv01
开始在创建在:\pythonProject\myproject01\下,后来移动到F:\pythonProject\下.
查看虚拟环境的创建文件:
def create(self, env_dir):
"""
Create a virtual environment in a directory.
:param env_dir: The target directory to create an environment in.
"""
env_dir = os.path.abspath(env_dir)
context = self.ensure_directories(env_dir)
# See issue 24875. We need system_site_packages to be False
# until after pip is installed.
true_system_site_packages = self.system_site_packages
self.system_site_packages = False
self.create_configuration(context)
self.setup_python(context)
if self.with_pip:
self._setup_pip(context)
if not self.upgrade:
self.setup_scripts(context)
self.post_setup(context)
if true_system_site_packages:
# We had set it to False before, now
# restore it and rewrite the configuration
self.system_site_packages = True
self.create_configuration(context)
if self.upgrade_deps:
self.upgrade_dependencies(context)
该函数用于在指定目录中创建一个虚拟环境。
首先,将env_dir转换为绝对路径。
然后,通过ensure_directories方法确保目录中的必要文件夹存在。
接着,设置system_site_packages为False,以确保在安装pip之前不会包含系统级的包。
然后,调用create_configuration、setup_python方法进行配置和Python环境的设置。
如果with_pip参数为True,则调用_setup_pip方法安装pip。
如果upgrade参数为False,则调用setup_scripts和post_setup方法安装脚本和进行后续设置。
如果true_system_site_packages为True,则将system_site_packages设置回True,并重新写入配置。
最后,如果upgrade_deps参数为True,则调用upgrade_dependencies方法升级依赖项。
从上可以看到所创建的虚拟环境中包含了虚拟环境文件夹的位置. 我开始创建的虚拟环境文件的位置, 如F:\pythonProject\myproject01\myvenv01, 后来复制移到新位置F:\pythonProject\myvenv01. 在新虚拟环境下使用pip, 会在旧的位置寻找python.exe和新位置寻找pip.exe运行, 建立一个进程. 因F:\pythonProject\myproject01\myvenv01已经删除,因此产生错误.