8

今日、私はsetup.py-fileを作成し、1つの動作するスクリプトと2つの動作しないシナリオを見つけました。2つの機能しないシナリオpackage_dataでは、ビルドにafterがありません。でビルドを作成しましたpython setup.py sdist

シナリオ2と3にパッケージデータが含まれていないのはなぜですか?

シナリオ1は機能します:

import os 
from distutils.core import setup

def find_packages(path):
    package_path = os.path.join(os.path.dirname(__file__), path)
    packages = []
    for f in os.walk(package_path):

    directory_name = f[0]

    if directory_name.endswith('egg-info') or directory_name.endswith('path'):
        continue

    directory_name = directory_name.replace(package_path, '').replace('/', '.').strip()

    if not len(directory_name):
        continue

    if directory_name.startswith('.'):
        directory_name = directory_name.replace('.', '', 1)

    packages.append(directory_name)

return packages

setup (
    name = 'mypkg',
    packages = find_packages('src'),
    package_dir = {'mypkg': 'src/mypkg'},
    include_package_data = True,
    package_data = {
        '': ['*.txt'],
        'mypkg': ['data/*.dat'],
    }
)

シナリオ2は機能しません:

from setuptools import setup #, find_packages
from setuptools.command import sdist
setup (
    name = 'mypkg',
    packages = ['mypkg'],
    package_dir = {'mypkg': 'src/mypkg'},
    include_package_data = True,
    package_data = {
        '': ['*.txt'],
        'mypkg': ['data/*.dat'],
    }
)

シナリオ3も機能しません。

from setuptools import find_packages
from setuptools.command import sdist
setup (
    name = 'mypkg',
    packages = find_packages('src'),
    package_dir = {'mypkg': 'src/mypkg'},
    include_package_data = True,
    package_data = {
        '': ['*.txt'],
        'mypkg': ['data/*.dat'],
    }
)
4

2 に答える 2

5

私の場合、問題はsetup.pyではなく、パッケージデータを宣言する必要があるMANIFEST.inの欠落にありました。

于 2013-02-09T20:21:19.413 に答える
3

package_data 宣言で glob 構文を直接使用することはできません。

ただし、setup 関数に渡す前に、このデータを含む変数を宣言できます。

from glob import glob

data = glob('data/*.dat')
txt_files = glob('*.txt')

...

setup(...
package_data = {
    '': txt_files,
    'mypkg': data,
}
...
于 2014-10-14T15:29:54.667 に答える