Can Pip instaluje zależności Nie określone w setup.py w czasie instalacji?

Chciałbym, aby pip zainstalował zależność, którą mam na Githubie, gdy użytkownik wyda polecenie zainstalowania oryginalnego oprogramowania, również ze źródła na Githubie. Żaden z tych pakietów nie jest na PyPi (i nigdy nie będzie).

Użytkownik wydaje polecenie:

pip -e git+https://github.com/Lewisham/cvsanaly@develop#egg=cvsanaly

Ten repo ma Plik requirements.txt, z inną zależnością od Githuba:

-e git+https://github.com/Lewisham/repositoryhandler#egg=repositoryhandler

To, co chciałbym, to pojedyncze polecenie, które użytkownik może wydać, aby zainstalować oryginalny pakiet, aby pip znalazł plik wymagań, następnie zainstaluj również zależność.

Author: A-B-B, 2010-11-11

3 answers

Ta odpowiedź pomogła mi rozwiązać ten sam problem, o którym mówisz.

Nie wydaje się być łatwym sposobem na setup.py aby użyć pliku wymagań bezpośrednio do zdefiniowania jego zależności, ale te same informacje można umieścić w setup.py siebie.

Mam takie wymagania.txt:
PIL
-e git://github.com/gabrielgrant/django-ckeditor.git#egg=django-ckeditor

Ale podczas instalacji tego wymagania.txt zawiera pakiet, wymagania są ignorowane przez pip.

To setup.py wydaje się zmuszać Pipa do instalacji zależności (w tym moja wersja github django-ckeditor):

from setuptools import setup

setup(
    name='django-articles',
    ...,
    install_requires=[
        'PIL',
        'django-ckeditor>=0.9.3',
    ],
    dependency_links = [
        'http://github.com/gabrielgrant/django-ckeditor/tarball/master#egg=django-ckeditor-0.9.3',
    ]
)

Edit:

Ta ODPOWIEDŹ zawiera również kilka przydatnych informacji.

Określenie wersji jako części " # egg=..."jest wymagane, aby określić, która wersja pakietu jest dostępna pod linkiem. zauważ jednak, że jeśli zawsze chcesz polegać na swojej najnowszej wersji, możesz ustawić wersję na dev w install_requires, dependency_links i innych pakietach setup.py

Edit: używanie dev jako wersji nie jest dobrym pomysłem, jak w komentarzach poniżej.

 36
Author: Gabriel Grant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:00:24

Oto mały skrypt, którego użyłem do wygenerowania install_requires i dependency_links z pliku wymagań.

import os
import re

def which(program):
    """
    Detect whether or not a program is installed.
    Thanks to http://stackoverflow.com/a/377028/70191
    """
    def is_exe(fpath):
        return os.path.exists(fpath) and os.access(fpath, os.X_OK)

    fpath, _ = os.path.split(program)
    if fpath:
        if is_exe(program):
            return program
    else:
        for path in os.environ['PATH'].split(os.pathsep):
            exe_file = os.path.join(path, program)
            if is_exe(exe_file):
                return exe_file

    return None

EDITABLE_REQUIREMENT = re.compile(r'^-e (?P<link>(?P<vcs>git|svn|hg|bzr).+#egg=(?P<package>.+)-(?P<version>\d(?:\.\d)*))$')

install_requires = []
dependency_links = []

for requirement in (l.strip() for l in open('requirements')):
    match = EDITABLE_REQUIREMENT.match(requirement)
    if match:
        assert which(match.group('vcs')) is not None, \
            "VCS '%(vcs)s' must be installed in order to install %(link)s" % match.groupdict()
        install_requires.append("%(package)s==%(version)s" % match.groupdict())
        dependency_links.append(match.group('link'))
    else:
        install_requires.append(requirement)
 12
Author: Simon Charette,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-03 07:55:32

Czy to odpowiada na twoje pytanie?

setup(name='application-xpto',
  version='1.0',
  author='me,me,me',
  author_email='[email protected]',
  packages=find_packages(),
  include_package_data=True,
  description='web app',
  install_requires=open('app/requirements.txt').readlines(),
  )
 1
Author: daigorocub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-18 19:35:47