Почему у меня уже установлены модули в моем 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, потому что это означает, что эти команды никогда не будут доступны.

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