【发布时间】:2019-06-23 05:39:02
【问题描述】:
我使用的是 Windows 7。我有多个 python 虚拟环境。假设我将venv_1 添加到系统路径。在命令行中,假设我激活了另一个venv_2,现在提示行显示
(venv_2) C:\>
但如果我在这里输入python,它仍然会在venv_1 中运行python。
这是预期的行为吗?
【问题讨论】:
标签: python python-venv virtual-environment
我使用的是 Windows 7。我有多个 python 虚拟环境。假设我将venv_1 添加到系统路径。在命令行中,假设我激活了另一个venv_2,现在提示行显示
(venv_2) C:\>
但如果我在这里输入python,它仍然会在venv_1 中运行python。
这是预期的行为吗?
【问题讨论】:
标签: python python-venv virtual-environment
这不是预期的行为,但这可能意味着您在设置虚拟环境或激活它时犯了错误。
要确定正在运行的版本,请尝试运行:
where python
无论结果列表中的顶部项目是什么,都将启动 Python Windows 的副本。如果你是对的并且它确实指向venv_1,那么venv_2 中的设置一定有问题。
通过运行set,您应该能够看到所有环境变量的列表。检查:
PATH=<long list of directory names, it should have the venv_2\Scripts at the start>
还有:
_OLD_VIRTUAL_PATH=<the same list, without that entry>
正是这个简单的路径更改导致 Windows 首先在您的虚拟环境中找到 Python,然后在您添加到全局路径中的其他虚拟环境中找到 Python。
请注意,添加一个虚拟环境的 Scripts 文件夹可能不是一个好主意,因为您只想在激活相应的虚拟环境并相应设置所有环境变量时使用它。
【讨论】:
venv_2的路径。对于set,PATH 仍然显示到venv_2 的旧路径。环顾四周后,我意识到 venv 无法真正重新定位(嗯……)。我想我会重新创建 venv。
pip freeze > requirements.txt 之后使用类似 pip install -r requirements.txt 的东西快速重新安装软件包往往更容易和更快。
--relocatable,它是实验性的。我最终只是重新创建了我的 venv。但是有些包不在 PyPI 上,它们需要特定的安装顺序,所以我必须手动完成。在需求中有没有办法告诉 pip 安装一个本地的whl?