Vous pouvez inverser la situation et lister les dépendances dans la rubrique setup.py
et ne comportent qu'un seul caractère - un point .
- en requirements.txt
au lieu de cela.
Par ailleurs, même si cela n'est pas conseillé, il est toujours possible d'analyser le fichier requirements.txt
(s'il ne renvoie pas à des exigences externes par URL) avec le hack suivant (testé avec pip 9.0.1
) :
install_reqs = parse_requirements('requirements.txt', session='hack')
Cela ne filtre pas marqueurs d'environnement mais
Dans les anciennes versions de pip, plus précisément plus ancien que 6.0 Il existe une API publique qui peut être utilisée à cette fin. Un fichier d'exigences peut contenir des commentaires ( #
) et peut inclure d'autres fichiers ( --requirement
o -r
). Ainsi, si vous voulez vraiment analyser un fichier requirements.txt
vous pouvez utiliser l'analyseur pip :
from pip.req import parse_requirements
# parse_requirements() returns generator of pip.req.InstallRequirement objects
install_reqs = parse_requirements(<requirements_path>)
# reqs is a list of requirement
# e.g. ['django==1.5.1', 'mezzanine==1.4.6']
reqs = [str(ir.req) for ir in install_reqs]
setup(
...
install_requires=reqs
)
10 votes
install_requires
est utilisé pour déclarer les dépendances sur les paquets qui sont nécessaires au fonctionnement du paquet et qui sont utilisées par le développeur du paquet, tandis querequirements.txt
est utilisé pour automatiser l'installation d'environnements, ce qui permet d'installer des logiciels supplémentaires et d'effectuer l'épinglage des versions, et est utilisé par les administrateurs système qui déploient le paquet. Leur rôle et leur public cible diffèrent considérablement, donc essayer de les combiner comme le souhaite l'OP est une véritable erreur de conception à mon avis.9 votes
Mes deux centimes. N'utilisez pas requirements.txt dans votre setup.py. Les objectifs sont différents, sontd caremad.io/2013/07/setup-vs-requirement
8 votes
Je vois beaucoup de réponses compliquées. Qu'est-ce qui ne va pas avec une bonne vieille
[line.strip() for line in open("requirements.txt").readlines()]
?1 votes
Il n'est pas recommandé de le faire. Mais si c'est vraiment nécessaire, c'est simple : outils d'installation dispose déjà de tout ce qui est nécessaire
pkg_resources.parse_requirements()