La description de PyPi ne fonctionne pas

J’ai téléchargé un paquet 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 (s’il vous plaît ne modifiez pas le format du morceau de code suivant, je l’ai fait dans le but de démontrer mon problème):

 **nose-docssortingng-plugin** This plugin enables you to modify docssortingng of tests based on their atsortingbutes, for example: ```python @attr(section='MySection', type='functional+', module='MyModule', id=1) def test_function(self): """ This is the original docssortingng """ pass ``` 

Cependant, le texte apparaît tel quel, sans le formatage de démarquage. Qu’est-ce que je fais mal?

Depuis le 16 mars 2018, PyPI.org aka Warehouse (enfin) prend en charge Markdown dans de longues descriptions. Warehouse a remplacé l’ancienne implémentation de l’ancien PyPI en avril 2018.

Tu dois:

  • Assurez-vous que setuptools est mis à niveau à la version 38.6.0 ou plus récente

  • Assurez-vous que la twine est mise à niveau vers la version 1.11.0 ou plus récente

  • Assurez-vous que la wheel est mise à niveau vers la version 0.31.0 ou plus récente

  • Ajoutez un nouveau champ nommé long_description_content_type à votre appel setup() et définissez-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 packages logiciels Python 2.1 .

  • Utilisez la twine pour télécharger vos dissortingbutions vers PyPI:

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

L’ancienne infrastructure PyPI héritée ne rendrait pas Markdown, seule la nouvelle infrastructure d’entrepôt le ferait. L’infrastructure héritée a maintenant disparu (en date du 2018-04-30).

Actuellement, PyPI utilise cmarkgfm comme moteur de rendu, via la bibliothèque readme_renderer (utilisant readme_renderer.markdown.render(long_description) pour produire la sortie HTML). Cela signifie que vos documents de démarquage seront rendus exactement les mêmes que sur GitHub; c’est essentiellement le même moteur de rendu.

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


Remarque: il s’agit de l’ancienne réponse, désormais obsolète, à partir de 2018-03-16. Markdown est pris en charge à condition que vous utilisiez les bons outils, voir ci-dessus .

PyPI ne supporte pas Markdown, votre README ne sera donc pas rendu en HTML.

Si vous voulez un fichier README, restz avec reStructuredText; l’ introduction de Sphinx à reStructuredText est un bon sharepoint départ.

Vous voulez probablement installer le paquet docutils pour pouvoir tester votre document localement; vous voulez exécuter le script rst2html.py inclus sur votre fichier README pour voir quelles erreurs sont générées, le cas échéant. Votre exemple spécifique comporte 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-ssortingng without end-ssortingng. test.rst:3: (WARNING/2) Inline interpreted text or phrase reference start-ssortingng without end-ssortingng. test.rst:11: (WARNING/2) Block quote ends without a blank line; unexpected unindent. test.rst:11: (WARNING/2) Inline literal start-ssortingng without end-ssortingng. test.rst:11: (WARNING/2) Inline interpreted text or phrase reference start-ssortingng without end-ssortingng. 

Votre bloc de code utilise les extensions Markdown de Github, qui sont entièrement erronées pour reStructuredText. Vous pouvez utiliser un bloc de code reST (probablement, si la version de doclet de PyPI est assez récente):

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

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

Il y a une demande de fonctionnalité avec une requête pull pour append le support pour Markdown, si cela vous intéresse.

Comme l’a @Martijn Pieters , PyPi ne prend pas en charge Markdown. Je ne suis pas certain de savoir où j’ai appris l’astuce suivante, mais vous pouvez utiliser Pandoc et PyPandoc pour convertir vos fichiers Markdown en RestructuredText avant de les télécharger dans PyPi . Pour ce faire, ajoutez ce qui suit à votre fichier setup.py :

 try: import pypandoc long_description = pypandoc.convert('README.md', 'rst') except(IOError, ImportError): long_description = open('README.md').read() setup( name='blah', version=find_version('blah.py'), description='Short description', long_description=long_description, ) 

Pour installer Pandoc sur OS X, j’ai utilisé Homebrew :

 brew install pandoc 

Pour installer PyPandoc , j’ai utilisé pip :

 pip install pypandoc 

PyPI prend en charge le premier et non le démarquage, comme mentionné sur les autres réponses. Mais tu n’as pas besoin de pypandoc perse, juste pandoc c’est bien. Vous pouvez générer le premier fichier localement en premier, puis exécuter setup.py pour télécharger le package.

upload.sh :

 #!/bin/bash pandoc --from=markdown --to=rst --output=README README.md python setup.py sdist upload 

Le fichier généré nommé README sera automatiquement reconnu. Assurez-vous de l’append à votre .gitignore ! Le setup.py ne doit rien faire de spécial.

setup.py :

 from distutils.core import setup setup( name='mypackage', packages=['mypackage'], # this must be the same as the name above version='0.2.8', description='short', author='Chiel ten Brinke', author_email='', url='', # use the URL to the github repo keywords=[], # arbitrary keywords classifiers=[], ) 

Ensuite, lancez simplement bash upload.sh pour télécharger les fichiers sur PyPI.

J’ai eu des problèmes avec les caractères \r provoquant des problèmes d’parsing où seule la première ligne du README apparaît dans pypi. Le code ci-dessous corrige le problème, il provient du repository du module pypandoc :

 try: long_description = pypandoc.convert('README.md', 'rst') long_description = long_description.replace("\r","") # Do not forget this line except OSError: print("Pandoc not found. Long_description conversion failure.") import io # pandoc is not installed, fallback to using raw contents with io.open('README.md', encoding="utf-8") as f: long_description = f.read() 

De cette façon, long_description contient une version assainie de votre long_description Lisez-moi et vous pouvez la transmettre à la fonction setup () de votre script setup.py .

Il y a un bon paquet de pip qui a fonctionné pour moi

https://pypi.python.org/pypi/restructuredtext_lint/

Je l’utilise maintenant dans ma configuration:

https://github.com/pablodav/burp_server_reports/blob/master/setup.py

 def check_readme(file='README.rst'): """ Checks readme rst file, to ensure it will upload to pypi and be formatted correctly. :param file: :return: """ errors = rst_lint.lint_file(file) if errors: msg = 'There are errors in {}, errors \n {}'.format(file, errors[0].message) raise SystemExit(msg) else: msg = 'No errors in {}'.format(file) print(msg) 

J’ai aussi créé une lib pour pouvoir utiliser py.test plus tard

 https://github.com/pablodav/burp_server_reports/blob/master/burp_reports/lib/check_readme.py