python - language - sphinx documentation wikipedia
DescripciĆ³n de PyPi markdown no funciona (6)
Subí un paquete a PyPi usando:
python setup.py register -r pypi
python setup.py sdist upload -r pypi
Estoy tratando de modificar la descripción, escribí (por favor, no edite el formato del siguiente fragmento de código, lo hice con el propósito de demostrar mi problema):
**nose-docstring-plugin**
This plugin enables you to modify docstring of tests based on their attributes, for example:
```python
@attr(section=''MySection'', type=''functional+'', module=''MyModule'', id=1)
def test_function(self):
"""
This is the original docstring
"""
pass
```
Sin embargo, el texto aparece como está, sin el formato de reducción. ¿Qué estoy haciendo mal?
A partir del 16 de marzo de 2018, PyPI.org aka Warehouse (finalmente) admite Markdown en descripciones largas. Warehouse reemplazó la antigua implementación PyPI heredada en abril de 2018.
Necesitas:
Asegúrese de que
setuptools
se actualice a la versión 38.6.0 o más recienteAsegúrese de que el
twine
esté actualizado a la versión 1.11.0 o más recienteAsegúrate de que la
wheel
esté actualizada a la versión 0.31.0 o más recienteAgregue un nuevo campo llamado
long_description_content_type
a su llamada asetup()
, ylong_description_content_type
en''text/markdown''
:setup( long_description="""# Markdown supported!/n/n* Cheer/n* Celebrate/n""", long_description_content_type=''text/markdown'', # .... )
Consulte PEP 566 - Metadatos para paquetes de software de Python 2.1 .
Use
twine
para subir sus distribuciones a PyPI:$ python setup.py sdist bdist_wheel # adjust as needed $ twine update dist/*
La antigua infraestructura PyPI heredada no generaría Markdown, solo la nueva infraestructura de Warehouse. La infraestructura heredada ya no existe (a partir de 2018-04-30).
Actualmente, PyPI usa cmarkgfm
como el procesador de readme_renderer
, a través de la biblioteca readme_renderer
(mediante el uso de readme_renderer.markdown.render(long_description)
para producir un resultado HTML). Esto significa que sus documentos de rebaja se mostrarán exactamente igual que en GitHub; Es esencialmente el mismo renderizador.
Puede validar su paquete long_description
con el comando twine check
( twine
1.12.0 o más reciente).
La respuesta anterior <2018-03-16 sigue a continuación.
Nota: esta es la respuesta antigua, ahora desactualizada, a partir de 2018-03-16 Markdown es compatible siempre que use las herramientas adecuadas, consulte más arriba .
PyPI no admite Markdown, por lo que su README no se procesará en HTML.
Si quieres un README renderizado, quédate con reStructuredText; La introducción de Sphinx a reStructuredText es un buen punto de partida.
Probablemente desee instalar el paquete docutils
para poder probar su documento localmente; desea ejecutar el script rst2html.py
incluido en su README para ver qué errores se producen, si los hay. Su muestra específica tiene demasiados errores:
$ 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.
Su bloque de código está utilizando las extensiones Markdown de Github, que son totalmente incorrectas para reStructuredText. Podría usar un bloque de código reST (probablemente, si la versión PyPI de docutils es lo suficientemente nueva):
.. code-block:: python
@attr(section=''MySection'', type=''functional+'', module=''MyModule'', id=1)
def test_function(self):
"""
This is the original docstring
"""
pass
Para probar esto localmente necesitarás instalar Pygments también.
Hay una solicitud de función con solicitud de extracción para agregar soporte para Markdown, si está interesado.
Como @Martijn Pieters
, PyPi no es compatible con Markdown. No estoy seguro de dónde aprendí el siguiente truco, pero puede usar PyPandoc y PyPandoc para convertir sus archivos de Markdown en texto reestructurado antes de subirlos a PyPi . Para lograr esto, agregue lo siguiente a su archivo 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,
)
Para instalar Pandoc en OS X, usé Homebrew :
brew install pandoc
Para instalar PyPandoc , utilicé pip :
pip install pypandoc
Ejecuta estos tres comandos y funcionará
pip install --upgrade setuptools
pip install --upgrade twine
pip install --upgrade wheel
Hay un buen paquete de pip que funcionó para mí
https://pypi.python.org/pypi/restructuredtext_lint/
Lo estoy usando en mi configuración ahora:
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)
También he creado una lib para poder usar en py.test más tarde
https://github.com/pablodav/burp_server_reports/blob/master/burp_reports/lib/check_readme.py
He tenido problemas con los caracteres que causan problemas de análisis en los que solo aparece la primera línea de README en pypi. El siguiente código soluciona el problema, proviene del repositorio de módulos 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 esta manera, long_description
contiene una versión desinfectada de su archivo Léame y puede pasarla a la función setup () en su script setup.py
.
PyPI admite rst y no markdown como se menciona en otras respuestas. Pero no necesitas pypandoc
perse, solo pandoc
está bien. Puede generar el primer archivo local primero y luego ejecutar setup.py para cargar el paquete.
upload.sh
:
#!/bin/bash
pandoc --from=markdown --to=rst --output=README README.md
python setup.py sdist upload
El archivo generado llamado README
será reconocido automáticamente. ¡Asegúrese de agregarlo a su .gitignore
! El setup.py
no tiene que hacer nada especial.
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=''<email>'',
url=''<github url>'', # use the URL to the github repo
keywords=[], # arbitrary keywords
classifiers=[],
)
Luego simplemente ejecuta bash upload.sh
para cargar las cosas en PyPI.