Почему у меня уже установлены модули в моем virtualenv?
У меня есть глобально установленные модули на моем компьютере, но когда я создаю virtualenv, некоторые из модулей уже предустановлены в нем, но когда я выполняю 'pip freeze' в моем virtualenv, нет установленных модулей. Такие команды как 'django-admin', 'cookiecutter' уже работают в моем virtualenv, хотя я никогда не устанавливал их в нем. Но другие команды, такие как 'numpy' или 'pandas' не работают, хотя я установил их на машине глобально, как django или cookiecutter. Как мне это исправить? Я использую python версии 3.9.6.
TL;DR: Команды django-admin
и cookiecutter
доступны из вашей виртуальной среды, потому что они находятся в PATH. Это не связано с виртуальной средой Python, а скорее обусловлено всей вашей системой. Если вы хотите сделать глобальные пакеты доступными в вашей виртуальной среде, смотрите этот ответ.
django-admin
и cookiecutter
- это исполняемые файлы. Они находятся в какой-то папке в вашей системе (скорее всего, в папке Scripts вашей установки Python), и эта папка находится в PATH. Поэтому оболочка может получить к ним доступ, независимо от того, находитесь ли вы в виртуальной среде.
В отличие от этого, numpy
и pandas
являются только библиотеками. Поэтому, когда вы пытаетесь импортировать их в свой код, который выполняется в виртуальной среде, доступ к ним невозможен. Это можно изменить, либо установив их в виртуальной среде, либо включив пакеты системного сайта, что вы можете увидеть в этом ответе.
Если вы попытаетесь import django
или cookiecutter
, это тоже не сработает (в вашей виртуальной среде), так же как numpy
или pandas
. Нет способа "исправить это", потому что это не сломано. Я бы не советовал удалять Scripts из PATH, потому что это означает, что эти команды никогда не будут доступны.