pip install --editable ./ vs python setup.py develop

Есть ли существенная разница между

pip install -e /path/to/mypackage

а вариант setuptools?

python /path/to/mypackage/setup.py develop

person PeterE    schedule 18.05.2015    source источник
comment
Похоже, это обновленная ссылка, описывающая режим разработки: setuptools.readthedocs.io/en/latest/   -  person PaulR    schedule 08.08.2016
comment
если вас интересует удаление (пакеты в режиме разработки / редактирования), попробуйте этот вопрос: stackoverflow.com/questions/17346619/   -  person Charlie Parker    schedule 02.05.2020


Ответы (4)


Старайтесь избегать прямого вызова setup.py, он не сообщит pip, что вы установили свой пакет.

С pip install -e:

Для локальных проектов каталог SomeProject.egg-info создается относительно пути к проекту. Это одно из преимуществ перед простым использованием setup.py develop, который создает «информацию о яйце» непосредственно относительно текущего рабочего каталога.

Подробнее: docs

Также прочтите документы инструментов setuptools.

person sobolevn    schedule 18.05.2015
comment
Должен ли пользователь снова запускать python setup.py sdist после внесения изменений в файл, чтобы изменения вступили в силу? - person variable; 12.10.2019
comment
однако, если вам нужно отлаживать (сам файл setup.py) с помощью set_trace, тогда python setup.py develop позволяет - person mirek; 03.01.2020

Еще одно отличие: pip install -e использует wheel, а python setup.py develop
не использует.

С install вы можете добиться того же поведения, используя
pip install -e /path/to/package --no-use-wheel

Дополнительная информация о колесах: колеса Python

person user2488286    schedule 13.08.2015
comment
Обратите внимание, что согласно pip.pypa.io/en/stable/reference/pip_install, --no-use-wheel УСТАРЕЛО в пользу --no-binary :all: - person Nzbuu; 15.03.2017
comment
Можем ли мы сделать pip install -e для пакета, созданного с помощью sdist? - person variable; 12.10.2019

Другое отличие, которое может благоприятствовать pip install -e, заключается в том, что если ваш проект имеет зависимости в install_requires в setup.py, то pip install -e . устанавливает зависимости с помощью pip, а python setup.py develop может быть установлен с easy_install и может вызвать проблемы re: 'egg-info', как упоминалось выше. Когда install-requires использует dependency_links с настраиваемыми URL-адресами git с прикрепленными идентификаторами яиц, это может особенно раздражать.

person ely    schedule 24.08.2017
comment
это полностью объясняет, почему мой частный пакет не мог быть установлен. это на моем сервере devpi, а не на pypi. благодаря. - person ckot; 23.03.2018
comment
Когда вы говорите, что пакет становится редактируемым, вы имеете в виду, что пользователю придется снова запустить python setup.py sdist после внесения изменений в файл пакета? Или выполнение указанной выше команды не требуется? - person variable; 12.10.2019
comment
@variable, когда вы устанавливаете локальный пакет с pip install -e ., он, по сути, создает символическую ссылку в соответствующем каталоге пакетов сайта Python, чтобы указать на вашу рабочую копию. Изменения кода, внесенные в эту рабочую копию, мгновенно отражаются в установленной версии, поэтому вам не нужно повторно запускать команды установки по ходу работы. Это в первую очередь полезно для разработки в репозитории, который представляет собой устанавливаемый пакет, но также может быть полезно, например, для написание некоторой коллекции модулей только с абсолютным импортом и т. д. - person ely; 14.10.2019

Еще одно отличие: когда вы запускаете python setup.py develop для версии, которая считается предварительным выпуском (возможно, потому, что вы запускаете его из клона git, когда не проверили выпуск), вы разрешите установку предварительной версии. выпуски ваших зависимостей. С другой стороны, с pip install --editable вам нужно будет явно передать --pre, если вы хотите получить эти предварительные версии.

(См. журнал CI со случайно использованными предварительными версиями и сравните это с фиксированной сборкой здесь.)

person Jan Kundrát    schedule 26.06.2020