2017-09-24 6 views
3

Je voudrais Travis CI construire et déployer les objets suivants à PyPI chaque fois qu'un nouveau commit la branche coups master:La prévention des conflits lors du déploiement de plusieurs distros à l'aide PyPI Travis-CI

  • Python 2 roues
  • Python 3 roues
  • Source

pour ce faire, je l'ai ajouté ce qui suit à .travis.yml:

language: python 
python: 
    - '2.7' 
    - '3.5' 
    - '3.6' 
deploy: 
    on: 
    branch: master 
    provider: pypi 
    distribution: bdist_wheel sdist 

Pour un build/test normal, la configuration fonctionne très bien. Cependant, il introduit une condition de course when deploying to PyPI:

Uploading distributions to https://upload.pypi.org/legacy/ 
Uploading PyOTA-2.0.0b1.tar.gz 
HTTPError: 400 Client Error: File already exists. for url: https://upload.pypi.org/legacy/ 

Quels changements dois-je faire à .travis.yml pour obtenir Travis CI à déployer les objets corrects à PyPI?

Répondre

1

Certains jours je pense hors de la boîte; d'autres jours, c'est juste une très grosse boîte.

Auparavant, ce projet nécessitait des roues séparées pour Python 2 et Python 3, donc j'avais besoin de Travis CI pour construire des roues en utilisant différentes versions de Python.

Mais récemment j'ai eu le projet de construire des roues universelles correctement, alors maintenant Travis peut construire tous les artefacts de déploiement en utilisant une seule version de Python.

I modifié en conséquence .travis.yml et everything is working great:

deploy: 
    on: 
    branch: master 
    python: '3.6' 
+0

Ceci est une bonne réponse. Ce n'est pas ce à quoi je m'attendais, mais d'après mes recherches, c'est la bonne réponse. Je cherchais un moyen de séparer la construction et les tests du déploiement, et cela se réalise, mais pas de la façon dont je m'attendais. Merci d'avoir aidé! Comme vous, je construisais déjà des roues universelles, mais cela vaut-il la peine de mettre à jour votre réponse pour inclure comment vous avez fait cela dans setup.py avec 'options = {'bdist_wheel': {'universal': True}}'? – JGC

+0

Ah, intéressant; Je ne savais pas que c'était une option. Je l'ai mis dans 'setup.cfg'. – user5568265