我使用
创建了一个虚拟环境python -m venv venv
现在我打开一个Python shell,而不通过运行激活虚拟环境
import sys
print(sys.path, sys.prefix)
我明白了
['', '/usr/lib/python312.zip', '/usr/lib/python3.12', '/usr/lib/python3.12/lib-dynload', '/usr/lib/python3.12/site-packages'] /usr
这正是我所期待的。
如果我激活环境,输出是
['', '/usr/lib/python312.zip', '/usr/lib/python3.12', '/usr/lib/python3.12/lib-dynload', '/home/myname/mypath/venv/lib/python3.12/site-packages'] /home/myname/Projects/pypath/venv
让我很沮丧的是,即使在 venv 内部,解释器似乎也是首先在系统范围的位置中搜索包,然后才在 venv 目录中搜索包。 这是真的吗?
不。系统包位于
/usr/lib/python3.12/site-packages
,当你在 venv“内部”时,它根本不存在。
venv-site 之前的路径(在您的例子中是/home/myname/mypath/venv/lib/python3.12/site-packages
)用于标准库导入。