Czy jest możliwe instalowanie pakietów za pomocą pip z lokalnego systemu plików?
Uruchomiłem python setup.py sdist
pakiet, który utworzył odpowiedni plik tar.gz. Ten plik jest przechowywany w moim systemie pod adresem /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
Teraz w środowisku wirtualnym chciałbym zainstalować pakiety pochodzące z pypi lub z określonej lokalizacji lokalnej /srv/pkg
.
czy to możliwe?
PS
Wiem, że mogę to określić pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
. To zadziała, ale mówię o używaniu /srv/pkg
lokalizacji jako innego miejsca, w którym pip mógłby wyszukiwać, jeśli wpisałem pip install mypackage
.
pip install <Path-to-WHL-file>
.Odpowiedzi:
Jestem pewien, że to, czego szukasz, nazywa się
--find-links
opcją.Chociaż może być konieczne wygenerowanie manekina
index.html
dla lokalnego indeksu pakietów, który zawiera listę łączy do wszystkich pakietów. To narzędzie pomaga:https://github.com/wolever/pip2pi
źródło
pip install mypackage --no-index --find-links file:///srv/pkg/mypackage
powinno działać.easy_install --allow-hosts=None --find-links file:///srv/pkg/mypackage mypackage
--find-links
nadal pozwoli na wyszukiwanie w PyPI, jeśli pakiet nie zostanie znaleziony w określonej lokalizacji lub jeśli dostępna jest nowsza wersja. W systemie Windows uważam, że połączenie tego z--only-binary=packagename
(lub--only-binary=:all:
) jest niezwykle przydatne. Zapobiega to próbom pobrania przez pip wszelkich pakietów z rodzimymi zależnościami, które mają tylko dystrybucje źródłowe na PyPI (a zatem wymagają kompilacji), co jest najczęstszym powodem, dla którego muszę próbować zainstalować z katalogu. W przeciwieństwie do--no-index
tego nadal mogę instalować inne pakiety z PyPI.Co powiesz na::
na przykład,
pip install -e /srv/pkg
gdzie / srv / pkg to katalog najwyższego poziomu, w którym można znaleźć plik „setup.py”.
źródło
--editable
jest to, że wygląda na to, że zagląda do katalogu lokalnego pakietu i ustawia źródło jako repozytorium git, jeśli takie istnieje - nieco bardziej elastyczne niż tylko folder. Nie mogę jednak znaleźć na to dokumentacji.do pip install -e
sprawdzę kod ze zdalnego git, chciałbym zainstalować kod w obecnej postaci (ze zmianami jeszcze nie w zdalnym).Instaluję,
pyfuzzy
ale nie ma go w PyPI; zwraca komunikat:No matching distribution found for pyfuzzy
.Próbowałem zaakceptować odpowiedź
Ale to też nie działa i zwraca następujący błąd:
W końcu znalazłem prosty sposób: https://pip.pypa.io/en/latest/reference/pip_install.html
Więc następujące polecenie działało dla mnie:
Mam nadzieję, że może ci to pomóc.
źródło
Could not find a version that satisfies
błąd. Dzięki.Oto rozwiązanie, które wykorzystałem:
Złożyłem to razem z przykładami instalacji pip, a także z odpowiedzi Rikarda na inne pytanie . Argument „--pre” pozwala instalować wersje nieprodukcyjne. Argument „--no-index” unika przeszukiwania indeksów PyPI. „--Find-links =.” wyszukiwanie argumentów w folderze lokalnym (może być względne lub bezwzględne). Użyłem argumentów „--log-file”, „log.txt” i „-vv” do debugowania. Argument „--upgrade” pozwala instalować nowsze wersje na starszych.
Znalazłem również dobry sposób na ich odinstalowanie. Jest to przydatne, gdy masz kilka różnych środowisk Python. Jest to ten sam podstawowy format, wystarczy użyć „odinstaluj” zamiast „zainstaluj”, ze środkiem bezpieczeństwa, aby zapobiec niezamierzonym odinstalowaniom:
Folder lokalny zawiera następujące pliki: install.py, uninstall.py, mypackagename-1.0.zip
źródło
Opcja --find-links wykonuje zadanie i działa z
requirements.txt
pliku!Możesz umieścić archiwa pakietów w jakimś folderze i pobrać najnowszą bez zmiany pliku wymagań, na przykład
requirements
:Teraz w
requirements/base.txt
zestawie:Świetny sposób na aktualizację zastrzeżonych pakietów, po prostu upuść nowy w folderze
W ten sposób możesz zainstalować pakiety z
local folder
ANDpypi
z tym samym pojedynczym wywołaniem:pip install -r requirements/production.txt
PS. Zobacz mój widelec cookiecutter-djangopackage, aby zobaczyć, jak podzielić wymagania i korzystać z organizacji wymagań opartej na folderach.
źródło
Na stronie pakietów instalacyjnych możesz po prostu uruchomić:
gdzie / srv / pkg / mypackage to katalog zawierający plik setup.py .
Dodatkowo 1 możesz zainstalować go z pliku archiwum:
1 Chociaż zaznaczono to w pytaniu, ze względu na jego popularność, zostało również uwzględnione.
źródło
Zakładając, że masz virtualenv i
requirements.txt
plik, możesz określić w tym pliku, skąd pobrać pakiety:źródło
Uwzględniając wymagania
requirements.txt
iegg_dir
jako katalogmożesz zbudować lokalną pamięć podręczną:
$ pip download -r requirements.txt -d eggs_dir
następnie użycie tej „pamięci podręcznej” jest proste:
$ pip install -r requirements.txt --find-links=eggs_dir
źródło
Aby zainstalować tylko lokalnie, potrzebujesz 2 opcji:
--find-links
: gdzie szukać zależności.file://
Przedrostek wymieniony przez innych nie jest potrzebny .--no-index
: nie szukaj w indeksach pypi brakujących zależności (zależności nie zostały zainstalowane i nie znajdują się na--find-links
ścieżce).Abyś mógł uruchomić z dowolnego folderu:
Jeśli twój mypackage jest poprawnie skonfigurowany, wyświetli listę wszystkich swoich zależności, a jeśli użyłeś pip download, aby pobrać kaskadę zależności (tj. Zależności zależności itp.), Wszystko będzie działać.
Jeśli chcesz użyć indeksu pypi, jeśli jest on dostępny, ale jeśli nie, możesz wrócić do lokalnych kół, możesz go usunąć
--no-index
i dodać--retries 0
. Zobaczysz pauzę pauzy na chwilę, gdy próbuje sprawdzić pypi pod kątem brakującej zależności (jedna niezainstalowana), a gdy stwierdzi, że nie może do niej dotrzeć, wróci do lokalnego. Wydaje się, że nie ma sposobu, aby powiedzieć pipowi, aby „najpierw szukał lokalnych, a potem indeksu”.źródło
Próbowałem osiągnąć coś naprawdę prostego i nieszczęśliwie poniosłem porażkę, prawdopodobnie jestem głupi.
W każdym razie, jeśli masz skrypt /
Dockerfile
który pobiera plik zip pakietu python (np. Z GitHub), a następnie chcesz go zainstalować, możesz użyćfile:///
prefiksu, aby go zainstalować, jak pokazano w poniższym przykładzie :UWAGA : Wiem, że możesz od razu zainstalować pakiet,
pip install https://example.com/mypackage.zip
ale w moim przypadku chciałem zweryfikować sumę kontrolną (nigdy wystarczająco paranoiczną) i nie udało mi się, próbując użyć różnych opcji, które zapewnia pip /#md5
fragment .Zaskakująco frustrujące było robienie czegoś tak prostego bezpośrednio
pip
. Chciałem tylko przekazać sumę kontrolną ipip
sprawdzić, czy zip był wcześniej zgodny instalacją.Prawdopodobnie robiłem coś bardzo głupiego, ale ostatecznie zrezygnowałem i zdecydowałem się na to. Mam nadzieję, że pomoże to innym próbować zrobić coś podobnego.
źródło