«Pip install --editable ./» против «python setup.pyvelop»

178

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

pip install -e /path/to/mypackage

а вариант setuptools?

python /path/to/mypackage/setup.py develop
PeterE
источник
1
Похоже, это обновленная ссылка, описывающая режим разработки: setuptools.readthedocs.io/en/latest/…
PaulR
если вы заинтересованы в деинсталляции (пакеты в разработке / редактируемый режим), попробуйте этот вопрос: stackoverflow.com/questions/17346619/…
Чарли Паркер

Ответы:

131

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

С pip install -e:

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

Больше: документы

Также читайте Setuptools' документы .

sobolevn
источник
Нужно ли пользователю снова запускать «python setup.py sdist» после внесения изменений в файл, чтобы изменения вступили в силу?
переменная
однако если вам нужно отладить (сам файл setup.py) с помощью 'set_trace', тогда 'python setup.pyvelop' делает это возможным
mirek
Второй URL не работает.
bad_coder
Оба работают на меня.
Соболевн
76

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

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

Подробнее о колесах: колеса питона

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

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

Ely
источник
1
это полностью объясняет, почему мой личный пакет не был установлен. это на моем сервере devpi не pypi. Спасибо.
ckot
Когда вы говорите, что пакет становится редактируемым, вы имеете в виду, что пользователю придется снова запускать 'python setup.py sdist' после внесения изменений в файл пакета? Или запуск над командой не требуется?
переменная
@variable, когда вы устанавливаете локальный пакет с помощью pip install -e ., он, по сути, создает символическую ссылку в соответствующем каталоге пакетов сайта Python, указывающую на вашу рабочую копию. Поскольку в эту рабочую копию вносятся изменения в код, она мгновенно отражается в «установленной» версии, поэтому вам не нужно повторно запускать команды установки по ходу работы. Это в первую очередь полезно для разработки в хранилище , которое представляет собой устанавливаемый пакет, но также может быть полезно, например , для написания некоторого набора модулей только с абсолютным импортом и т.д.
Ely
0

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

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

Ян Кундрат
источник