新的venv虚拟环境就像另一个已经存在的env〔Python〕



我在这个文件夹中安装了一个名为env的venv:

|-- ScreenScraper
|   |-- backend
|   |-- docker-compose.yml
|   |-- env
|   `-- scraper_return

当我激活它时,它的行为就像这个文件夹中另一个名为venv的env:(在最后(

|-- WebScraper
|   |-- __pycache__
|   |   |-- hello.cpython-37.pyc
|   |   `-- hello.cpython-38.pyc
|   |-- byob-profiles-rest-api-docker
|   |   |-- Dockerfile
|   |   |-- LICENSE
|   |   |-- README.md
|   |   |-- Vagrantfile
|   |   |-- docker-compose.yml
|   |   |-- hello_world.py
|   |   |-- requirements.txt
|   |   `-- src
|   |-- django-markdown-editor
|   |   |-- LICENSE
|   |   |-- MANIFEST.in
|   |   |-- README.rst
|   |   |-- __screenshot
|   |   |-- martor
|   |   |-- martor_demo
|   |   |-- push.sh
|   |   |-- requirements.txt
|   |   |-- runtests.py
|   |   |-- setup.cfg
|   |   |-- setup.py
|   |   `-- venv

例如,pip list显示来自venvpip install -U pip的已安装软件包返回Requirement already up-to-date: pip in ./WebScraper/django-markdown-editor/venv/lib/python3.8/site-packages (20.0.2)。再次激活空的env。是虫虫还是我误解了什么?

正如我们在评论部分所确定的,您的问题不是因为错误地设置了虚拟环境,但值得一提的是,对于将来可能遇到这个问题的其他人来说,可能的解决方案。

从其他虚拟环境目录调用虚拟环境的问题是将虚拟环境目录从一个地方复制到另一个地方的常见症状应该避免这种情况这背后的原因是[venv_dir]/bin/activate脚本中硬编码的VIRTUAL_ENV变量。因此,请始终确保此变量指向一个有效的目录。

OP解决方案

为了仅列出虚拟环境中的程序包,需要对pip freezepip list使用--local标志。你可以在文档中找到这个:

-l,--local

如果在具有全局访问权限的虚拟机中,请不要列出全局安装的程序包。

关键短语是全局访问。pip不断查找虚拟环境之外的包的可能原因可能是PYTHONPATHPATH环境变量。检查一下。无论你在这些路径上有什么,pip都会看到。