Comment faire fonctionner la description Markdown de PyPi ?

J'ai téléchargé un package sur PyPi en utilisant :

python setup.py register -r pypi
python setup.py sdist upload -r pypi

J'essaie de modifier la description, j'ai écrit ( veuillez ne pas modifier la mise en forme du morceau de code suivant, je l'ai fait exprès pour illustrer mon problème ):

**my plugin**
This plugin enables you to... For example:
```python
@attr(section='MySection', id=1)
def test_function(self):
"""
Bla bla bla
"""
pass
```

Cependant, le texte apparaît tel quel, sans la mise en forme Markdown. Qu'est-ce que je fais mal?


Solution du problème

Depuis le 16 mars 2018, PyPI.org alias Warehouse prend (enfin) en charge Markdown dans les descriptions longues. Warehouse a remplacé l'ancienne implémentation PyPI héritée en avril 2018.

Vous devez:


  • Assurez-vous qu'il setuptoolsest mis à niveau vers la version 38.6.0 ou une version plus récente


  • Assurez-vous qu'il twineest mis à niveau vers la version 1.11.0 ou une version plus récente


  • Assurez-vous qu'il wheelest mis à niveau vers la version 0.31.0 ou une version plus récente


  • Ajoutez un nouveau champ nommé long_description_content_typeà votre setup()appel, et réglez-le sur'text/markdown' :

    setup(
    long_description="""# Markdown supported!\n\n* Cheer\n* Celebrate\n""",
    long_description_content_type='text/markdown',
    #....
    )

    Voir PEP 566 - Métadonnées pour les progiciels Python 2.1.


  • Utilisez twinepour télécharger vos distributions sur PyPI :

    $ python setup.py sdist bdist_wheel # adjust as needed
    $ twine upload dist/*


L'ancienne infrastructure PyPI héritée ne rendrait pas Markdown, seule la nouvelle infrastructure Warehouse le fait. L'infrastructure héritée a maintenant disparu (au 30/04/2018).

Actuellement, PyPI utilise cmarkgfmcomme moteur de rendu Markdown, via la readme_rendererbibliothèque (utilisant readme_renderer.markdown.render(long_description)pour produire une sortie HTML). Cela signifie que vos documents de démarquage s'afficheront exactement de la même manière que sur GitHub ; c'est essentiellement le même moteur de rendu.

Vous pouvez valider votre package long_descriptionavec la twine checkcommande ( twine1.12.0 ou plus récent).

L'ancienne réponse <2018-03-16 suit ci-dessous.

Note: this is the old, now outdated answer, as of 2018-03-16 Markdown is supported provided you use the right tools, see above.

PyPI does not support Markdown, so your README will not be rendered into HTML.

Si vous voulez un README rendu, restez avec reStructuredText; l' introduction de Sphinx à reStructuredText est un bon point de départ.

Vous souhaitez probablement installer le docutilspackage afin de pouvoir tester votre document localement; vous voulez exécuter le rst2html.pyscript inclus sur votre README pour voir quelles erreurs sont produites, le cas échéant. Votre échantillon spécifique contient trop d'erreurs :

$ bin/rst2html.py test.rst > /tmp/test.html
test.rst:7: (ERROR/3) Unexpected indentation.
test.rst:3: (WARNING/2) Inline literal start-string without end-string.
test.rst:3: (WARNING/2) Inline interpreted text or phrase reference start-string without end-string.
test.rst:11: (WARNING/2) Block quote ends without a blank line; unexpected unindent.
test.rst:11: (WARNING/2) Inline literal start-string without end-string.
test.rst:11: (WARNING/2) Inline interpreted text or phrase reference start-string without end-string.

Votre bloc de code utilise les extensions Markdown de Github, qui sont totalement fausses pour reStructuredText. Vous pouvez utiliser un bloc de code reST (probablement, si la version PyPI de docutils est suffisamment récente):

.. code-block:: python
@attr(section='MySection', type='functional+', module='MyModule', id=1)
def test_function(self):
"""
This is the original docstring
"""
pass

Pour tester cela localement, vous devrez également installer Pygments.

Il existe une demande de fonctionnalité avec une demande d'extraction pour ajouter la prise en charge de Markdown, si vous êtes intéressé.

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"