2010-12-18 5 views
0

다음 스크립트를 사용하여 Pinax 용 테마/템플릿 인 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', 
    ], 
) 

이 복사 실제 Pinax 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