Инсталиране на пакети Python от папка на локалната файлова система във virtualenv с pip

Възможно ли е да се инсталират пакети с помощта на 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'.

Коментари (7)
Решение

Почти съм сигурен, че това, което търсите, се нарича опция --find-links.

Въпреки това може да се наложи да генерирате фиктивен index.html за вашия локален индекс на пакетите, който съдържа линкове към всички пакети. Този инструмент помага:

https://github.com/wolever/pip2pi

Коментари (5)

Това е решението, което в крайна сметка използвах:

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

Коментари (1)