Peut-Pip installer les dépendances non spécifiées dans setup.py lors de l'installation?

StackOverflow https://stackoverflow.com/questions/4150423

  •  08-10-2019
  •  | 
  •  

Question

Je Voudrais pip installer une dépendance que j'ai sur GitHub lorsque l'utilisateur exécute la commande pour installer le logiciel d'origine, également de source sur GitHub. Aucun de ces paquets sont sur PyPI (et ne le sera jamais).

Les questions utilisateur la commande:

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

Cette pension a un fichier requirements.txt, avec une autre dépendance sur GitHub:

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

Ce que je voudrais est un simple commande qu'un utilisateur peut émettre d'installer l'emballage d'origine, ont pip trouver le fichier des exigences, puis installez la dépendance aussi.

Était-ce utile?

La solution

Cette répondre m'a aidé à résoudre le même problème que vous parlez.

Il ne semble pas être un moyen facile pour setup.py d'utiliser les exigences fichier directement pour définir ses dépendances, mais les mêmes informations peuvent être mis dans le setup.py lui-même.

J'ai cette requirements.txt:

PIL
-e git://github.com/gabrielgrant/django-ckeditor.git#egg=django-ckeditor

Mais lors de l'installation du paquet contenant de cette requirements.txt, les exigences sont ignorées par pip.

Cette setup.py semble pip coerce dans l'installation des dépendances (y compris ma version github de 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',
    ]
)

Modifier

Cette répondre contient également des informations utiles.

Définition de la version dans le cadre du « #egg = ... » est nécessaire pour identifier la version du paquet est disponible sur le lien. Notez toutefois que si vous voulez toujours dépendre de votre dernière version, vous pouvez définir la version à dev dans install_requires, dependency_links et l'autre paquet est setup.py

Edit:. en utilisant dev que la version est pas une bonne idée, selon les commentaires ci-dessous

Autres conseils

Voici un petit script que j'utilisé pour générer install_requires et dependency_links à partir d'un fichier des exigences.

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)

fait cette réponse à votre question?

setup(name='application-xpto',
  version='1.0',
  author='me,me,me',
  author_email='xpto@mail.com',
  packages=find_packages(),
  include_package_data=True,
  description='web app',
  install_requires=open('app/requirements.txt').readlines(),
  )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top