Просматривая документы и некоторые старые сообщения SO, я наткнулся на этот ответ и официальные Примечания к выпуску .
На моем Ubuntu 16.04
иvirtualenv 15.0.1
combo, папка ~/.local
содержит все связанные с Python библиотеки, документацию и двоичные файлы.
Я подозреваю, что virtualenv пытается «сопоставить» этот подход, чтобы сохранить совместимость со сценариями, запускаемыми в пустой системе, поскольку Python $PATH
ищет там модули, пакеты и т. Д., Связанные с Python.
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print '\n'.join(sys.path)
/usr/lib/python2.7
/usr/lib/python2.7/plat-x86_64-linux-gnu
...
/home/<username>/.local/lib/python2.7/site-packages
...
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages
Если я запускаю одну и ту же команду внутри моего virtualenv, я получаю оба каталога в своем пути Python.
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print '\n'.join(sys.path)
/home/<username>/python-venv-tests/lib/python2.7
/usr/lib/python2.7
...
/home/<username>/python-venv-tests/local/lib/python2.7/site-packages
/home/<username>/python-venv-tests/lib/python2.7/site-packages
...
Итак, чтобы ответить на ваш вопрос
- Этот каталог
.local
содержит только символические ссылки на «правильные» /bin, /include, /lib
вашей виртуальной среды, поэтому нет опасности дублирования библиотек - Скорее всего, это делается в качестве меры совместимости с Ubuntu с использованием
~/.local
для пакетов Python - Это означает, что вы можете удалить это и / или изменить свой Python
$PATH
, если вам это действительно нужно, но это не окажет никакого влияния на ваш рабочий процесс (или если вы планируетеперенести виртуальный env на другой хост). - В общем, я бы рекомендовал оставить все как есть, чтобы виртуальная среда соответствовала структуре системывозможно, и что другие сценарии / пользователи, которые могут иметь жестко закодированные значения в зависимости от этого, избегают ошибок.