2012-11-29 8 views
5

Więc robię pakiet setuptool.Zestaw narzędzi. Jak utworzyć pakiet zawierający dodatkowy folder danych i wszystkie foldery wewnątrz

Aby uwzględnić dodatkowe pliki danych w pakiecie, należy podać parametr data_file w środku setup().

Kod Przykład:

datadir = os.path.join('share','data') 
datafiles = [(datadir, [f for f in glob.glob(os.path.join(datadir, '*'))])] 
import metainfo # a file with relevant information 
setup(
    name    = 'yourpackage', 
    version   = metainfo.version, 
    maintainer  = metainfo.maintainer, 
    maintainer_email = metainfo.maintainer_email, 
    author   = metainfo.authors, 
    author_email  = metainfo.authors, 
    description  = metainfo.description, 
    keywords   = metainfo.keywords, 
    long_description = metainfo.long_description, 

    # package installation 
    packages = find_packages('src'), 
    package_dir = package_dir, 

    data_files = datafiles, 
} 

datafile zmienna w tym przykładzie będzie zawierać dane, takie jak ten

[('share/data', ['share/data/addon.xml.tmplt', 'share/data/default.py.tmplt'])] 

Jednak mój przykład nie robi listę folderów i plików zawierających rekurencyjnie.

Mam funkcję, która pobiera jako parametr FOLDER_PATH i zwraca listę krotki potrzebne:

[ 
    ('share/data', ['share/data/addon.xml.tmplt', 'share/data/default.py.tmplt']), 
    ('share/data/inside', ['share/data/inside/file.iside', 'share/data/inside/file2.inside']), 
    ......... 

] 

Odpowiedz

9

Używaj os.walk() do wygenerowania tych informacji:

datafiles = [(root, [os.path.join(root, f) for f in files]) 
    for root, dirs, files in os.walk(datadir)] 

To będzie produkować ścieżki bezwzględne; możesz przetwarzać zmienną root trochę bardziej, aby w razie potrzeby były one względne do katalogu setup.py.

+0

możesz użyć '[(root, glob.glob (root /**/*.*, rekursywny = True)]' – warownia1

+0

@ warownia1: nie, ponieważ to nie tworzy '' (directorypath, list_files_in_directory) 'krotek * na katalog *. –

Powiązane problemy