Er det mulig å installere pakker ved hjelp av pip fra det lokale filsystemet?
Jeg har kjørt python setup.py sdist
for pakken min, som har opprettet den riktige tar.gz-filen. Denne filen er lagret på systemet mitt på /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
Nå i et virtuelt miljø ønsker jeg å installere pakker enten fra pypi eller fra den spesifikke lokale plasseringen /srv/pkg
.
Er dette mulig?
PS
Jeg vet at jeg kan spesifisere pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
. Det vil fungere, men jeg snakker om å bruke /srv/pkg
plassering som et annet sted for pip å søke hvis jeg skrev pip install mypackage
.
Hva med::
pip install --help
...
-e, --editable <path/url> Install a project in editable mode (i.e. setuptools
"develop mode") from a local project path or a VCS url.
f.eks, pip install -e /srv/pkg
der /srv/pkg er katalogen på øverste nivå der 'setup.py' finnes.
Jeg er ganske sikker på at det du leter etter kalles --finne-lenker
-alternativet.
Selv om du kanskje må generere en dummy index.html
for din lokale pakkeindeks som viser lenkene til alle pakkene. Dette verktøyet hjelper:
Dette er løsningen jeg endte opp med å bruke:
import pip
def install(package):
# Debugging
# pip.main(["install", "--pre", "--upgrade", "--no-index",
# "--find-links=.", package, "--log-file", "log.txt", "-vv"])
pip.main(["install", "--upgrade", "--no-index", "--find-links=.", package])
if __name__ == "__main__":
install("mypackagename")
raw_input("Press Enter to Exit...\n")
Jeg satte dette sammen fra pip-installasjonseksempler samt fra Rikards svar på et annet spørsmål. Argumentet "--pre" lar deg installere ikke-produksjonsversjoner. Argumentet "--no-index" unngår å søke i PyPI-indeksene. Argumentet "--find-links=." søker i den lokale mappen (dette kan være relativt eller absolutt). Jeg brukte argumentene "--log-file", "log.txt" og "-vv" for feilsøking. Argumentet "-upgrade" lar deg installere nyere versjoner over eldre.
Jeg fant også en god måte å avinstallere dem på. Dette er nyttig når du har flere forskjellige Python-miljøer. Det er det samme grunnleggende formatet, bare ved å bruke " avinstallere " i stedet for " installere ", med et sikkerhetstiltak for å forhindre utilsiktede avinstallasjoner:
import pip
def uninstall(package):
response = raw_input("Uninstall '%s'? [y/n]:\n" % package)
if "y" in response.lower():
# Debugging
# pip.main(["uninstall", package, "-vv"])
pip.main(["uninstall", package])
pass
if __name__ == "__main__":
uninstall("mypackagename")
raw_input("Press Enter to Exit...\n")
Den lokale mappen inneholder disse filene: install.py, uninstall.py, mypackagename-1.0.zip