Comment puis-je inclure package_data
pour sdist
sans fichier MANIFEST.in?
Mon setup.py ressemble à ceci:
import setuptools
setuptools.setup(
name='foo',
version='2015.3',
license='commercial',
packages=setuptools.find_packages(),
package_data={'': ['foo/bar.txt']},
)
Versions:
user@Host> python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
>>> import setuptools
>>> setuptools.version.__version__
'3.6'
Je ne peux tout simplement pas obtenir foo/bar.txt
inclus.
Ou est ce billet de blog toujours vrai? http://blog.codekills.net/2011/07/07/15/lies,-more-lies-and-python-packaging-documentation-on--package_data-/
Au cours de la dernière heure, cependant, j'ai appris que ces déclarations se situent quelque part entre "dangereusement trompeur" et "putains de mensonges". En effet, le type principal de Python est un package source et la méthode canonique pour créer un package source est d'utiliser setup.py sdist
. Cependant, les données spécifiées dans package_data ne sont pas incluses dans les distributions source - elles sont uniquement incluses dans binaire (setup.py bdist
) distributions et installations (setup.py install
).
Comment puis-je inclure package_data
pour sdist
sans fichier MANIFEST.in?
TL; DR : Les clés du package_data
les dictionnaires sont des packages ; les valeurs sont des listes de globes. ''
n'est pas un nom valide pour un package Python.
Si vous voulez avoir bar.txt
être installé à côté du __init__.py
du package foo
, utilisez
package_data={'foo': ['bar.txt']}
J'ai la mise en page:
foo/
__init__.py
bar.txt
setup.py
Maintenant, si foo
est un package comme ci-dessus, faites:
import setuptools
setuptools.setup(
name='foo',
version='2015.3',
license='commercial',
packages=setuptools.find_packages(),
package_data={'foo': ['bar.txt']},
)
Et après python setup.py sdist
, Je vérifie le contenu de dist/foo-2015.3.tar.gz
% tar tfz dist/foo-2015.3.tar.gz
...
foo-2015.3/foo/bar.txt
...
Cependant, si je lance votre setup.py
avec package_data={'': ['foo/bar.txt']}
, Je peux convenir que le foo/bar.txt
sera pas ajouté à la distribution source, sauf si le foo-2015.3.Egg-info/SOURCES.txt
a déjà la ligne pour foo/bar.txt
- dans ce cas, le fichier apparaîtra également dans la distribution source
Aucun manifeste n'a été utilisé; la version de setuptools était 3.6
(J'ai délibérément installé la même ancienne version que vous utilisiez):
>>> import setuptools
>>> setuptools.__version__
'3.6'
Le comportement ci-dessus fonctionne également dans la norme distutils
: 2.6 Installation des données de package de la documentation distutils "héritée"; avec un commentaire pour 2.7, 3.1:
Modifié dans la version [2.7, 3.1]: Tous les fichiers qui correspondent à
package_data
sera ajouté au fichierMANIFEST
si aucun modèle n'est fourni.
J'ai eu le même problème et l'ai résolu en supprimant:
include_package_data=True