Зависимости 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.