„Pip install --editable ./” vs „python setup.py develop”

177

Czy jest jakaś znacząca różnica między

pip install -e /path/to/mypackage

i wariant setuptools?

python /path/to/mypackage/setup.py develop
PeterE
źródło
1
Wygląda na to, że jest to zaktualizowany link opisujący tryb programowania: setuptools.readthedocs.io/en/latest/ ...
PaulR
jeśli jesteś zainteresowany deinstalacją (pakiety w trybie programistycznym / edytowalnym), wypróbuj to pytanie: stackoverflow.com/questions/17346619/…
Charlie Parker

Odpowiedzi:

130

Staraj się unikać setup.pybezpośredniego dzwonienia , nie powie poprawnie pip, że zainstalowałeś swój pakiet.

Z pip install -e:

W przypadku projektów lokalnych katalog „SomeProject.egg-info” jest tworzony względem ścieżki projektu. Jest to jedna z zalet w porównaniu z samym użyciem setup.py develop, które tworzy „egg-info” bezpośrednio w stosunku do bieżącego katalogu roboczego.

Więcej: docs

Przeczytaj także dokumentację setuptools .

sobolevn
źródło
Czy użytkownik musi ponownie uruchomić 'python setup.py sdist' po dokonaniu zmiany pliku, aby zmiana odniosła skutek?
zmienna
jednak jeśli musisz debugować (sam plik setup.py) za pomocą 'set_trace', wtedy 'python setup.py develop' umożliwia to
mirek
Drugi adres URL jest uszkodzony.
bad_coder
Obie działają dla mnie.
sobolevn
76

Jeszcze jedna różnica: pip install -eużywa koła, podczas gdy python setup.py develop
go nie używa.

Dzięki install, można osiągnąć ten sam problem przy użyciu
pip install -e /path/to/package --no-use-wheel

Więcej informacji o kołach: koła Python

user2488286
źródło
18
Zauważ, że zgodnie z pip.pypa.io/en/stable/reference/pip_install , --no-use-wheelDEPRECATED na rzecz--no-binary :all:
Nzbuu
Czy możemy zrobić pip install -e dla pakietu utworzonego przy użyciu sdist?
zmienna
36

Kolejną różnicą, które mogą sprzyjać pip install -ejest to, że jeśli projekt ma w zależności install_requiresw setup.py, a następnie pip install -e .instaluje zależności z pip, podczas gdy python setup.py developmożna zainstalować z easy_install, i może powodować problemy z ponownym: „jajko-info”, jak wspomniano powyżej. W przypadku install-requiresużywania dependency_linksz niestandardowymi adresami URL git, z dołączonymi identyfikatorami jaj, może to być szczególnie denerwujące.

ely
źródło
1
to całkowicie wyjaśnia, dlaczego nie udało się zainstalować mojego prywatnego pakietu. jest na moim serwerze devpi, a nie na pypi. dzięki.
ckot
Kiedy mówisz, że pakiet można edytować, czy masz na myśli, że użytkownik będzie musiał ponownie uruchomić „python setup.py sdist” po dokonaniu zmiany w pliku pakietu? Czy uruchomienie powyższego polecenia nie jest wymagane?
zmienna
@variable, gdy instalujesz pakiet lokalny za pomocą pip install -e ., zasadniczo tworzy dowiązanie symboliczne w odpowiednim katalogu pakietów witryn Pythona, aby wskazać kopię roboczą. Ponieważ zmiany kodu są wprowadzane do kopii roboczej, jest to natychmiast odzwierciedlane w „zainstalowanej” wersji, więc nie ma potrzeby ponownego uruchamiania poleceń instalacyjnych w trakcie. Jest to przydatne przede wszystkim do tworzenia w repozytorium, które reprezentuje pakiet do zainstalowania, ale może być również przydatne np. Do pisania kolekcji modułów z tylko importami bezwzględnymi itp.
ely
0

Jeszcze inna różnica: kiedy uruchamiasz python setup.py developwersję, która jest uważana za wersję wstępną (być może dlatego, że uruchamiasz ją z klonu git, gdy nie sprawdzałeś wydania), włączysz instalację wstępnych wersji swoich zależności . Z drugiej strony, pip install --editablemusisz przejść --prejawnie, jeśli chcesz te wersje wstępne.

(Zobacz dziennik CI z przypadkowo użytymi wersjami wstępnymi i porównaj go ze stałą kompilacją tutaj ).

Jan Kundrát
źródło