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 .eggs 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?

29
demandé sur Nikolai Prokoschenko 2012-03-07 23:10:17

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.

12
répondu Ben Root 2014-01-08 18:06:10

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).

-5
répondu modocache 2012-05-11 15:05:08