2012-08-07 93 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