2017-05-08 3 views
0

Est-il possible de dire à pip d'ignorer certaines setup_requires dépendances si elles ne sont pas nécessaires?Les dépendances d'installation conditionnelles conditionnelles dans setup.py

Dans mon scénario, j'ai pytest-runner déclaré comme une dépendance d'installation (qui est utilisée pour exécuter des tests) dans mon fichier setup.py. Quand j'essaye d'installer mon paquet (IEe: pip installe mon-paquet.tar.gz) il télécharge pytest-runner ou il échoue il n'est pas disponible (*).

Dans setup.py J'ai:

... 
setup_requires=['pytest-runner', 'flake8'] 
... 

Je voudrais dire setup.py que d'utiliser uniquement pytest-coureur lors de l'exécution des tests. Est-ce possible?

Comme @deceze suggéré, cette déclaration fonctionnera:

setup_requires=['pytest-runner', 'flake8'] if 'test' in sys.argv else [] 

Mais je ne veux pas d'ajouter une logique à setup.py. (0) L'environnement est très restreint, c'est pourquoi le téléchargement d'une dépendance est un roadblock.

Répondre

0

rwt (Exécuter avec ceci) semble être le moyen préféré de le faire.

Il fournit une résolution de dépendance à la demande, ce qui rend les packages disponibles pendant la durée d'une session d'interpréteur. Un de ses scénarios visés est: testeurs.

Après avoir installé TFR (*), vous pouvez charger des commandes setup.py de modules pytest-coureur exécution:

rwt pytest-runner -- setup.py test 

ou

python -m rwt pytest-runner -- setup.py test 

(*) Il vous reste à installer un unrequired dépendance (ie: rwt), mais il semble avoir moins d'impact que d'en installer d'autres.

1

Il est logique de déclarer qu'en tant extra:

setup(
    ..., 
    extras_require=dict(
     tests=[ 
      'pytest-runner' 
     ] 
    ) 
) 

Vous installez spécifiquement que, avec pip install my-package[tests]. Comme alternative: setup.py est un programme Python entièrement fonctionnel ... si vous pouvez détecter votre environnement d'une manière ou d'une autre, vous pouvez décider dynamiquement d'ajouter ou non certaines dépendances à la liste des besoins.

+1

Les déclarer comme * extra * ne fonctionnerait pas car ils ne seront pas disponibles lors de l'exécution de ** python setup.py test ** et je ne veux pas les installer localement. Vérification de l'environnement est certainement une option, j'espère pas le seul. –