Win平台实现本地Python虚拟环境复制迁移

我只是一个虾纸丫 提交于 2019-11-26 20:52:06

我主张在虚拟环境中开发/测试应用程序。如何利用一个现有 venv 环境呢, 傻傻的我把其它工程的 venv 目录复制一份,她真的能工作吗?

假设在 dirA 目录下拥有一个叫做 venv 的Python虚拟环境, 进入虚拟环境下

pip list 

嗯,正常的显示所有已经安装的库。

现在我想在 ProjA 里面使用 dirA 中 env 环境,并添加其它安装包。将其复制到 ProjA 目录下之后,进入虚拟环境下。

where pip

你会惊奇的发现,最先出现的 pip路径,不是当前虚拟环境的 pip路径,而是 dirA/venv 中的 pip路径。
删除/重命名 dirA/venv目录, 在ProjA/venv的虚拟环境中执行where pip就只能找到系统的 pip, 那么当前环境的pip跑哪里去了呢?

谷歌/百度一番之后,终于没有任何答案!!!

一定是路径有问题

一次发现,一次喜悦,一次失败

带着疑问,我首先打开 venv\Scripts 下面的一个文件

activate
activate.bat
Activate.ps1
deactivate.bat

别问我为什么是这四个文件, 因为他们是虚拟环境的入口/出口

VIRTUAL_ENV="D:\CommonUser\Documents\BookCode\Python\PythonCode\dirA\rqalpha-git\rqalpha\env"

路径用的是绝对路径!!!
先改成:

VIRTUAL_ENV="D:\CommonUser\Documents\BookCode\Python\PythonCode\ProjA\rqalpha-git\rqalpha\env"

重新进入ProjA/venv , pip list

Fatal error in launcher: Unable to create process using '"'

好了,出现这个奇怪的错误!!!

搜索失败!放弃!放弃!

搜索一大堆答案,终究是毫不相关的东西,随便pip安装不就好了吗,谁没有网络,谁会去折腾这些呢?想想也是喔, 放弃!

再再次发现尝试,终成功!

之前修改虚拟环境入口/出口都没有问题了,where pip 命令也能找到她了,为什么 pip list 就失败了呢?一定是 pip 程序本身有问题!

通过 winHex 比较系统的 pip和虚拟环境中的pip,果然不一样!

仔细观察,我发现了熟悉的一串字符串,就是那个曾经替换的绝对路径出现在她里面了!

#!d:\commonuser\documents\bookcode\python\pythoncode\dirA\rqalpha-git\rqalpha\env\scripts\python.exe

原来pip会执行时会释放内部的 python代码,并且采用指定的绝对路径的 python.exe,当找不到 python.exe 时导致创建 Python 进程失败,报出诡异错误!

赶紧修改这该死的路径,以此类推,Scripts下的所有 exe 都需要修改路径。
这次手动修改为正确路径之后,重新进入 ProjA/venv, 重新运行 pip list 很好! 成功显示所有虚拟环境的模块。

自此终于解决一直搞不定的问题,分析问题的能力真的很重要,需要不断加强!

作为一个 软件工程师,手动修改多么 Low 啊!分分钟写出一段自动修改的代码。

加好友 & 代码下载

这里写图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!