установка пакета pip и virtualenv

Доброе утро!

Краткое резюме: у меня проблема с pip и virtualenv. Независимо от того, активирован ли мой virtualenv, мой pip устанавливает пакеты в пакеты сайтов venv, но когда за пределами моего venv python читает пакеты из совершенно другой папки (подробности ниже), что делает так, что я не могу устанавливать пакеты для моего python вне венв. Я предполагаю, что мне нужно убедиться, что pip устанавливается в разных местах, внутри или за пределами venv. Кажется, я не могу найти файл конфигурации для своего пункта, где он обозначен, и большинство wabpages, на которые я смотрел, либо не имеют отношения к моей проблеме, либо находятся выше моей головы...

Некоторые детали (я все еще новичок в работе с ubuntu, linux и данными python, поэтому, если мне не хватает какой-либо важной информации, скажите об этом, и я постараюсь заполнить то, что отсутствует): За пределами venv:

$which python

приводит к

usr/bin/python

а также

$which pip

дает

/home/username/.local/bin/pip

Я обнаружил, что пакет сайта python может определить, где он ищет пакеты, так что это результат при его использовании (я также включаю то, что уведомило меня о проблеме):

$ python
Python 3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0] on linux
>>> import site
>>> print(site.getsitepackages())
['/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'
>>> exit()
$ pip install numpy
Requirement already satisfied: numpy in ./projectFolder/venv/lib/python3.6/site-packages (1.17.4)

Просматривая каталоги, я не могу найти каталог site-package для python, но я могу найти dist-packages (как указано выше), а в venv есть site-packages, где pip устанавливает пакеты.

Активация моего Venv дает следующие результаты:

(venv)$ which python
/home/username/projectFolder/venv/bin/python
(venv)$ which pip
/home/username/projectFolder/venv/bin/pip

Использование сайта под venv дает:

(venv)$ python
Python 3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0] on linux
>>> import site
>>> print(site.getsitepackages())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'site' has no attribute 'getsitepackages'

1 ответ

Проблема хорошо описана здесь сопровождающим virtualenv: https://github.com/pypa/virtualenv/issues/737#issuecomment-319078189

Я процитирую его комментарий здесь:

Проблема (насколько я понимаю) в том, что virtualenv реализует свою собственную версию site.py, которая не отслеживает полностью основную версию Python (это проблема #355, упомянутая выше - если вы перейдете по этой ссылке и ссылке на различные проблемы, связанные с этим, вы получите предысторию).

Исправить это не так просто, как "синхронизировать с ядром site.py", потому что нам нужно поддерживать несколько версий Python, и site.py между ними изменился.

Другие вопросы по тегам