Зависимости venv добавляются без загрузки

Я использую виртуальные среды в своих проектах django. Когда я создаю venv, я делаю следующее из командной строки

cd Dev
python3 -m venv <name of venv>

Это создает папку venv на моей машине mac в папке Dev.

После того как я установил django в venv, я использую команду pip list. На данный момент список содержит только пакеты django по умолчанию. Это выглядит, например, так:

asgiref    3.5.2
Django     4.0.6
pip        22.0.4
setuptools 58.1.0
sqlparse   0.4.2

Затем я начинаю свой проект django следующим образом.

django-admin startproject <name of project> 

После этого, когда я перемещаю папку venv в папку основного проекта и снова запускаю pip list, все зависимости из предыдущих проектов добавляются в список. Теперь это выглядит следующим образом

asgiref             3.4.1
boto3               1.24.12
botocore            1.27.12
certifi             2022.5.18.1
charset-normalizer  2.0.12
Django              4.0.5
django-cors-headers 3.13.0
django-dotenv       1.4.2
django-embed-video  1.4.4
django-filter       21.1
django-htmx         1.9.0
django-js-asset     2.0.0
django-mathfilters  1.0.0
django-storages     1.12.3
djangorestframework 3.13.1
gunicorn            20.1.0
idna                3.3
jmespath            1.0.1
Pillow              9.1.1
pip                 22.1.2
psycopg2            2.9.3
psycopg2-binary     2.9.3
python-dateutil     2.8.2
pytz                2022.1
requests            2.28.0
s3transfer          0.6.0
setuptools          58.1.0
six                 1.16.0
sqlparse            0.4.2
urllib3             1.26.9

Я не могу понять, почему это происходит.

Не перемещайте виртуальную среду после создания. См. этот вопрос для мотивации и объяснения. Вы можете установить Django на системном уровне и создавать окружение только тогда, когда каталог проекта уже существует, чтобы избежать этого перемещения.

Вот почему ваше окружение перестает работать после перемещения. Предположим (/ для простоты), что у вас есть /myenv путь окружения, тогда после . activate ваш путь выглядит как

PATH="/myenv/bin:<other entries>:/usr/bin:<...>"

Теперь python разрешается (which python) /myenv/bin/python.

Затем вы перемещаете свое окружение. PATH остается неизменным, но теперь нет каталога /myenv/bin, поэтому python разрешается в /usr/bin/python, а pip - в /usr/bin/pip. Тот факт, что теперь pip имеет много доступных пакетов, означает, что вы установили зависимости для вашего предыдущего проекта по всей системе (возможно, случайно, забыв активировать venv). Вы можете подтвердить это, используя pip без активного venv.

Вернуться на верх