Доброе утро!
Краткое резюме: у меня проблема с 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'
Проблема хорошо описана здесь мейнтейнером virtualenv: https://github.com/pypa/virtualenv/issues/737#issuecomment-319078189
Процитирую его комментарий здесь:
Проблема (насколько я понимаю) заключается в том, что virtualenv реализует собственный версия site.py, которая не отслеживает основную версию Python отлично (это проблема № 355, упомянутая выше - если вы перейдите по этой ссылке и ссылку на различные вопросы, связанные с там вы получите фон).
Исправить это не так просто, как «синхронизировать с основным site.py», потому что нам нужно поддерживать несколько версий Python, и site.py изменился между ними.