web-dev-qa-db-fra.com

Comment inclure des fichiers statiques dans setuptools - python

Je veux inclure le ./static/data.txt à setuptools, voici mon code:

# setup.py
import os,glob
from setuptools import setup,find_packages

setup(
    name = "PotatoProject",
    version = "0.1.1",
    author = "Master Splinter",
    author_email = "[email protected]",
    description = ("The potatoproject!"),
    url = 'http://www.google.com',
    license = "BSD",

    # adding packages
    packages=find_packages('src'),
    package_dir = {'':'src'},

    # trying to add files...
    include_package_data = True,
    package_data = {
        '': ['*.txt'],
        '': ['static/*.txt'],
        'static': ['*.txt'],
    },

    scripts=['src/startPotato'],
    classifiers=[
        "Development Status :: 3 - Alpha",
        "Topic :: Utilities",
        "License :: OSI Approved :: BSD License",
    ],
)

Le système de fichiers:

.
├── setup.py
└── src
    ├── distutils_setup.py
    ├── Potato
    │   ├── __init__.py
    │   ├── potatoData.txt
    │   └── printer.py
    ├── startPotato
    ├── static
    │   └── data.txt
    └── Tomato
        ├── big.py
        └── __init__.py

la sortie lors de l'exécution: python setup.py sdist

running sdist
running Egg_info
creating src/PotatoProject.Egg-info
writing src/PotatoProject.Egg-info/PKG-INFO
writing top-level names to src/PotatoProject.Egg-info/top_level.txt
writing dependency_links to src/PotatoProject.Egg-info/dependency_links.txt
writing manifest file 'src/PotatoProject.Egg-info/SOURCES.txt'
reading manifest file 'src/PotatoProject.Egg-info/SOURCES.txt'
writing manifest file 'src/PotatoProject.Egg-info/SOURCES.txt'
warning: sdist: standard file not found: should have one of README, README.txt

creating PotatoProject-0.1.1
creating PotatoProject-0.1.1/src
creating PotatoProject-0.1.1/src/Potato
creating PotatoProject-0.1.1/src/PotatoProject.Egg-info
creating PotatoProject-0.1.1/src/Tomato
making hard links in PotatoProject-0.1.1...
hard linking setup.py -> PotatoProject-0.1.1
hard linking src/startPotato -> PotatoProject-0.1.1/src
hard linking src/Potato/__init__.py -> PotatoProject-0.1.1/src/Potato
hard linking src/Potato/printer.py -> PotatoProject-0.1.1/src/Potato
hard linking src/PotatoProject.Egg-info/PKG-INFO -> PotatoProject-0.1.1/src/PotatoProject.Egg-info
hard linking src/PotatoProject.Egg-info/SOURCES.txt -> PotatoProject-0.1.1/src/PotatoProject.Egg-info
hard linking src/PotatoProject.Egg-info/dependency_links.txt -> PotatoProject-0.1.1/src/PotatoProject.Egg-info
hard linking src/PotatoProject.Egg-info/top_level.txt -> PotatoProject-0.1.1/src/PotatoProject.Egg-info
hard linking src/Tomato/__init__.py -> PotatoProject-0.1.1/src/Tomato
hard linking src/Tomato/big.py -> PotatoProject-0.1.1/src/Tomato
Writing PotatoProject-0.1.1/setup.cfg
creating dist
Creating tar archive
removing 'PotatoProject-0.1.1' (and everything under it)

et aucun txt ajouté! Non static/data.txt ni Potato/potatoData.txt...

Qu'est-ce que je rate?!

62
joaoricardo000

Comme indiqué dans les commentaires, il existe 2 façons d'ajouter les fichiers statiques:

1 - include_package_data = True + MANIFEST.in

UNE MANIFEST.in fichier dans le même répertoire que setup.py, qui ressemble à ceci:

include src/static/*
include src/Potato/*.txt

Avec le include_package_data = True dans le setup.py.

2 - package_data dans setup.py

package_data = {
    'static': ['*'],
    'Potato': ['*.txt']
}

Spécifiez les fichiers à l'intérieur du setup.py.


N'utilisez pas les deux include_package_data et package_data dans setup.py.

include_package_data annulera le package_data information.

https://setuptools.readthedocs.io/en/latest/setuptools.html#including-data-files

85
joaoricardo000

Inclure tous les fichiers récursivement:

recursive-include project_name/templates *
recursive-include project_name/static *

project_name est un dossier dans la même ligne où vous avez setup.py fichier.

25
Anton Danilchenko

Selon les documents, il existe trois façons pour inclure les fichiers de données du package. Vous avez deux paquets: pomme de terre et tomate. Le répertoire statique ne se trouve dans aucun de ces packages, c'est pourquoi votre dictionnaire package_data dans setup.py ne fonctionnait pas. L'option manifeste nécessite que include_package_data soit défini sur True dans setup.py. L'accès aux fichiers de données non-package peut se faire de la manière trouvée ici .

11
emispowder

Utiliser suivant

packages = ['.','templates','static','docs'],

package_data={'templates':['*'],'static':['*'],'docs':['*'],},
6
Dadaso Zanzane

Mettre cela ici car cela s'était perdu dans le commentaire comme décrit ici.

Comment inclure des fichiers statiques dans setuptools - python

Le problème principal est que vous ne pouvez pas avoir à la fois package_data et include_package_data = True.

1