2012-08-07 671 views
43

¡No es posible incluir archivos estáticos! He intentado todo lo que he encontrado en tutoriales y la documentación, pero todo en vano ...Cómo incluir archivos estáticos en setuptools - paquete python

quiero incluir la ./static/data.txt, no es mi código:

# 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", 
    ], 
) 

el sistema de archivos:

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

la salida cuando se ejecuta: $ 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) 

y sin txt agregado! No static/data.txt ni Potato/potatoData.txt ...

¿Qué me estoy perdiendo? Gracias!

Respuesta

55

acaba de añadir un MANIFEST.in en el mismo directorio de setup.py, que se ve así:

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

y funcionó (:

No sé si esta es la mejor manera de salir, parece que el setup.py debe hacer esto por sí mismo, pero de todos modos ... trabajado

+1

Works! Aparentemente, MANIFEST.in selecciona qué archivos incluir * además * de lo que setup.py/distutils es lo suficientemente inteligente como para incluirlo de manera predeterminada. – chbrown

+13

Haciendo esto además de agregar el 'include_package_data = True' anterior funcionó para mí. Ambos tenían que hacerse: el archivo de manifiesto y la directiva setup.py. – djhaskin987

+0

Acabo de agregar "incluir * .txt". Funciona muy bien – Priyeshj

19

incluir todos los archivos de forma recursiva:

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

donde project_name es una carpeta en la misma línea donde tiene el archivo setup.py.

10

De acuerdo con los documentos, hay three ways para incluir los archivos de datos del paquete. Tienes dos paquetes: Papa y Tomate. El directorio estático no está en ninguno de esos paquetes, por lo que su diccionario package_data en setup.py no estaba funcionando. La opción de manifiesto requiere que include_package_data se establezca en True en setup.py. Acceda a los archivos de datos que no son del paquete y puede hacerlo de la manera en que se encuentra here.

4

Uso siguiente

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

package_data={'templates':['*'],'static':['*'],'docs':['*'],}, 
+0

Esto podría ser demasiado inclusivo. –

Cuestiones relacionadas