2010-12-18 9 views
0

次のスクリプトを使用して、Python用のテーマ/テンプレートを作成しています。ファイルは、設定の目的のためにそこに多くのPythonのファイルで、主にHTML & JSです:Python配布を作成する:HTMLとJSなどのファイルを含む問題

import os 
import sys 
from fnmatch import fnmatchcase 
from distutils.util import convert_path 
from setuptools import setup, find_packages 

VERSION = __import__('pinax-designer-theme').__version__ 

def read(*path): 
    return open(os.path.join(os.path.abspath(os.path.dirname(__file__)), *path)).read() 

# Provided as an attribute, so you can append to these instead 
# of replicating them: 
standard_exclude = ('*.py', '*.pyc', '*~', '.*', '*.bak') 
standard_exclude_directories = ('.*', 'CVS', '_darcs', './build', 
           './dist', 'EGG-INFO', '*.egg-info') 

# Copied from paste/util/finddata.py 
def find_package_data(where='.', package='', exclude=standard_exclude, 
     exclude_directories=standard_exclude_directories, 
     only_in_packages=False, show_ignored=False): 
    """ 
    Return a dictionary suitable for use in ``package_data`` 
    in a distutils ``setup.py`` file. 

    The dictionary looks like:: 

     {'package': [files]} 

    Where ``files`` is a list of all the files in that package that 
    don't match anything in ``exclude``. 

    If ``only_in_packages`` is true, then top-level directories that 
    are not packages won't be included (but directories under packages 
    will). 

    Directories matching any pattern in ``exclude_directories`` will 
    be ignored; by default directories with leading ``.``, ``CVS``, 
    and ``_darcs`` will be ignored. 

    If ``show_ignored`` is true, then all the files that aren't 
    included in package data are shown on stderr (for debugging 
    purposes). 

    Note patterns use wildcards, or can be exact paths (including 
    leading ``./``), and all searching is case-insensitive. 
    """ 

    out = {} 
    stack = [(convert_path(where), '', package, only_in_packages)] 
    while stack: 
     where, prefix, package, only_in_packages = stack.pop(0) 
     for name in os.listdir(where): 
      fn = os.path.join(where, name) 
      if os.path.isdir(fn): 
       bad_name = False 
       for pattern in exclude_directories: 
        if (fnmatchcase(name, pattern) 
         or fn.lower() == pattern.lower()): 
         bad_name = True 
         if show_ignored: 
          print >> sys.stderr, (
           "Directory %s ignored by pattern %s" 
           % (fn, pattern)) 
         break 
       if bad_name: 
        continue 
       if (os.path.isfile(os.path.join(fn, '__init__.py')) 
        and not prefix): 
        if not package: 
         new_package = name 
        else: 
         new_package = package + '.' + name 
        stack.append((fn, '', new_package, False)) 
       else: 
        stack.append((fn, prefix + name + '/', package, only_in_packages)) 
      elif package or not only_in_packages: 
       # is a file 
       bad_name = False 
       for pattern in exclude: 
        if (fnmatchcase(name, pattern) 
         or fn.lower() == pattern.lower()): 
         bad_name = True 
         if show_ignored: 
          print >> sys.stderr, (
           "File %s ignored by pattern %s" 
           % (fn, pattern)) 
         break 
       if bad_name: 
        continue 
       out.setdefault(package, []).append(prefix+name) 
    return out 

excluded_directories = standard_exclude_directories + ('./requirements', './scripts') 
package_data = find_package_data(exclude_directories=excluded_directories) 

setup(
    name='pinax-designer-theme', 
    version=VERSION, 
    description='Pinax Designer Theme is a designer framework of django HTML(5) templates and Less.js CSS files, including a CSS grid, for Pinax.', 
    long_description=read('docs', 'index.rst'), 
    author='Daryl Antony', 
    author_email='[email protected]', 
    maintainer='Daryl Antony', 
    maintainer_email='[email protected]', 
    url='http://commoncreative.com.au/', 
    packages=find_packages(), 
    package_data=package_data, 
    zip_safe=False, 
    # entry_points={ 
    #   # 'console_scripts': [ 
    #   #    'pinax-admin = pinax.core.management:execute_from_command_line', 
    #   #   ], 
    #  }, 
    classifiers=[ 
     'Development Status :: 3 - Alpha', 
     'Environment :: Web Environment', 
     'Intended Audience :: Developers', 
     'License :: OSI Approved :: MIT License', 
     'Operating System :: OS Independent', 
     'Framework :: Django', 
     'Programming Language :: Python', 
     'Programming Language :: Python :: 2.4', 
     'Programming Language :: JavaScript', 
    ], 
) 

これをコピーして、実際のP​​inax setup.pyから変更されています。今

package_data変数、すなわち実行した後、必要なすべてのファイルが含まれているように見えるしながら:

import ipdb; ipdb.set_trace() 

とpackage_dataの内容があることを発見:

http://dpaste.org/ojM0/

のなしこれらのファイルは、ディレクトリと* .pyファイルを除いて実際にパッケージに含まれているようです。

質問がありますが、これを変更するにはどうすればよいですか。そして、なぜpackage_data変数の内容が無視されるのですか?

多くの感謝!

答えて

3

MANIFEST.inでこれらのファイルを指定する必要があると思います。

+0

手動で、またはこれを自動的に行う方法がありますか? – Daryl

+0

ああ、私は 'recursive-include'を見ますか? – Daryl

+0

私は同じ問題を抱えていましたが、手動でMANIFESTにファイルを含めましたが、それは動作します...しかし、それは唯一の解決策ではありません!さもなければ、なぜ 'package_data'パラメタがありますか? – sebpiq

関連する問題