2012-08-07 4 views
43

È impossibile includere file statici! Ho provato tutto quello che ho trovato nel tutorial e documentazione, ma invano ...Come includere i file statici in setuptools - pacchetto python

voglio includere il ./static/data.txt, v'è il mio codice:

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

il file system:

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

l'uscita durante l'esecuzione: $ 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) 

e nessun txt aggiunto! No static/data.txt né Potato/potatoData.txt ...

Cosa mi manca ?! Grazie!

risposta

55

aggiunto un MANIFEST.in nella stessa directory di setup.py, che assomiglia a questo:

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

e ha funzionato (:

Non so se questo è il modo migliore per uscire, si presenta come che la setup.py dovrebbe fare questo da sola, ma ha lavorato in ogni caso ...

+1

Works! Apparentemente, MANIFEST.in sceglie i file da includere * in aggiunta * a quanto setup.py/distutils è abbastanza intelligente da includere per impostazione predefinita. – chbrown

+13

Facendo questo più aggiungendo il file 'include_package_data = True 'sopra ho lavorato per me. Entrambe dovevano essere fatte: il file manifest e la direttiva setup.py. – djhaskin987

+0

Ho solo aggiunto "include * .txt". Funziona benissimo – Priyeshj

19

includere tutti i file in modo ricorsivo:

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

dove project_name è una cartella nella stessa riga in cui è presente il file setup.py.

10

Secondo i documenti, ci sono three ways per includere i file di dati del pacchetto. Hai due pacchetti: patate e pomodori. La directory statica non si trova in nessuno di questi pacchetti, ecco perché il tuo dizionario package_data in setup.py non funzionava. L'opzione manifest richiede che include_package_data sia impostato su True in setup.py. Accedere ai file di dati non-pacchetto può essere fatto nel modo trovato here.

4

Usa seguente

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

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

Questo potrebbe essere troppo inclusivo. –