如果您移动/重命名了创建虚拟环境的文件夹,那么下次您尝试在那里激活虚拟环境时,Pipenv 将创建一个全新的虚拟环境。这是因为 Pipenv基于项目目录的完整路径创建了实际的虚拟 env 文件夹。这在文档中有说明:
https://pipenv-fork.readthedocs.io/en/latest/install.html#virtualenv-mapping-caveat
- Pipeenv 自动将项目映射到其特定的 virtualenvs。
- virtualenv 以项目根目录的名称加上项目根目录的完整路径的哈希值(例如,
my_project-a3de50)全局存储。
- 如果更改项目的路径,就会破坏这种默认映射,并且 pipenv 将无法再找到和使用项目的 virtualenv。
强调第三个项目符号。所以它没有删除你的包,它基本上创建了一个新包。您还应该看到它正在创建一个新的通知:
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$
“创建一个虚拟环境...”意味着它正在创建一个新环境。
现在开始:
这是否意味着我现在在某处存在重复项?如果有,在哪里?
这意味着你在某个地方仍然有你以前的虚拟 env 文件夹,你以前安装了你的包。您可以尝试使用 --venv 选项来获取 Pipenv 创建所有虚拟 env 文件夹的顶级目录。在您的新环境中:
(demo2) demo2$ pipenv --venv
/Users/gino.mempin/.venvs/demo2-4Y1NLH_X
如前所述,这里的虚拟环境文件夹是demo2-4Y1NLH_X,顶级文件夹是(就我而言).venvs。默认值类似于 /.local/share/ 或您将WORKON_HOME 设置为的任何值(请参阅Custom Virtual Environment Location)。只需为自己运行--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
目前没有办法直接从虚拟环境文件夹哈希本身获取到原始文件的完整路径。 (参见相关:How to remove all pipenv virtualenvs when the directory was deleted?)。也没有办法重复使用旧的虚拟环境并将其复制到新的虚拟环境中。但无论如何你都不需要,创建虚拟环境成本很低,只需重新创建它并重新安装所有以前的包。