Възможно ли е да се инсталират пакети с помощта на pip от локалната файлова система?
Изпълних python setup.py sdist
за моя пакет, който създаде съответния tar.gz файл. Този файл се съхранява в моята система на адрес /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
Сега във виртуална среда бих искал да инсталирам пакети, идващи от pypi или от конкретното локално място /srv/pkg
.
Възможно ли е това?
PS
Знам, че мога да задам pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
. Това ще проработи, но аз говоря за използването на местоположението /srv/pkg
като друго място, което pip да търси, ако напиша pip install mypackage
.
Какво ще кажете за::
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.
например, pip install -e /srv/pkg
където /srv/pkg е директорията от най-високо ниво, в която може да бъде намерен 'setup.py'.
Почти съм сигурен, че това, което търсите, се нарича опция --find-links
.
Въпреки това може да се наложи да генерирате фиктивен index.html
за вашия локален индекс на пакетите, който съдържа линкове към всички пакети. Този инструмент помага:
Това е решението, което в крайна сметка използвах:
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")
Сглобих го от pip install examples, както и от Rikard's answer на друг въпрос. Аргументът "--pre" ви позволява да инсталирате непроизводствени версии. Аргументът "--no-index" предотвратява търсенето в индексите на PyPI. Аргументът "--find-links=." търси в локалната папка (може да е относителна или абсолютна). За отстраняване на грешки използвах аргументите "--log-file", "log.txt" и "-vv". Аргументът "--upgrade" ви позволява да инсталирате по-нови версии вместо по-стари.
Намерих и добър начин да ги деинсталирам. Това е полезно, когато имате няколко различни среди на Python. Това е същият основен формат, само че с използване на "uninstall" вместо "install", с предпазна мярка за предотвратяване на непреднамерени деинсталации:
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")
Локалната папка съдържа тези файлове: install.py, uninstall.py, mypackagename-1.0.zip