2012-08-07 94 views
43

包含靜態文件是不可能的!我想,我在教程和文檔已找到的一切,但一切都是徒勞...如何將靜態文件包含到setuptools中 - python包

我想包括./static/data.txt,有我的代碼:

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

文件系統:

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

運行時輸出: $蟒蛇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) 

並沒有添加txt!沒有static/data.txt也沒有Potato/potatoData.txt ...

我在想什麼?! 謝謝!

回答

55

只是在setup.py同一目錄中增加了一個MANIFEST.in,看起來像這樣:

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

和它的工作(:

我不知道這是否是最好的出路,看起來像該setup.py應該這樣做本身,但無論如何努力......

+1

作品!顯然,MANIFEST.in會挑選哪些文件要包含*另外* setup.py/distutils的默認設置足夠聰明。 – chbrown 2014-01-18 13:55:38

+13

這樣做加上'include_package_data = True'上面的工作來回我。兩者都必須完成:清單文件和setup.py指令。 – djhaskin987 2015-01-14 00:03:06

+0

我只是添加「包含* .txt」。作品很棒thnx – Priyeshj 2015-11-23 23:27:02

19

遞歸包含的所有文件:

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

其中project_name是您在setup.py文件的同一行中的文件夾。

10

根據文檔,有three ways包括包數據文件。你有兩個包:土豆和番茄。靜態目錄不在這兩個包中,所以這就是爲什麼setup.py中的package_data字典無法使用。清單選項要求setup.py中的include_package_data設置爲True。訪問非包數據文件可以按here的方式完成。

4

使用以下

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

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

這可能太包容。 – 2017-03-27 13:19:24