Può Pip installare le dipendenze non specificati nel setup.py al momento dell'installazione?

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

  •  08-10-2019
  •  | 
  •  

Domanda

Mi piacerebbe pip di installare una dipendenza che ho su GitHub quando l'utente invia il comando per installare il software originale, anche da fonte su GitHub. Nessuno di questi pacchetti sono in Cheese Shop (e mai lo sarà).

I problemi degli utenti il ??comando:

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

Questa repo ha un file requirements.txt, con un altro dipendenza da GitHub:

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

Quello che mi piacerebbe è un singolo comando che un utente può rilasciare per installare il pacchetto originale, hanno pip trovare il file requisiti, quindi installare la dipendenza troppo.

È stato utile?

Soluzione

Questo rispondere a mi ha aiutato a risolvere lo stesso problema si sta parlando.

Ci non sembra essere un modo semplice per setup.py di utilizzare i requisiti di file direttamente per definire le sue dipendenze, ma la stessa informazione può essere messo in setup.py stesso.

ho questo requirements.txt:

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

Ma quando si installa il pacchetto contenente quel requirements.txt, i requisiti sono ignorati dai pip.

Questa setup.py sembra costringere PIP a installare le dipendenze (tra cui la mia versione github di 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',
    ]
)

Modifica

Questo rispondere contiene anche alcune informazioni utili.

Come specificare la versione come parte del "#egg = ..." è necessaria per identificare la versione del pacchetto è disponibile al link. Si noti, tuttavia, che se si vuole sempre dipenderà dalla vostra ultima versione, è possibile impostare la versione a dev in install_requires, dependency_links e l'altro pacchetto di setup.py

Modifica:. utilizzando dev come la versione non è una buona idea, come da commenti qui sotto

Altri suggerimenti

Ecco un piccolo script che ho usato per generare install_requires e dependency_links da un file di requisiti.

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)

fa la tua domanda questa risposta?

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(),
  )
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top