Operaciones de fuentes amigables además de fontTools
. ?
pip instala python-fontbro
Simplemente importe la clase de fuente:
from fontbro import Fontfont = Font("fonts/MyFont.ttf")# o puede usar cualquier objeto similar a un archivo: con open("fonts/MyFont.ttf") as fh:font = Font(fh)
clone
close
from_collection
get_characters
get_characters_count
get_family_classification
get_family_name
get_features
get_features_tags
get_filename
get_fingerprint
get_fingerprint_match
get_format
get_glyphs
get_glyphs_count
get_image
get_italic_angle
get_name
get_names
get_style_flag
get_style_flags
get_style_name
get_svg
get_ttfont
get_unicode_block_by_name
get_unicode_blocks
get_unicode_script_by_name
get_unicode_scripts
get_variable_axes
get_variable_axes_tags
get_variable_axis_by_tag
get_variable_instances
get_variable_instance_by_style_name
get_variable_instance_closest_to_coordinates
get_version
get_vertical_metrics
get_weight
get_width
is_color
is_monospace
is_static
is_variable
rename
sanitize
save
save_as_woff
save_as_woff2
save_to_file_object
save_variable_instances
set_family_classification
set_family_name
set_name
set_names
set_style_flag
set_style_flags
set_style_flags_by_subfamily_name
set_style_name
set_vertical_metrics
subset
to_sliced_variable
to_static
clone
"""Crea una nueva instancia de fuente leyendo el mismo archivo binario."""font_clone = font.clone()
close
"""Cerrar la instancia TTFont empaquetada."""font.close()
from_collection
"""Obtiene una lista de objetos de fuente de un archivo de colección de fuentes (.ttc/.otc):param filepath: The filepath:type filepath: str o pathlib.Path:returns: Una lista de objetos de fuente.:rtype: list" ""fuentes = Font.from_collection(filepath="my-font-collection.ttc")
get_characters
"""Obtiene los caracteres de fuente.:param ignore_blank: Si es Verdadero, no se devolverán los caracteres sin contornos.:type ignore_blank: bool:returns: Los caracteres.:rtype: generador de dicts:raises TypeError: Si no es posible encontrarlos el 'mejor' dictado cmap Unicode en la fuente."""chars = font.get_characters(ignore_blank=False)
get_characters_count
"""Obtiene el recuento de caracteres de fuente.:param ignore_blank: si es Verdadero, los caracteres sin contornos no se contarán.:type ignore_blank: bool:returns: El recuento de caracteres.:rtype: int"""chars_count = font.get_characters_count(ignore_blank = Falso)
get_family_classification
"""Obtiene la información de clasificación de la familia de fuentes leyendo el campo sFamilyClass de la tabla OS/2. Si la tabla OS/2 no está disponible, no se devuelve nada.: devuelve: Un diccionario que contiene la información de clasificación de la familia de fuentes, por ejemplo, { "full_name": "Sans Serif / Gótico neogrotesco", "class_id": 8, "class_name": "Sans Serif", "subclass_id": 5, "subclass_name": "Neogrotesco Gótico", }:rtype: dict"""family_classification = font.get_family_classification()
get_family_name
"""Obtiene el apellido leyendo los registros de nombres con orden de prioridad (16, 21, 1).:returns: El nombre de la familia de fuente.:rtype: str"""family_name = font.get_family_name()
get_features
"""Obtiene las características de tipo abierto de fuente.:returns: Las características.:rtype: lista de dict"""features = font.get_features()
get_features_tags
"""Obtiene las etiquetas de características de tipo abierto de fuente.:returns: La lista de etiquetas de características.:rtype: lista de str"""features_tags = font.get_features_tags()
get_filename
"""Obtiene el nombre de archivo que se utilizará para guardar la fuente en el sistema de archivos.:param variable_suffix: el sufijo de la variable, predeterminado "Variable": escriba variable_suffix: str:param variable_axes_tags: las etiquetas de los ejes variables marcan, si es Verdadero, las etiquetas de los ejes se agregará, por ejemplo, '[wght,wdth]':type variable_axes_tags: bool:param variable_axes_values: Los valores de los ejes variables marcan si son Verdaderos, se agregarán los valores de cada eje, por ejemplo, '[wght(100,100,900),wdth(75,100,125)]':type variable_axes_values: bool:returns: The filename.:rtype: str"""filename = font .get_filename(variable_suffix="Variable", variable_axes_tags=Verdadero, variables_axes_values=Falso)
get_fingerprint
"""Obtiene la huella digital de la fuente: un hash calculado a partir de una representación de imagen de la fuente. Cambiar la opción de texto afecta la huella digital devuelta.:param text: el texto utilizado para generar la huella digital, valor predeterminado: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".:escriba el texto : str:returns: El hash de la huella digital.:rtype: imagehash.ImageHash"""hash = font.get_fingerprint()
get_fingerprint_match
"""Obtiene la coincidencia de huellas digitales entre esta fuente y otra. Comprobando si sus huellas digitales son iguales (diferencia <= tolerancia).:param other: La otra fuente, puede ser una ruta de archivo o una instancia de fuente.:escriba otra: str o Fuente:param tolerancia: La tolerancia de diferencia, por defecto 3.:tipo de tolerancia: int:param texto: El texto utilizado para generar la huella digital, valor por defecto: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".: escriba texto: str: devuelve: una tupla que contiene la información de la coincidencia (match, diff, hash, other_hash).:rtype: tuple"""match, diff, hash, other_hash = font.get_fingerprint_match(other=" other_font.ttf", tolerancia=10)
get_format
"""Obtiene el formato de fuente: otf, ttf, woff, woff2.:param ignore_flavor: si es Verdadero, se devolverá el formato original sin compresión.:type ignore_flavor: bool:returns: The format.:rtype: str o Ninguno" ""formato = font.get_format(ignore_flavor=False)
get_glyphs
"""Obtiene los glifos de fuente y su propia composición.:regresa: Los glifos.:rtype: generador de dictados"""glifos = font.get_glyphs()
get_glyphs_count
"""Obtiene el recuento de glifos de fuente.:vuelve: El recuento de glifos.:rtype: int"""glifos_count = font.get_glifos_count()
get_image
"""Obtiene una representación de imagen de la fuente que representa algo de texto usando las opciones dadas.:param text: El texto representado en la imagen:type text: str:param size: El tamaño de fuente:type size: int:param color: El texto color:tipo color: tuple:param background_color: El color de fondo:tipo background_color: tuple"""img = font.get_image(text="¡Hola!", tamaño=48, color=(0, 0, 0, 255), color_fondo=(255, 255, 255, 255))
get_italic_angle
"""Obtiene el ángulo de fuente en cursiva.:devuelve: El valor del ángulo, incluidas las banderas inclinadas hacia atrás, en cursiva y romana.:rtype: dict o Ninguno"""italic_angle = font.get_italic_angle()
get_name
"""Obtiene el nombre por su identificador de la tabla de nombres de fuentes.:clave de parámetro: el ID o clave del nombre (p. ej., "nombre_familia"): escriba la clave: int o str: devuelve: el nombre.:rtype: str o Ninguno : genera KeyError: si la clave no es una clave/id de nombre válido"""family_name = font.get_name(key=Font.NAME_FAMILY_NAME)
get_names
"""Obtiene los registros de nombres asignados por su nombre de propiedad.:regresa: Los nombres.:rtype: dict"""names = font.get_names()
get_style_flag
"""Obtiene el indicador de estilo al leer las tablas OS/2 y mac.:param key: La clave:type key: string:returns: El indicador de estilo.:rtype: bool"""flag = font.get_style_flag(Font.STYLE_FLAG_BOLD)
get_style_flags
"""Obtiene los indicadores de estilo al leer las tablas de estilo OS/2 y mac.:devuelve: El dict que representa los indicadores de estilo.:rtype: dict"""flags = font.get_style_flags()
get_style_name
"""Obtiene el nombre del estilo leyendo los registros de nombres con orden de prioridad (17, 22, 2).:devuelve: El nombre del estilo de fuente.:rtype: str"""style_name = font.get_style_name()
get_svg
"""Obtiene una representación SVG de la fuente que representa parte del texto usando las opciones dadas.:param text: El texto que se representará como rutas SVG.:type text: str:param size: El tamaño de la fuente que se usará para representar el texto, en puntos.:tipo tamaño: int:returns: Una cadena SVG que representa el texto renderizado.:rtype: str"""svg_str = font.get_svg(text="¡Hola!", tamaño=48)
get_ttfont
"""Obtiene la instancia de TTFont empaquetada.:vuelve: La instancia de TTFont.:rtype: TTFont"""ttfont = font.get_ttfont()
get_unicode_block_by_name
"""Obtiene el bloque Unicode por nombre (el nombre no distingue entre mayúsculas y minúsculas e ignora "-").:param name: El nombre:escriba el nombre: str:devuelve: El bloque Unicode dict si el nombre es válido, Ninguno en caso contrario.: rtype: dict o Ninguno"""block = font.get_unicode_block_by_name(name="Latín básico")
get_unicode_blocks
"""Obtiene los bloques Unicode y su cobertura. Solo se devolverán los bloques con cobertura >= umbral_cobertura (0.0 <= umbral_cobertura <= 1.0).:param umbral_cobertura: la cobertura mínima requerida para que se devuelva un bloque.:tipo umbral_cobertura: float:returns: La lista de bloques Unicode.:rtype: lista de dicts"""bloques = font.get_unicode_blocks(cobertura_umbral=0.00001)
get_unicode_script_by_name
"""Obtiene el script Unicode por nombre/etiqueta (el nombre/etiqueta no distingue entre mayúsculas y minúsculas e ignora "-").:param name: El nombre:escriba el nombre: str:returns: El script Unicode dicta si el nombre/etiqueta es válido, Ninguno en caso contrario.:rtype: dict o Ninguno"""script = font.get_unicode_script_by_name(name="Latn")
get_unicode_scripts
"""Obtiene los scripts Unicode y su cobertura. Solo se devolverán los scripts con cobertura >= umbral_cobertura (0.0 <= umbral_cobertura <= 1.0).:param umbral_cobertura: la cobertura mínima requerida para que se devuelva un script.:tipo umbral_cobertura: float:returns: La lista de scripts Unicode.:rtype: lista de dicts"""scripts = font.get_unicode_scripts(cobertura_umbral=0.00001)
get_variable_axes
"""Obtiene la variable de fuente axes.:regresa: La lista de ejes si la fuente es una fuente variable, de lo contrario Ninguno.:rtype: lista de dict o Ninguno"""axes = font.get_variable_axes()
get_variable_axes_tags
"""Obtiene las etiquetas de los ejes variables.:returns: Las etiquetas de los ejes variables.:rtype: lista o Ninguno"""axes_tags = font.get_variable_axes_tags()
get_variable_axis_by_tag
"""Obtiene un eje variable por etiqueta.:param etiqueta: La etiqueta:tipo etiqueta: cadena:regresa: El eje variable por etiqueta.:rtype: dict o Ninguno"""axis = font.get_variable_axis_by_tag(tag="wght" )
get_variable_instances
"""Obtiene las instancias de la variable.:regresa: La lista de instancias si la fuente es una fuente variable; de lo contrario, Ninguna.:rtype: lista de dict o Ninguna"""instancias = font.get_variable_instances()
get_variable_instance_by_style_name
"""Obtiene la instancia de la variable por nombre de estilo, por ejemplo, style_name = 'Bold':param style_name: El nombre del estilo:tipo style_name: str:returns: La instancia de la variable que coincide con el nombre del estilo dado.:rtype: dict o Ninguno"" "instancia = font.get_variable_instance_by_style_name(style_name="Negrita")
get_variable_instance_closest_to_coordinates
"""Obtiene la instancia de variable más cercana a las coordenadas, por ejemplo, coordenadas = {"wght": 1000, "slnt": 815, "wdth": 775}Si las coordenadas no especifican algunos ejes, se utiliza el valor predeterminado de los ejes para la búsqueda. :param coordenadas: Las coordenadas:tipo coordenadas: dict:devuelve: La instancia de variable más cercana a las coordenadas.:rtype: dict o Ninguno"""instancia = font.get_variable_instance_closest_to_coordinates(coordenadas={"wght": 1000, "slnt": 815, "wdth": 775})
get_version
"""Obtiene la versión de la fuente.:devuelve: El valor de la versión de la fuente.:rtype: float"""version = font.get_version()
get_vertical_metrics
"""Obtiene las métricas verticales de la fuente.:devuelve: Un diccionario que contiene las siguientes métricas verticales: "units_per_em", "y_max", "y_min", "ascent", "descent", "line_gap", "typo_ascender", "typo_descender ", "typo_line_gap", "cap_height", "x_height", "win_ascent", "win_descent": rtype: dict"""métricas = font.get_vertical_metrics()
get_weight
"""Obtiene el valor y el nombre del peso de la fuente.:devuelve: El nombre y el valor del peso.:rtype: dict o Ninguno"""weight = font.get_weight()
get_width
"""Obtiene el valor y el nombre del ancho de fuente.:devuelve: El nombre y el valor del ancho.:rtype: dict o Ninguno"""width = font.get_width()
is_color
"""Determina si la fuente es una fuente de color.:devuelve: Verdadero si la fuente es de color, Falso en caso contrario.:rtype: bool"""color = font.is_color()
is_monospace
"""Determina si la fuente es monoespaciada.:param umbral: El umbral (0.0 <= n <= 1.0) de glifos con el mismo ancho para considerar la fuente como monoespaciada.:tipo umbral: float:returns: Verdadero si fuente monoespaciada, False en caso contrario.:rtype: bool"""mono = font.is_monospace(threshold=0.85)
is_static
"""Determina si la fuente es estática.:devuelve: Verdadero si es una fuente estática, Falso en caso contrario.:rtype: bool"""static = font.is_static()
is_variable
"""Determina si la fuente es una fuente variable.:devuelve: Verdadero si la fuente es variable, Falso en caso contrario.:rtype: bool"""variable = font.is_variable()
rename
"""Cambia el nombre de los registros de nombres de fuentes (1, 2, 4, 6, 16, 17) de acuerdo con el nombre de familia y el nombre de estilo (nombre de subfamilia) dados. Si nombre de familia no está definido, se detectará automáticamente. Si nombre de estilo no está definido, se detectará automáticamente. ser detectado automáticamente.:param family_name: El nombre de la familia:type family_name: str:param style_name: El nombre del estilo:type style_name: str:param update_style_flags: si es Verdadero, los indicadores de estilo se actualizarán por nombre de subfamilia: escriba update_style_flags: bool: genera ValueError: si el nombre PostScript calculado tiene más de 63 caracteres."""font.rename(family_name="Mi fuente nueva", style_name ="Negrita cursiva", update_style_flags=True)
sanitize
"""Desinfecta el archivo de fuente usando OpenType Sanitizer.https://github.com/googlefonts/ots-python:param estricto: si es Verdadero (predeterminado), genera una excepción incluso en las advertencias del desinfectante. Si es Falso, solo genera una excepción en falla del desinfectante (código de salida distinto de cero).:tipo estricto: bool:raises Excepción: si OpenType Sanitizer informa un error durante el proceso de desinfección.:return: Ninguno:nota: Utiliza OpenType Sanitizer (ots) para desinfectar el archivo de fuente. Guarda la fuente en un directorio temporal e invoca el desinfectante en el archivo guardado. Si "estricto" es Verdadero (predeterminado), trata las advertencias del desinfectante como errores. , solo busca errores de desinfectante."""font.sanitize(strict=True)
save
"""Guarda la fuente en la ruta del archivo.:param filepath: la ruta del archivo; si es Ninguno, se utilizará la ruta del archivo de origen: escriba filepath: str o Ninguno:param overwrite: La sobrescritura, si es Verdadero, el archivo de fuente de origen se puede sobrescribir: escriba overwrite : bool:returns: La ruta del archivo donde se guardó la fuente.:rtype: str:raises ValueError: Si la ruta del archivo es la misma que la fuente de origen y no se sobrescribe permitido."""saved_font_path = font.save(filepath=Ninguno, sobrescribir=False)
save_as_woff
"""Guarda la fuente como woff.:param filepath: La ruta del archivo:escriba la ruta del archivo: str:param overwrite: La sobrescritura, si es True, el archivo de fuente de origen se puede sobrescribir:type overwrite: bool:returns: La ruta del archivo donde ha estado la fuente guardado en.:rtype: str"""saved_font_path = font.save_as_woff(filepath=Ninguno, sobrescribir=True)
save_as_woff2
"""Guarda la fuente como woff2.:param filepath: La ruta del archivo:escriba la ruta del archivo: str:param overwrite: La sobrescritura, si es True, el archivo de fuente de origen se puede sobrescribir:type overwrite: bool:returns: La ruta del archivo donde ha estado la fuente guardado en.:rtype: str"""saved_font_path = font.save_as_woff2(filepath=Ninguno, sobrescribir=True)
save_to_fileobject
"""Escribe la fuente en un objeto similar a un archivo. Si no se pasa ningún objeto de archivo, se crea una instancia de `BytesIO` para el usuario.:param fileobject: Un objeto similar a un archivo para escribir.:returns: El archivo objeto que se pasó originalmente, o una nueva instancia BytesIO.:rtype: escribiendo.io.IO"""fileobject = font.save_to_fileobject(fileobject=None)
save_variable_instances
"""Guarde todas las instancias de una fuente variable en el directorio especificado en uno o más formatos.:param dirpath: La ruta del directorio:tipo dirpath: La ruta del directorio donde se guardarán las instancias.:param woff2: Si se guardan las instancias también en formato WOFF2 El valor predeterminado es True.: escriba woff2: bool:param woff: si se deben guardar las instancias también en formato WOFF. El valor predeterminado es True.: escriba woff: bool:param overwrite: si. para sobrescribir archivos existentes en el directorio. El valor predeterminado es Verdadero.: escriba sobrescribir: bool: opciones de parámetro: opciones adicionales que se pasarán al instanciador al generar instancias estáticas.: opciones de tipo: diccionario: devuelve: una lista que contiene diccionarios para cada instancia guardada. Cada diccionario incluye 'instancia' (que contiene metadatos de instancia) y 'archivos' (un diccionario con formatos de archivo como claves y rutas de archivo como valores).: genera TypeError: si la fuente no es una variable. fuente."""saved_fonts = font.save_variable_instances(dirpath, woff2=True, woff=True, overwrite=True, **opciones)
set_family_classification
"""Establece la clasificación de la familia de fuentes (sFamilyClass en la tabla OS/2) según el class_id y el subclass_id proporcionados.:param class_id: identificador numérico de la familia de fuentes class.:param subclass_id: identificador numérico opcional de la subclase de la familia de fuentes (el valor predeterminado es 0).: genera OperationError: si la tabla OS/2 no está disponible en la fuente.: genera ArgumentError: si class_id es no válido o se especifica subclass_id pero no es válido."""font.set_family_classification(**font.FAMILY_CLASSIFICATION_SCRIPTS_CALLIGRAPHIC)# alternativamente:font.set_family_classification(class_id=10, subclass_id=5)
set_family_name
"""Establece el nombre de la familia actualizando los registros de nombres de fuentes relacionados.:nombre del parámetro: el nombre:tipo nombre: el nuevo nombre de la familia."""font.set_family_name(name="Mi fuente nueva")
set_name
"""Establece el nombre por su identificador en la tabla de nombres de fuentes.:clave de parámetro: el ID o clave del nombre (por ejemplo, "nombre_familia"): clave de tipo: int o cadena: valor de parámetro: el valor: valor de tipo: cadena" ""font.set_name(Font.NAME_FAMILY_NAME, "Apellido renombrado")
set_names
"""Establece los nombres por su identificador en la tabla de nombres.:param nombres: Los nombres:tipo nombres: dict"""font.set_names(names={Font.NAME_FAMILY_NAME: "Apellido renombrado",Font.NAME_SUBFAMILY_NAME: " Regularmente renombrado", })
set_style_flag
"""Establece el indicador de estilo.:clave de parámetro: la clave de indicador:clave de tipo: cadena:valor de parámetro: el valor:valor de tipo: bool"""font.set_style_flag(Font.STYLE_FLAG_BOLD, True)
set_style_flags
"""Establece los indicadores de estilo, los indicadores establecidos en Ninguno se ignorarán.:param negrita: el valor del indicador en negrita.:escriba negrita: bool o Ninguno:param italic: el valor del indicador en cursiva.:escriba cursiva: bool o Ninguno:param subrayado: el valor del indicador de subrayado.: tipo subrayado: bool o Ninguno: parámetro esquema: el valor del indicador de esquema.: tipo esquema: bool o Ninguno"""font.set_style_flags(regular=Ninguno, negrita=Ninguno, cursiva=Ninguno, contorno=Ninguno, subrayado=Ninguno)
set_style_flags_by_subfamily_name
"""Establece los indicadores de estilo según el valor del nombre de la subfamilia. Los valores de la subfamilia deben ser "normal", "cursiva", "negrita" o "negrita cursiva" para permitir que este método funcione correctamente."""font.set_style_flags_by_subfamily_name()
set_style_name
"""Establece el nombre del estilo actualizando los registros de nombres de fuentes relacionados.:nombre del parámetro: el nombre:nombre del tipo: el nuevo nombre del estilo."""font.set_style_name(name="Bold Italic")
set_vertical_metrics
"""Establece las métricas verticales.:param metrics: argumentos de palabras clave que representan las métricas verticales que se pueden configurar: "units_per_em", "y_max", "y_min", "ascent", "descent", "line_gap", "typo_ascender" , "typo_descender", "typo_line_gap", "cap_height", "x_height", "win_ascent", "win_descent""""font.set_vertical_metrics(units_per_em=2000, y_max=2102, y_min=-533, ascenso=1800, descenso=-400, line_gap=0, typo_ascender=1800, typo_descender=-400, typo_line_gap=0, cap_height=1400, x_height=1080, win_ascent=2160, win_descent=540)
subset
"""Subconjuntos de la fuente usando las opciones dadas (unicodes o glifos o texto), es posible pasar también opciones de subconjuntos, más información aquí:https://github.com/fonttools/fonttools/blob/main/Lib/fontTools /subset/__init__.py:param unicodes: Los unicodes:escriba unicodes: str o list:param glifos: Los glifos:escriba glifos: lista:param texto: El texto: escriba texto: str:param opciones: Las opciones del subconjunto: escriba opciones: dict"""font.subset(unicodes="", glifos=[], text="", **opciones)
to_sliced_variable
"""Convierte la fuente de la variable en una parcial, dividiendo los ejes de la variable en las coordenadas dadas. Si no se especifica un valor de eje, el eje se dejará intacto. Si los valores mínimo y máximo de un eje son iguales, el eje quedará fijado .:coordenadas param: el diccionario de coordenadas, cada valor de elemento debe ser tupla/lista/dict (con las teclas 'min', 'default' y 'max') para dividir o float/int para fijar, por ejemplo. {'wdth':100, 'wght':(100,600), 'ital':(30,65,70)} o {'wdth':100, 'wght':[100,600], 'ital':[30, 65,70]} o {'ancho':100, 'wght':{'min':100,'max':600}, 'ital':{'min':30,'default':65,'max':70}}: tipo de coordenadas: dict: opciones de parámetro : Las opciones para fontTools.varLib.instancer:type options: diccionario:aumenta TypeError: si la fuente no es una variable font:aumenta ValueError: si las coordenadas no están definidas (vacío): genera ValueError: si todos los ejes de coordenadas están fijados"""font.to_sliced_variable(coordenadas, **opciones)
to_static
"""Convierte la fuente de la variable en una estática fijando los ejes variables en las coordenadas dadas. Si no se especifica un valor de eje, el eje se fijará en su valor predeterminado. Si no se especifican las coordenadas, cada eje se fijará en su valor predeterminado. valor.:coordenadas param: las coordenadas, por ejemplo, {'wght':500, 'ital':50}:tipo de coordenadas: dict o Ninguno:param style_name: el nombre del estilo de instancia existente, por ejemplo, 'Negro': escriba style_name: str o Ninguno: parámetro update_names: si es Verdadero, los registros de nombres se actualizarán según la instancia más cercana: escriba update_names: bool:param update_style_flags: si es Verdadero, los indicadores de estilo se actualizarán según la instancia más cercana: escriba update_style_flags: bool:opciones de parámetro: las opciones para fontTools.varLib.instancer:opciones de tipo: diccionario:aumenta TypeError: si la fuente no es una fuente variable: genera ValorError: si los ejes de coordenadas no están todos fijados"""font.to_static(coordinadas=Ninguna, style_name=Ninguna, update_names=True, update_style_flags=True, **opciones)
# clonar repositoriogit clone https://github.com/fabiocaccamo/python-fontbro.git && cd python-fontbro# crear virtualenv y activarlopython -m venv venv &&. venv/bin/activate# actualizar pippython -m pip install --upgrade pip# instalar requisitospython -m pip install -r requisitos.txt -r requisitos-test.txt# instalar precompromiso para ejecutar formateadores y linterpre-commit instalación -- install-hooks# ejecutar pruebas usando toxtox# o ejecutar pruebas usando unittestpython -m unittest
Publicado bajo licencia MIT.
Un agradecimiento especial a Jérémie Hornus y Just Van Rossum.
Destaca este proyecto en GitHub
Sígueme en GitHub
? Sígueme en Twitter
? Patrociname en Github
python-benedict
: subclase dict con soporte para listas de claves/rutas de claves, atajos de E/S (base64, csv, json, pickle, plist, query-string, toml, xml, yaml) y muchas utilidades.
python-fsutil
: utilidades de sistema de archivos para desarrolladores perezosos. ?♂️