web-dev-qa-db-fra.com

Installer les dépendances à partir de setup.py

Je me demande si aussi bien que les packages .deb par exemple, c'est possible dans mon setup.py je configure les dépendances pour mon package, et lance:

$ Sudo python setup.py install

Ils sont installés automatiquement. J'ai déjà fait des recherches sur Internet, mais tout ce que j'ai découvert me laisse perplexe, des choses comme "nécessite", "install_requires" et "requirements.txt"

25
adinanp

Une autre solution possible

try:
    # for pip >= 10
    from pip._internal.req import parse_requirements
except ImportError:
    # for pip <= 9.0.3
    from pip.req import parse_requirements

def load_requirements(fname):
    reqs = parse_requirements(fname, session="test")
    return [str(ir.req) for ir in reqs]

setup(name="yourpackage", install_requires=load_requirements("requirements.txt"))

7
Zaytsev Dmitry

Créez simplement requirements.txt dans votre dossier lib et écrivez toutes les dépendances comme ceci:

gunicorn
docutils>=0.3
lxml==0.5a7

Créez ensuite un setup.py script et lire le requirements.txt dans:

import os
thelibFolder = os.path.dirname(os.path.realpath(__file__))
requirementPath = thelibFolder + '/requirements.txt'
install_requires = [] # Examples: ["gunicorn", "docutils>=0.3", "lxml==0.5a7"]
if os.path.isfile(requirementPath):
    with open(requirementPath) as f:
        install_requires = f.read().splitlines()
setup(name="yourpackage", install_requires=install_requires, [...])

L'exécution de python setup.py install installera votre package et toutes les dépendances. Comme @jwodder l'a dit, il n'est pas obligatoire de créer un requirements.txt fichier, vous pouvez simplement définir install_requires directement dans le setup.py script. Mais écrire un requirements.txt fichier est une bonne pratique.

Dans la fonction de configuration, vous devez également définir version, packages, author, etc., lisez le document pour un exemple complet: https: // docs. python.org/3.7/distutils/setupscript.html

Le répertoire de votre package ressemblera à ceci:

├── yourpackage
│   ├── yourpackage
│   │   ├── __init__.py
│   │   └── yourmodule.py
│   ├── requirements.txt
│   └── setup.py
6
hayj