È possibile installare pacchetti usando pip dal filesystem locale?
Ho eseguito python setup.py sdist
per il mio pacchetto, che ha creato il file tar.gz appropriato. Questo file è memorizzato sul mio sistema in /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
Ora in un ambiente virtuale vorrei installare pacchetti provenienti da pypi o dalla specifica posizione locale /srv/pkg
.
È possibile?
PS
So che posso specificare pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
. Questo funzionerà, ma sto parlando di usare la posizione /srv/pkg
come un altro posto in cui pip può cercare se scrivo pip install mypackage
.
Che dire di::
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.
ad esempio, pip install -e /srv/pkg
dove /srv/pkg è la directory di primo livello dove 'setup.py' può essere trovato.
Sono abbastanza sicuro che quello che stai cercando si chiama opzione --find-links
.
Anche se potresti aver bisogno di generare un dummy index.html
per il tuo indice locale dei pacchetti che elenca i collegamenti a tutti i pacchetti. Questo strumento aiuta:
Questa è la soluzione che ho finito per usare:
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")
Ho messo insieme i pezzi da pip install examples e da Rikard'risposta su un'altra domanda. L'argomento "--pre" ti permette di installare versioni non di produzione. L'argomento "--no-index" evita di cercare negli indici di PyPI. L'argomento "--find-links=." cerca nella cartella locale (può essere relativa o assoluta). Ho usato gli argomenti "--log-file", "log.txt", e "-vv" per il debug. L'argomento "--upgrade" ti permette di installare versioni più recenti su quelle più vecchie.
Ho anche trovato un buon modo per disinstallarle. Questo è utile quando si hanno diversi ambienti Python. È lo stesso formato di base, solo usando "uninstall" invece di "install", con una misura di sicurezza per prevenire disinstallazioni involontarie:
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")
La cartella locale contiene questi file: install.py, uninstall.py, mypackagename-1.0.zip