python manifest packaging setuptools setup.py

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 archivo MANIFEST si no se proporciona una plantilla .