Новая виртуальная среда venv действует как еще один env, который уже существует [Python] - PullRequest
0 голосов
/ 17 марта 2020

В эту папку я установил venv с именем env:

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

Когда я активирую его, он ведет себя как другой env с именем 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 возвращает Requirement already up-to-date: pip in ./WebScraper/django-markdown-editor/venv/lib/python3.8/site-packages (20.0.2). Снова пустой env активируется. Это ошибка или я что-то неправильно понимаю?

1 Ответ

0 голосов
/ 18 марта 2020

Как мы установили в разделе комментариев, ваша проблема не в неправильной настройке виртуальной среды, но стоит упомянуть о возможном решении для других, кто может столкнуться с этим вопросом в будущем.

Проблема с Виртуальный env, вызываемый из другого виртуального каталога env, является частым признаком копирования виртуального каталога env из одного места в другое. Этого следует избегать! Причиной этого является переменная VIRTUAL_ENV, жестко запрограммированная в скрипте [venv_dir]/bin/activate. Поэтому всегда проверяйте, что эта переменная указывает на действительный каталог.

Решение для OP

Чтобы вывести список пакетов из виртуальной среды only , вам необходимо использовать --local флаг для pip freeze или pip list. Вы можете найти это в документации:

-l, --local

Если в virtualenv есть глобальный доступ, не перечисляйте глобально установленный пакеты.

Ключевая фраза: global access . Возможная причина, по которой pip продолжает находить пакеты, находящиеся вне вашей виртуальной среды, могут быть переменными среды PYTHONPATH и PATH. Проверь их. Все, что у вас есть на этих путях, будет видно по пунктам.

...