Python setup.py develop vs install

336

Dwie opcje w setup.py developi installmylą mnie. Według tej strony za pomocądevelop tworzy specjalny link do katalogu stron-pakietów.

Ludzie zasugerowali, żebym użył go python setup.py installdo nowej instalacji i python setup.py developpo wprowadzeniu jakichkolwiek zmian w pliku instalacyjnym.

Czy ktoś może rzucić nieco światła na użycie tych poleceń?

Netro
źródło

Odpowiedzi:

468

python setup.py install służy do instalowania pakietów (zwykle stron trzecich), których nie zamierzasz samodzielnie opracowywać / modyfikować / debugować.

Jeśli chodzi o twoje własne rzeczy, chcesz najpierw zainstalować pakiet, a następnie móc często edytować kod bez konieczności ponownej instalacji pakietu za każdym razem - i właśnie to python setup.py developrobi: instaluje pakiet (zwykle tylko folder źródłowy) w sposób umożliwiający wygodną edycję kodu po jego zainstalowaniu w (wirtualnym) środowisku i natychmiastowe wprowadzenie zmian.

Należy pamiętać, że zaleca się używanie pip install .(instalowanie) i pip install -e .(instalowanie przez programistę) do instalowania pakietów, ponieważ setup.pybezpośrednie wywoływanie spowoduje niewłaściwe działanie w przypadku wielu zależności, takich jak pobieranie wersji wstępnych i niekompatybilne wersje pakietów, lub utrudnianie odinstalowywania pakietu pip.

Erik Kaplun
źródło
81
Erik ma rację. Warto również wiedzieć, że setup.py developjest to --uninstallopcja dostępna po zakończeniu hakowania.
philadams,
5
Ostatnia myśl tutaj jest taka, że ​​inną opcją setup.py developprzy hakowaniu pakietu Pythona jest użycie „prostej (ale wyraźnej) modyfikacji ścieżki, aby poprawnie rozwiązać pakiet” ponownie Kenneth Reitz
philadams
4
Wystąpiły problemy przy python setup.py developpróbie ustawienia Ceilometru na potrzeby rozwoju lokalnego. Skończyło się na użyciu pip install -e PATH(w ramach virtualenv), aby uniknąć problemów, które pojawiły się za pośrednictwemeasy_install .
Joe D'Andrea,
1
nie jestem pewien, czy to ma znaczenie, ale jeśli używam Pythona 3 itp., czy trzeba działać python setup.py developinaczej?
Charlie Parker,
1
Działa z python3, ale nie zapomnij usunąć jakiejkolwiek bieżącej instalacji pip, ponieważ mogą one się ze sobą kolidować (w tej chwili mi się przydarzyło).
Léo Germond
124

Z dokumentacji . Pakiet developnie zainstaluje pakietu, ale utworzy plik .egg-linkz katalogu wdrażania z powrotem do katalogu kodu źródłowego projektu.

To jest jak instalacja, ale zamiast kopiowania do site-packagesniego dodaje łącze symboliczne ( .egg-linkdziała jak wieloplatformowe łącze symboliczne).

W ten sposób możesz edytować kod źródłowy i zobaczyć zmiany bezpośrednio, bez konieczności ponownej instalacji za każdym razem, gdy wprowadzisz niewielką zmianę. Jest to przydatne, gdy jesteś programistą tego projektu, stąd nazwa develop. Jeśli instalujesz pakiet innej osoby, powinieneś użyćinstall

RubenLaguna
źródło
24

Inną rzeczą, która może się przydać podczas korzystania z tej developmetody, jest --useropcja instalacji bez sudo. Dawny:

python setup.py develop --user

zamiast

sudo python setup.py develop
Taylor
źródło
11
IIUC nie powinieneś nigdy setup.py developw swoim systemie, ma to sens tylko w virtualenv.
dividebyzero
2
@dividebyzero Czy masz na myśli, że należy zawsze używać python setup.py develop --user, jeśli dobrze rozumiem? Poza tym, czy możesz mi powiedzieć, gdzie pakiet jest instalowany przy użyciu python setup.py develop --user? Dzięki!
ROBOT AI
2
Myślę, że --userzainstaluje się w katalogu na twoim koncie domowym i nie wpłynie na innych użytkowników w twoim systemie. developUczyni linki do katalogu źródłowego projektu zamiast faktycznie kopiując wszystko. develop --userpowinno być OK, a także developw virtualenv. developDziwny jest tylko faktyczny system, ponieważ inni użytkownicy używają czegoś, co wskazuje na projekt w osobistej kopii kodu źródłowego projektu.
dividebyzero,
4
Jednak wiele (większość?) Osób nie działa w systemach z wieloma użytkownikami
patstew,
1
@boatcoder, Mac i Linux (i Windows) mogą być systemami obsługującymi wiele użytkowników , ale najprawdopodobniej programista jest jedynym (prawdziwym) kontem użytkownika na jego pulpicie i myślę, że to właśnie oznaczało pastew.
MestreLion,