¿Cómo distribuyo fuentes con mi paquete python?
He creado un paquete llamadodiagrama claro que envuelve matplotlib. También he creado una buena fuente que quiero distribuir con mi paquete. Yo consultéesta sección de la guía del usuario de Python Packaging, y determinó que debería usar eldata_files
palabra clave. elegídata_files
en lugar depackage_data
ya que necesito instalar la fuente en un directorio matplotlib que esfuera de de mi paquete
Aquí está mi primer intento fallido desetup.py
archivo:
from distutils.core import setup
import os, sys
import matplotlib as mpl
#Find where matplotlib stores its True Type fonts
mpl_data_dir = os.path.dirname(mpl.matplotlib_fname())
mpl_ttf_dir = os.path.join(mpl_data_dir, 'fonts', 'ttf')
setup(
...(edited for brevity)...
install_requires = ['matplotlib >= 1.4.0, !=1.4.3', 'numpy >= 1.6'],
data_files = [
(mpl_ttf_dir, ['./font_files/TeXGyreHeros-txfonts/TeXGyreHerosTXfonts-Regular.ttf']),
(mpl_ttf_dir, ['./font_files/TeXGyreHeros-txfonts/TeXGyreHerosTXfonts-Italic.ttf'])]
)
#Try to delete matplotlib's fontList cache
mpl_cache_dir = mpl.get_cachedir()
mpl_cache_dir_ls = os.listdir(mpl_cache_dir)
if 'fontList.cache' in mpl_cache_dir_ls:
fontList_path = os.path.join(mpl_cache_dir, 'fontList.cache')
os.remove(fontList_path)
Hay dos problemas con estosetup.py
:
setup()
tiene la oportunidad de instalarlo. Este es un bobobo obvio, pero necesitaba saber dóndempl_ttf_dir
fue antes de corrersetup()
.Como se mencionóaquí, las distribuciones de ruedas no admiten rutas absolutas paradata_files
. No pensé que esto sería un problema porque pensé que simplemente usaría una distribución sdist. (Los sdists sí permiten rutas absolutas). Luego descubrí que pip 7.0 (y posterior) convierte todos los paquetes en distribuciones de rueda, incluso si la distribución se creó originalmente como un sdist.Estaba bastante molesto por el problema # 2, pero, desde entonces, descubrí que los caminos absolutos son malos porque no funcionan con virtualenv. Por lo tanto, ahora estoy dispuesto a cambiar mi enfoque, pero ¿qué hago?
La única idea que tengo es distribuir la fuente comopackage_data
primero y luego mueva la fuente a la ubicación adecuada luego usando elos
módulo. ¿Es ese un método kosher?