Comment puis-je forcer `setup.py test` pour installer des dépendances dans mon 'virtualenv'?
Dans une croisade pour rendre mon application pip
-installable, je me bats de gros combats avec setuptools
et distribute
. Je suppose que mes dépendances sont correctes, c'est-à-dire que l'installation avec pip install myapp
devrait probablement remplir correctement l'environnement virtuel. Cependant, je voudrais rationaliser le développement pendant que j'y suis, donc mon but est de commencer par un virtualenv
vide et de faire setup.py test
(et plus tard setup.py develop
, mais c'est un combat complètement différent) le remplir avec toutes les dépendances définies.
Et maintenant à mon problème: peu importe à quel point J'essaie, tout ce que je reçois sont des dépendances installées en tant que .egg
s dans mon répertoire de projet qui est sous-optimal à tout le moins. J'ai essayé de créer une nouvelle commande setuptools
qui utiliserait pip
(ce qui semble fonctionner, même si maladroitement) mais cela ne peut pas être sérieusement la solution(sous-classement et substitution).
Alors, comment faire pour que setup.py test
remplisse le virtualevn
au lieu de mon répertoire de travail?
2 réponses
Par conception, vous ne pouvez pas faire entrer les entrées tests_requires
ou setup_requires
dans l'environnement virtuel. L'idée est de séparer ce qui est nécessaire pour effectuer des tests/configuration et ce qui est nécessaire pour utiliser réellement le paquet en cours d'installation. Par exemple, je peux exiger que le module "couverture" soit nécessaire pour exécuter des tests sur mon paquet, mais il n'est utilisé par aucun de mes codes dans le paquet. Par conséquent, si je n'avais pas de "couverture" dans mon environnement quand je vais exécuter des tests, Je ne voudrais pas que "couverture" obtienne installé dans l'environnement si mon paquet n'en avait pas besoin.
Si vous utilisez setuptools
, vous pouvez spécifier les dépendances de test en utilisant l'argument tests_require
mot-clé pour la méthode setup
.
from setuptools import setup
setup(
name='your-package-name',
version='1.0.0',
author='me',
author_email='me@mybasement.com',
install_requires=['Pygments>=1.4'],
tests_require=['nose'],
packages=[
'your_package_name',
],
)
Lorsque vous exécutez python setup.py test
, cela va vérifier nose
et l'installer sur le virtualenv
actuellement actif en utilisant pip
si ce n'est pas déjà disponible.
Notez que cet argument sera ignoré si vous utilisez distribute.core.setup
(aucune commande test
ne sera disponible).