Właśnie zacząłem pracować z setuptools i virtualenv. Mój pakiet wymaga najnowszego narzędzia Python-Gearman, który jest dostępny tylko z GitHub. Wersja Python-gearman na PyPI jest stara. Źródło Github jest kompatybilne z setuptools, tzn. Ma setup.py itp. Czy istnieje sposób, aby setuptools pobrał i zainstalował nową wersję zamiast szukać jej w PyPI i instalować starą?
FYI, nowy Python-Gearman to http://github.com/mtai/python-gearman
python
setuptools
distutils
pypi
andrei
źródło
źródło
python setup.py install
w katalogu źródłowym?easy_install
lubpip
zainstalować go bezpośrednio z Github. Ale jest też inne rozwiązanie, czy rozważałeś dodanie pakietu do PyPI?buildout
? Ma kilka gotowych wtyczek Git.Odpowiedzi:
Kluczem jest wskazanie easy_install, gdzie można pobrać pakiet. W tym konkretnym przypadku można go znaleźć pod adresem URL http://github.com/mtai/python-gearman/tarball/master . Jednak ten link sam w sobie nie zadziała, ponieważ easy_install nie może stwierdzić, patrząc na adres URL, co otrzyma.
Zmieniając go na http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta zamiast tego easy_install będzie w stanie zidentyfikować nazwę pakietu i jego wersję.
Ostatnim krokiem jest dodanie adresu URL do pakietów dependency_links, np .:
Teraz, gdy TWÓJ pakiet jest instalowany, easy_install odkryje, że istnieje „gearman 2.0.0beta” dostępny do pobrania z tego adresu URL i szczęśliwie wybierze go zamiast tego na PyPI, jeśli określisz „gearman> = 2.0.0beta” w twoich zależnościach ...
(Zwykle sposobem tego rodzaju jest umieszczenie linku na swojej stronie PyPI do źródła do pobrania; w tym przypadku, jeśli autor pakietu gearman umieścił link taki jak powyżej, byłbyś już ustawiony . Zazwyczaj ludzie zaznaczają wersję rozwojową za pomocą „myproject-dev”, a następnie używają wymagania „myproject> = somever, == dev”, więc jeśli nie ma pakietu w jakimkolwiek lub wyższym, easy_install spróbuje sprawdź lub pobierz wydanie.)
Musisz określić,
--process-dependency-links
kiedy używaszpip
. Zauważ, że przetwarzanie linków zależności jest przestarzałe i zostanie usunięte w przyszłej wersji.źródło
beta
sufiksem na istniejącej wersji na PyPI, nadal instaluje pakiet z PyPI zamiast tego zdefiniowanego wdependency_links
. Jeśli spróbujesz ustawić wyższą wersję niż ta, która istnieje w PyPI z#egg=package-version
, narzędzie konfiguracyjne zgłosiCould not find a version that satisfies the requirement
błąd i wyświetli listę wszystkich wersji dostępnych w PyPI. Zauważ, że próbuję skompilować mój pakiet za pomocąsdist
, a następnie zainstalować go zpip install http://url/to/my/generated/tar
.easy_install http://url/to/my/generated/tar
, wszystko działa zgodnie z oczekiwaniami ... Masz pojęcie dlaczego?--process-dependency-links
został usunięty odpip
19! Zobacz: github.com/pypa/pip/issues/6162Możesz użyć
pip install protocol+location[@tag][#egg=Dependency]
formatu, aby zainstalować bezpośrednio ze źródła przy użyciu pip.Git
Bystry
SVN
Bzr
Obsługiwane są następujące protokoły:
[+git, +svn, +hg, +bzr]
Wersje
@tag
pozwala określić konkretną wersję / tag do wyewidencjonowania.#egg=name
pozwala określić, czym jest projekt jako zależność dla innych.Kolejność musi być zawsze
@tag#egg=name
.Prywatne repozytoria
Możesz także zainstalować z prywatnych repozytoriów, zmieniając protokół na SSH (
ssh://
) i dodając odpowiedniego użytkownika (git@
):Możesz także zainstalować z prywatnych repozytoriów, podając nazwę użytkownika / hasło.
Github umożliwia tworzenie osobistych tokenów OAuth, które można cyklicznie
wymagania.txt
requirements.txt
służy do określenia zależności projektu:wymagania.txt
Nie są one instalowane automatycznie wraz z pakietem i należy je zainstalować za pomocą polecenia
pip -r requirements.txt
.W tym pliki wymagań
Pliki wymagań mogą zawierać inne pliki wymagań:
wymagania-docs.txt
wymagania-dev.txt
wymagania.txt
setup.py
Pliki wymagań mogą instalować zależności określone w
setup.py
następującym poleceniu:setup.py
można również zainstalować z repozytoriów, używając tej samej składni co powyżej, ale używającdependency_links
wartości podanej w tej odpowiedzi .Bibliografia:
https://pip.pypa.io/en/latest/user_guide.html#installing-packages https://pip.pypa.io/en/latest/reference/pip_install.html
źródło
extras_require={'all': [repo @ git+https://github.com/username/repo.git]}
Jak po prostu musiałem zrobić to samo, znalazłem inny sposób to zrobić jako
pip
„s--process-dependency-links
mają zostać usunięte wpip
19,0 według tego komentarza .pip
18.1 zawiera następującą funkcjęZ opisu PEP 508 składnia takich zależności URL wygląda następująco:
Więc w twoim
setup.py
to by wyglądałoZauważ, że odsyłacz jest plikiem archiwum i może być również konkretną wersją lub gałęzią repozytorium, jak opisano w tej odpowiedzi . Zobacz także tę odpowiedź dotyczącą pracy z innymi hostami repozytorium.
O ile wiem, najłatwiejszym sposobem zaktualizowania zależności jest użycie
pip install -I .
podczas instalowania pakietu z jego katalogu.źródło
pip install
obsługuje, takie jak adresy URL git#subdirectory=...
itp.? A może wymyślili zupełnie nową składnię z różnymi funkcjami przedstawionymi w inny i niekompatybilny sposób?distutils.core.setup
ipip 19.1.1
requirements.txt
nie jest jednak zgodny zpip install -r requirments.txt
requirments.txt
zobaczyć, do kogo się odnosisz ?Vanilla
setuptools
nie obsługuje pobierania bezpośrednio z repozytorium git, ale możesz użyć jednego z linków do źródła pobierania z tej strony, na przykład:źródło
pip
lub takie,buildout
które mają bardziej wyrafinowane zarządzanie wymaganiami. Zobacz na przykład: pip.openplans.org/#requirements-files