新的 venv 虚拟环境就像另一个已经存在的环境 [Python]
New venv Virtual Environment acts like another env which already exists [Python]
我在这个文件夹中安装了一个名为 env 的 venv:
|-- ScreenScraper
| |-- backend
| |-- docker-compose.yml
| |-- env
| `-- scraper_return
当我激活它时,它的行为就像此文件夹中另一个名为 venv 的环境:(最后)
|-- 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
显示 venv
或 pip install -U pip
returns Requirement already up-to-date: pip in ./WebScraper/django-markdown-editor/venv/lib/python3.8/site-packages (20.0.2)
中安装的软件包。空 env
再次被激活。是BUG还是我理解错了什么?
正如我们在评论部分所确定的那样,您的问题不是因为错误设置了虚拟环境,但值得一提的是将来可能遇到此问题的其他人的可能解决方案。
从其他虚拟环境目录调用虚拟环境的问题是将虚拟环境目录从一个地方复制到另一个地方的常见症状。 这应该避免! 其背后的原因是 [venv_dir]/bin/activate
脚本中硬编码的 VIRTUAL_ENV
变量。因此,始终确保此变量指向有效目录。
OP 的解决方案
为了仅列出来自虚拟环境的包,您需要为pip freeze
或pip list
使用--local
标志。您可以在文档中找到它:
-l, --local
If in a virtualenv that has global access, do not list globally-installed packages.
关键词是全局访问。 pip 不断查找虚拟环境之外的包的可能原因可能是 PYTHONPATH
和 PATH
环境变量。检查它们。 pip 可以看到这些路径中的任何内容。
我在这个文件夹中安装了一个名为 env 的 venv:
|-- ScreenScraper
| |-- backend
| |-- docker-compose.yml
| |-- env
| `-- scraper_return
当我激活它时,它的行为就像此文件夹中另一个名为 venv 的环境:(最后)
|-- 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
显示 venv
或 pip install -U pip
returns Requirement already up-to-date: pip in ./WebScraper/django-markdown-editor/venv/lib/python3.8/site-packages (20.0.2)
中安装的软件包。空 env
再次被激活。是BUG还是我理解错了什么?
正如我们在评论部分所确定的那样,您的问题不是因为错误设置了虚拟环境,但值得一提的是将来可能遇到此问题的其他人的可能解决方案。
从其他虚拟环境目录调用虚拟环境的问题是将虚拟环境目录从一个地方复制到另一个地方的常见症状。 这应该避免! 其背后的原因是 [venv_dir]/bin/activate
脚本中硬编码的 VIRTUAL_ENV
变量。因此,始终确保此变量指向有效目录。
OP 的解决方案
为了仅列出来自虚拟环境的包,您需要为pip freeze
或pip list
使用--local
标志。您可以在文档中找到它:
-l, --local
If in a virtualenv that has global access, do not list globally-installed packages.
关键词是全局访问。 pip 不断查找虚拟环境之外的包的可能原因可能是 PYTHONPATH
和 PATH
环境变量。检查它们。 pip 可以看到这些路径中的任何内容。