对于一个学校项目,我不得不使用Python venv。这不是第一次,但当我初始化并激活venv并执行pip list
时,它显示了我的整个全局包集合。因此,我递归地删除了整件事,并认为最好再次在全局范围内重新安装所有基本组件(numpy、pandas等(,然后只在需要的地方安装特定组件。
然后我发现,无论我安装在哪里(venv是否激活(,它总是会在全球范围内下载。无论我在哪里pip list
,它总是会显示整个事情。这让我想到我可能从来没有让venvs去上班。
我总是这样做:
python3 -m venv venv
source venv/bin/activate
它会在小箭头(或$(之前显示(venv)
,这意味着它有效,但显然不有效。
我错过了什么?
我使用的是M1 MacBook Air,使用的是zsh(哦,我的zsh,但我认为这不会有什么不同(,Python 3.10。
编辑:事实证明,只有一家特定的供应商出现了这种情况。创建另一个供应商时,返回预期行为。但仍然不确定问题出在哪里。
首先,您想检查在运行python3
时引用了哪个python解释器:为此,请运行which python3
(如果您的env已成功激活,则应返回path/to/env/bin/python3
(
每次你想在你的病毒环境中安装一个包时,请确保运行python3 -m pip install my_package
而不是pip install my_package
:这将确保为与你的环境相关的python解释器安装my_package
。
最后,为了避免在全局python解释器上错误地安装任何包,请将其添加到.bashrc
/.zshrc
:
export PIP_REQUIRE_VIRTUALENV="true"
每次尝试将程序包安装到全局解释器时,都会引发一个错误。为了保留全局安装软件包的选项,我额外定义了以下命令:
gpip() {
PIP_REQUIRE_VIRTUALENV="" pip "$@"
}
并运行CCD_ 12进行全局安装。