2011-07-15 23 views
8

Tôi đã có một tập tin setup.py mà trông như thế này:setuptools: tập tin dữ liệu bao gồm với `bdist` nhưng không phải với` sdist`

#!/usr/bin/env python 
from setuptools import setup, find_packages 

setup(
    name="foo", 
    version="1.0", 
    packages=find_packages(), 
    include_package_data=True, 
    package_data={ 
     "": ["*"], 
    }, 
) 

Và một gói foo mà trông như thế này:

foo/__init__.py 
foo/bar.txt 

Khi tôi chạy setup.py bdist, tệp bar.txt được (chính xác) được bao gồm trong phân phối… Nhưng khi tôi sử dụng setup.py sdist thì không.

Có chuyện gì với điều đó? Tôi có hiểu nhầm ý nghĩa của package_data không? Hoặc đây có phải là một điều không minh bạch của setuptools?

Trả lời

10

Có nhiều nguồn khác nhau để chọn các tệp đó. Package_data được sử dụng để cài đặt từ cây nguồn. Việc xây dựng một gói nguồn bạn cũng cần một tệp MANIFEST.in. Nó phải chứa một cái gì đó như recursive-include *.txt, hoặc bất cứ điều gì bạn cần.

+2

Ah… Vậy, trong trường hợp nào tôi sẽ sử dụng 'package_data' sau đó? –

+5

Tệp kê khai xác định những gì được bao gồm trong phân phối nguồn, nhưng package_data là tệp được sử dụng để xác định bất kỳ tệp dữ liệu nào bạn muốn cài đặt cùng với tệp Python nguồn ở vị trí gói (gói trang web). Các tệp đó trong MANIFEST.in có thể không tài liệu hoặc các tệp khác mà bạn không muốn được cài đặt ở đó, nhưng muốn trong bản phân phối nguồn. – Keith

Các vấn đề liên quan