Comment inclure des données package avec setuptools / distribute?

lors de l'utilisation de setuptools/distribute, Je ne peux pas obtenir l'installateur de tirer dans n'importe quels package_data dossiers. Tout ce que j'ai lu indique que ce qui suit est la bonne façon de le faire. Quelqu'un peut-veuillez en informer?

setup(
   name='myapp',
   packages=find_packages(),
   package_data={
      'myapp': ['data/*.txt'],
   },
   include_package_data=True,
   zip_safe=False,
   install_requires=['distribute'],
)

myapp/data/ est l'emplacement des fichiers de données.

92
demandé sur Piotr Dobrogost 2011-09-23 02:35:23

7 réponses

je me rends compte que c'est une vieille question...mais pour les gens qui trouvent le chemin ici via Google: package_data est un bas-vers le bas, sale mensonge . Il n'est utilisé que lors de la construction de paquets binaires ( python setup.py bdist ... ) mais pas lors de la construction de paquets sources ( python setup.py sdist ... ). C'est, bien sûr, ridicule -- on s'attendrait à ce que la construction d'une distribution source aboutisse à une collection de fichiers qui pourraient être envoyés à quelqu'un d'autre construit la distribution binaire.

dans tous les cas, en utilisant MANIFEST.in fonctionnera à la fois pour les distributions binaires et source.

201
répondu larsks 2013-04-30 14:26:09

je viens d'avoir ce même numéro. La solution, était simplement d'enlever include_package_data=True .

après en lisant ici , j'ai réalisé que include_package_data vise à inclure des fichiers de contrôle de version , au lieu de simplement" inclure des données paquet " comme le nom l'indique. Extrait du docs:

les fichiers de données [de include_package_data] doivent être sous contrôle CVS ou Subversion

...

si vous voulez un contrôle plus fin sur les fichiers inclus (par exemple, si vous avez des fichiers de documentation dans vos répertoires de paquets et vous voulez exclure vous pouvez également utiliser le mot-clé package_data .

prendre cet argument dehors l'a corrigé, ce qui est par coïncidence pourquoi il a aussi fonctionné quand vous êtes passé à distutils, puisqu'il ne prend pas cet argument.

21
répondu Joe 2012-12-09 01:50:37

suite à la recommandation de @Joe de supprimer la ligne include_package_data=True a également fonctionné pour moi.

Pour développer un peu plus, j'ai non "151940920 de fichier". J'utilise Git et pas CVS.

dépôt prend ce genre de forme:

/myrepo
    - .git/
    - setup.py
    - myproject
        - __init__.py
        - some_mod
            - __init__.py
            - animals.py
            - rocks.py
        - config
            - __init__.py
            - settings.py
            - other_settings.special
            - cool.huh
            - other_settings.xml
        - words
            - __init__.py
            word_set.txt

setup.py :

from setuptools import setup, find_packages
import os.path

setup (
    name='myproject',
    version = "4.19",
    packages = find_packages(),  
    # package_dir={'mypkg': 'src/mypkg'},  # didnt use this.
    package_data = {
        # If any package contains *.txt or *.rst files, include them:
        '': ['*.txt', '*.xml', '*.special', '*.huh'],
    },

#
    # Oddly enough, include_package_data=True prevented package_data from working.
    # include_package_data=True, # Commented out.
    data_files=[
#               ('bitmaps', ['bm/b1.gif', 'bm/b2.gif']),
        ('/opt/local/myproject/etc', ['myproject/config/settings.py', 'myproject/config/other_settings.special']),
        ('/opt/local/myproject/etc', [os.path.join('myproject/config', 'cool.huh')]),
#
        ('/opt/local/myproject/etc', [os.path.join('myproject/config', 'other_settings.xml')]),
        ('/opt/local/myproject/data', [os.path.join('myproject/words', 'word_set.txt')]),
    ],

    install_requires=[ 'jsonschema',
        'logging', ],

     entry_points = {
        'console_scripts': [
            # Blah...
        ], },
)

je cours python setup.py sdist pour une source de distrib (n'ai pas essayé binaire).

Et quand à l'intérieur d'un tout nouvel environnement virtuel, j'ai un myproject-4.19.tar.gz , fichier, et j'utilise

(venv) pip install ~/myproject-4.19.tar.gz
...

et à part tout ce qui est installé sur site-packages de mon environnement virtuel , ces fichiers de données spéciales sont installés sur /opt/local/myproject/data et /opt/local/myproject/etc .

13
répondu HeyWatchThis 2014-05-29 14:59:02

include_package_data=True travaillait pour moi.

Si vous utilisez git, n'oubliez pas d'inclure setuptools-git dans install_requires . Beaucoup moins ennuyeux que d'avoir un Manifest ou y compris tous les chemins dans package_data (dans mon cas c'est une application django avec toutes sortes de statique)

(collé le commentaire que j'ai fait, comme k3-rnc mentionné qu'il est réellement utile comme tel)

9
répondu vincent 2017-05-23 12:34:51

Update : cette réponse est ancienne et l'information n'est plus valable. Tous setup.py les configs doivent utiliser import setuptools . J'ai ajouté une réponse plus complète à https://stackoverflow.com/a/49501350/64313


j'ai résolu ce problème en passant aux distutils. On dirait que la distribution est dépréciée et / ou cassée.

from distutils.core import setup

setup(
   name='myapp',
   packages=['myapp'],
   package_data={
      'myapp': ['data/*.txt'],
   },
)
4
répondu cmcginty 2018-03-27 20:27:42

question ancienne et pourtant... la gestion des paquets de python laisse vraiment à désirer. J'ai donc eu le cas d'installation en utilisant pip localement dans un répertoire spécifié et j'ai été surpris que les chemins package_data et data_files n'aient pas fonctionné. Je n'avais pas envie d'ajouter encore un autre fichier au rapport donc j'ai fini par utiliser les fichiers de données et setup.py option -- install-data; quelque chose comme ceci

pip install . --install-option="--install-data=$PWD/package" -t package  
2
répondu Mat Baker 2017-04-09 23:07:23

déplacer le dossier contenant les données du paquet dans le dossier module a résolu le problème pour moi.

voir cette question: manifeste.dans ignored on "python setup.py installer" - aucun fichier de données installé?

0
répondu exhuma 2017-05-23 10:31:37