Python setup.py разработка против установки

336

Два варианта в setup.py developи installменя смущают. Согласно этому сайту , используя developсоздает специальную ссылку на каталог сайтов-пакетов.

Люди предложили, чтобы я использовал python setup.py installдля новой установки и python setup.py developпосле внесения каких-либо изменений в установочный файл.

Может кто-нибудь пролить свет на использование этих команд?

Netro
источник

Ответы:

468

python setup.py install используется для установки (как правило, сторонних) пакетов, которые вы не собираетесь разрабатывать / модифицировать / отлаживать самостоятельно.

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

Обратите внимание, что для установки пакетов настоятельно рекомендуется использовать pip install .(установить) и pip install -e .(установить разработчиком), так как setup.pyпрямой вызов приведет к неправильным действиям для многих зависимостей, таких как предварительные выпуски пакетов и несовместимые версии пакетов, или затруднит удаление пакета pip.

Эрик Каплун
источник
81
Эрик прав. Также полезно знать, что setup.py developпоставляется с --uninstallопцией, когда вы закончите взламывать.
Philadams
5
Последняя мысль здесь заключается в том, что setup.py developпри взломе пакета python можно использовать «простую (но явную) модификацию пути для правильного разрешения пакета», - Kenneth Reitz
philadams
4
Я столкнулся с проблемами, python setup.py developпытаясь настроить Ceilometer для местного развития. Я закончил тем, что использовал pip install -e PATH(в пределах virtualenv), чтобы избежать проблем, которые возникли черезeasy_install .
Джо д'Андреа
1
не уверен, что это имеет значение, но если я использую Python 3 и т. д., нужно ли работать по- python setup.py developдругому?
Чарли Паркер
1
Он работает с python3, но не забудьте удалить все текущие установки pip, которые у вас могут быть, так как они будут конфликтовать друг с другом (это случилось со мной в данный момент).
Лео Жермонд
124

Из документации . Пакет developне будет установлен, но он будет создан .egg-linkв каталоге развертывания обратно в каталог исходного кода проекта.

Так что это похоже на установку, но вместо копирования в site-packagesнее добавляется символическая ссылка ( .egg-linkдействует как мультиплатформенная символическая ссылка).

Таким образом, вы можете редактировать исходный код и видеть изменения напрямую, без необходимости переустанавливать каждый раз, когда вы вносите небольшие изменения. Это полезно, когда вы являетесь разработчиком этого проекта, отсюда и название develop. Если вы просто устанавливаете чужой пакет, вы должны использоватьinstall

RubenLaguna
источник
24

Еще одна вещь, которая может оказаться полезной при использовании этого developметода, это --userвозможность установки без sudo. Пример:

python setup.py develop --user

вместо того

sudo python setup.py develop
Тейлор
источник
11
IIUC вы никогда не должны setup.py developв вашей системе, это имеет смысл только в virtualenv.
divybyzero
2
@dividebyzero Вы имеете в виду, всегда нужно использовать python setup.py develop --user, если я правильно понимаю? Кроме того, не могли бы вы сказать мне, где пакет установлен с помощью python setup.py develop --user? Спасибо!
ROBOT AI
2
Я думаю, что --userбудет установлен в каталог в вашей домашней учетной записи, и не повлияет на других пользователей в вашей системе. Он developсоздаст ссылки на исходный каталог вашего проекта вместо того, чтобы копировать все. develop --userдолжно быть в порядке, и developв virtualenv тоже. developСтранно только для реальной системы, потому что другие пользователи могут использовать что-то, что указывает на проект в вашей личной копии исходного кода проекта.
Dividebyzero
4
Многие (большинство?) Люди не работают в многопользовательских системах
patstew
1
@boatcoder, Mac и Linux (и Windows) могут быть многопользовательскими способными системы, но , скорее всего , разработчиком является единственным (реальный) учетной записью пользователя его стола, и я считаю , что это то , что pastew имело в виде.
МестреЛион