如果您移动/重命名了创建虚拟环境的文件夹,那么下次您尝试在那里激活虚拟环境时,Pipenv 将创建一个全新的虚拟环境。这是因为 Pipenv基于项目目录的完整路径创建了实际的虚拟环境文件夹。这在文档中有所说明:
https://pipenv-fork.readthedocs.io/en/latest/install.html#virtualenv-mapping-caveat
- Pipenv 自动将项目映射到其特定的 virtualenvs。
- virtualenv 以项目根目录的名称加上项目根目录的完整路径的哈希值(例如,
my_project-a3de50
)全局存储。
- 如果您更改项目的路径,则会破坏这种默认映射,并且 pipenv 将不再能够找到和使用项目的 virtualenv。
强调第 3 个项目符号。所以它没有删除你的包,它基本上创建了一个新包。您还应该看到一个通知,它正在创建一个新的:
demo$ pipenv shell
Launching subshell in virtual environment...
...
(demo) demo$
exit
demo$ cd ..
~$ mv demo demo2
~$ cd demo2
demo2$ pipenv shell
Creating a virtualenv for this project...
...
(demo2) demo2$
“Creating a virtualenv ...”意味着它正在创建一个新的。
现在,继续:
这是否意味着我现在在某处存在重复项?如果有,在哪里?
这意味着您仍然在某个地方拥有之前的虚拟 env 文件夹,您之前安装了您的软件包。您可以尝试使用该--venv
选项来获取 Pipenv 创建所有虚拟 env 文件夹的顶级目录。在您的新环境中:
(demo2) demo2$ pipenv --venv
/Users/gino.mempin/.venvs/demo2-4Y1NLH_X
如前所述,这里的虚拟 env 文件夹是demo2-4Y1NLH_X
,而顶级文件夹是(就我而言).venvs
。默认值类似于/.local/share/或您设置WORKON_HOME
的任何值(请参阅自定义虚拟环境位置)。只--venv
为自己运行。
你可以尝试去那里,它会列出你创建的所有虚拟环境:
(demo2) demo2$ ls /Users/gino.mempin/.venvs
demo-tSf-ZA7f
demo2-4Y1NLH_X
some-other-project-ABJaje5
another-project-8WUmE08m
...
在这里,如果你幸运的话,你可以找到你的旧文件夹的名称,然后如果你想清理它,只需将其删除。如果你不走运,会有多个同名文件夹,你将无法分辨哪个是你的旧文件夹。
(demo2) demo2$ ls /Users/gino.mempin/.venvs
demo-tSf-ZA7f
demo-7I2ki6rH
demo-8WUmE08m
demo2-4Y1NLH_X
目前没有办法直接从虚拟环境文件夹哈希本身获取原始路径的完整路径。(参见相关:删除目录时如何删除所有 pipenv virtualenvs?)。也没有办法重复使用旧的虚拟环境并将其复制到新的虚拟环境中。但是无论如何您都不需要,创建虚拟环境很便宜,只需重新创建它并重新安装所有以前的包。