Muhtemelen bunu yapmanın en iyi yolu setuptools
package_data
direktifi kullanmaktır . Bu, yerine setuptools
(veya distribute
) kullanmak anlamına gelir distutils
, ancak bu çok sorunsuz bir "yükseltme" dir.
İşte tam (ama denenmemiş) bir örnek:
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=[],
)
Burada kritik olan belirli satırlara dikkat edin:
package_data={'': ['license.txt']},
include_package_data=True,
package_data
bir dict
desen listesine paket isimleri (boş = tüm paketler) (globs içerebilir) arasında. Örneğin, yalnızca paketinizdeki dosyaları belirtmek istiyorsanız, bunu da yapabilirsiniz:
package_data={'yourpackage': ['*.txt', 'path/to/resources/*.txt']}
Burada çözüm kesinlikle değil sizin olmayan adlandırmak py
bir dosya .py
uzantısı.
Daha fazla bilgi için Ian Bicking'ın sunumuna bakın .
GÜNCELLEME: Başka [Daha İyi] Yaklaşım
Sadece kaynak dağıtımının ( sdist
) içeriğini kontrol etmek ve paketin dışında dosyalara (örneğin üst düzey dizin) sahip olmak istiyorsanız iyi çalışan başka bir yaklaşım da MANIFEST.in
dosya eklemektir . Bu dosyanın biçimi için Python belgelerine bakın .
Bu yanıtı yazdığından beri MANIFEST.in
, kaynak dağıtımınızın ( tar.gz
) ihtiyacınız olan dosyalara sahip olduğundan emin olmak için kullanmanın genellikle daha az sinir bozucu bir yaklaşım olduğunu gördüm .
Örneğin, requirements.txt
üst düzeyden eklemek istiyorsanız , üst düzey "veri" dizinini özyineli olarak ekleyin:
include requirements.txt
recursive-include data *
Bununla birlikte, bu dosyaların yükleme sırasında site paketleri içindeki paketin klasörüne kopyalanması include_package_data=True
için, setup()
işleve sağlamanız gerekir . Daha fazla bilgi için bkz. Kod Dışı Dosyalar Ekleme .