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

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

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

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

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

Я загрузил текущий архив хранилища 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 еще до того, как каталог действительно существует, и что-то было установлено в нем, но это было нормально (нужно ли, чтобы 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 или при кросс-компиляции). Если он намеревается быть тем же, то путь, который меня удивил, наоборот, ожидался.

  • Как добавить свойство в класс динамически?
  • Cython: невозможно преобразовать объект Python в 'double *'
  • Обратный URL-адрес изображения в Django Rest Framework
  • Предварительное заполнение BooleanField, как отмечено (WTForms)
  • Построение большого числа точек и краев в matplotlib
  • Python Pandas DataFrame - невозможно отобразить полосы и линии на тех же осях
  • SQLAlchemy + SQL Injection
  • Selenium python find_element_by_class_name () перестает работать с версии 2.2 до 2.21 - не может использовать 'Compound Class Name'
  • One Solution collect form web for “Пип (python) различия между `–install-option = '- prefix“ и` –root` и `–target`”

    Первый и очевидный вопрос: почему бы вам просто не установить пакет из 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 можно найти (где вы извлекли файлы).

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

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

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

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

    Python - лучший язык программирования в мире.