Mungkin cara terbaik untuk melakukan ini adalah dengan menggunakan setuptools
package_data
arahan. Ini berarti menggunakan setuptools
(atau distribute
) alih-alih distutils
, tetapi ini adalah "peningkatan" yang sangat mulus.
Berikut ini contoh lengkap (tetapi belum teruji):
from setuptools import setup, find_packages
setup(
name='your_project_name',
version='0.1',
description='A description.',
packages=find_packages(exclude=['ez_setup', 'tests', 'tests.*']),
package_data={'': ['license.txt']},
include_package_data=True,
install_requires=[],
)
Perhatikan baris spesifik yang sangat penting di sini:
package_data={'': ['license.txt']},
include_package_data=True,
package_data
adalah dict
nama paket (kosong = semua paket) ke daftar pola (dapat menyertakan gumpalan). Misalnya, jika Anda hanya ingin menentukan file di dalam paket Anda, Anda dapat melakukannya juga:
package_data={'yourpackage': ['*.txt', 'path/to/resources/*.txt']}
Solusinya di sini jelas bukan untuk mengganti nama non- py
file Anda dengan a.py
ekstensi.
Lihat presentasi Ian Bicking untuk info lebih lanjut.
UPDATE: Pendekatan [Lebih Baik] Lain
Pendekatan lain yang berfungsi dengan baik jika Anda hanya ingin mengontrol konten distribusi sumber ( sdist
) dan memiliki file di luar paket (misalnya direktori tingkat atas) adalah menambahkan MANIFEST.in
file. Lihat dokumentasi Python untuk format file ini.
Sejak menulis respons ini, saya telah menemukan bahwa menggunakan MANIFEST.in
biasanya merupakan pendekatan yang kurang membuat frustrasi untuk memastikan distribusi sumber Anda ( tar.gz
) memiliki file yang Anda butuhkan.
Misalnya, jika Anda ingin memasukkan requirements.txt
dari tingkat atas, secara rekursif sertakan direktori "data" tingkat atas:
include requirements.txt
recursive-include data *
Namun demikian, agar file-file ini dapat disalin pada waktu instalasi ke folder paket di dalam paket-situs, Anda harus menyediakan include_package_data=True
ke setup()
fungsi tersebut. Lihat Menambahkan File Non-Kode untuk informasi lebih lanjut.