Пип (python) различия между `--install-option = '- prefix`` и` --root` и `--target`

В документации pip не хватает слишком много слов (на моих глазах), о параметрах для работы с источником и получателями.

Я испытал странные вещи, устанавливающие Sphinx с помощью pip3 и играя с доступными параметрами, чтобы, по-видимому, позволить мне установить его именно там, где я хотел (по некоторым причинам, я хочу иметь каждую вещь в своем собственном каталоге). Я говорю "играть", не то, что я не читал документ и не пробовал --help, а потому, что pip3 help install не помог, а официальная документация pip install страница слишком короткая и на самом деле говорит не больше, чем pip3 help install.

Вот эксперименты и наблюдения.

Первый случай с --root

I скачал текущий tar-архив репозитория Sphinx, распаковал его, попал во вновь созданный каталог и сделал:

pip3 install --root /home/<user-name>/apps/sphinx -e .

Хотя это будет то же самое, что и --prefix, поскольку не было опции --prefix, видимо доступной. К моему удивлению, он установил команды в каталоге bin Python3 (который также установлен локально в своем собственном каталоге) вместе с некоторыми вещами в его библиотечном каталоге и странным, вместо каталога /home/<user-name>/apps/sphinx, я получаю /home/<user-name>/apps/sphinx/home/<user-name>/apps/sphinx/…: он добавил указанный путь к себе.

Как особенно последний пункт имеет смысл? Какова цель --root?

Второй случай с --target

Тогда, если это не --root, это может быть --target, поэтому я сделал (после очистки):

pip3 install --target /home/<user-name>/apps/sphinx -e .  

Это не сработало, жалуясь на непризнанную опцию --home.

Что это за --home (который я не указал), о котором он жалуется, и что такое --target?

Третий случай с --install-option='--prefix=…'

После некоторого веб-поиска и потока на StackOverflow я пробовал это:

pip3 install --install-option='--prefix=/home/<user-name>/apps/sphinx' -e .

Он просто жаловался, что не может установить файл .pth, и что-то не так с моим PYTHONPATH, который был перенаправлен для повторного запуска с добавлением определения переменной:

export PYTHONPATH=/home/<user-name>/apps/sphinx/lib/python3.4/site-packages
pip3 install --install-option='--prefix=/home/<user-name>/apps/sphinx' -e .

Мне просто пришлось установить набор PYTHONPATH еще до того, как каталог действительно существует и что-то в нем было установлено, но это было ОК (нужно ли /t pip обновлять PYTHONPATH) во время процесса и напомнить, чтобы установить это окончательно, является спорным вопросом).

Этот вариант, который был хорошим, также был менее заметным.

Другой последний связанный:

Какая разница между --editable и --src?

Обновление # 1

Я не могу сказать, связано ли это Сфинкс, но я заметил еще две вещи.

Выполнение

pip3 install --install-option='--prefix=<install-dir>' -e <repository-dir>

где repository-dir является локальной проверкой Sphinx, Sphinx устанавливается в install-dir, указан в pip3 list, но не может быть удален.

Наоборот, делая

pip3 install --install-option='--prefix=<install-dir>' Sphinx

то есть, если pip3 получить архив, Sphinx не установлен в install-dir, он устанавливается в каталоге python, указан в pip3 list и может быть удален.

В зависимости от того, является ли источник локальным репозиторием или удаленным архивом, он не будет установлен в том же месте и не будет или будет удалён.

Зависимости не были затронуты, обрабатывались одинаково в обоих случаях (устанавливались там, где они ожидались, указывались и удалялись).

Обновление # 2

Поведение с --root заставляет меня думать о каком-то поддельном корне (как тот, который вы получаете при создании пакета Debian или при кросс-компиляции). Если он намеревался быть тем же, то путь, который меня удивил, - это, наоборот, ожидаемый.

Ответ 1

Первый и очевидный вопрос: почему бы вам просто не установить пакет из PyPI?

sudo pip install sphinx

Если вы хотите установить что-либо с файлом setup.py с pip, вы можете использовать флаг --editable:

-e, --editable <path/url>

Установите проект в редактируемом режиме (т.е. setuptools "режим разработки" ) из локального пути проекта или URL-адреса VCS.

Итак, вы можете просто выдать команду (префикс sudo при необходимости):

pip3 install -e /path/to/pkg

где /path/to/pkg - это каталог, в котором setup.py можно найти (где вы извлекли файлы).

Чтобы ответить на другие вопросы:

  • --root <dir> используется для изменения корневого каталога файловой системы, где pip должен устанавливать ресурсы пакета, а не измените, где найти пакет.

  • --target используется для указания pip в какой папке для установки пакета.

  • --install-option используется для установки некоторых переменных, которые будут использоваться setup.py, а не для изменения где pip должен искать файл.