python - ¿Cómo puedo incluir package_data sin un archivo MANIFEST.in?
packaging setuptools (2)
Tuve el mismo problema y lo arreglé quitando:
include_package_data=True
¿Cómo puedo incluir sdist
para sdist
sin un archivo MANIFEST.in?
Mi setup.py se ve así:
import setuptools
setuptools.setup(
name=''foo'',
version=''2015.3'',
license=''commercial'',
packages=setuptools.find_packages(),
package_data={'''': [''foo/bar.txt'']},
)
Versiones:
user@host> python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
>>> import setuptools
>>> setuptools.version.__version__
''3.6''
Simplemente no foo/bar.txt
incluir foo/bar.txt
incluido.
¿O es esta publicación del blog todavía cierto? http://blog.codekills.net/2011/07/15/lies,-more-lies-and-python-packaging-documentation-on--package_data-/
Durante la última hora, sin embargo, he aprendido que estas declaraciones están en algún lugar entre "peligrosamente engañoso" y "malditas mentiras". Esto se debe a que el tipo principal de paquete de Python es un paquete de origen, y el método canónico para crear un paquete de origen es mediante el uso de setup.py sdist
. Sin embargo, los datos especificados en package_data no se incluyen en las distribuciones de origen, solo se incluyen en distribuciones e instalaciones binarias ( setup.py bdist
) ( setup.py install
).
¿Cómo puedo incluir sdist
para sdist
sin un archivo MANIFEST.in?
TL; DR : Las claves en los diccionarios package_data
son paquetes ; Los valores son listas de globs. ''''
no es un nombre válido para ningún paquete de Python.
Si desea que bar.txt
se instale junto al __init__.py
del paquete foo
, use
package_data={''foo'': [''bar.txt'']}
Tengo el diseño:
foo/
__init__.py
bar.txt
setup.py
Ahora, si foo
es un paquete como el de arriba, haz:
import setuptools
setuptools.setup(
name=''foo'',
version=''2015.3'',
license=''commercial'',
packages=setuptools.find_packages(),
package_data={''foo'': [''bar.txt'']},
)
Y después de python setup.py sdist
, compruebo el contenido de dist/foo-2015.3.tar.gz
% tar tfz dist/foo-2015.3.tar.gz
...
foo-2015.3/foo/bar.txt
...
Sin embargo, si ejecuto su setup.py
con setup.py
package_data={'''': [''foo/bar.txt'']}
, puedo coincidir en que foo/bar.txt
no se agregará a la distribución de origen, excepto si foo-2015.3.egg-info/SOURCES.txt
ya tiene la línea para foo/bar.txt
- en ese caso, el archivo aparecerá en la distribución de origen también
No se utilizó ningún manifiesto; la versión de setuptools era 3.6
(instalé deliberadamente la misma versión anterior que estaba usando):
>>> import setuptools
>>> setuptools.__version__
''3.6''
El comportamiento anterior también funciona en distritos estándar: 2.6 Instalación de datos de paquetes de la documentación de legados "heredados"; con un comentario para 2.7, 3.1:
Modificado en la versión [2.7, 3.1] : todos los archivos que coincidan con
package_data
se agregarán al archivoMANIFEST
si no se proporciona una plantilla .