2010-06-03 13 views
13

Küçük bir Python projesini bir fermuar veya yumurta dosyası olarak paketlemek için çalışıyorum, böylece dağıtılabilir. Projenin yapılandırma dosyalarını dahil etmenin 2 yolunu buldum, her ikisi de aynı sonuçları üretiyor gibi görünüyor.Bir Python dağılımındaki dosyaları dahil etmek için 2 teknik: hangisi daha iyi?

Yöntem 1:

from distutils.core import setup 

setup(name='ProjectName', 
     version='1.0', 
     packages=['somePackage'] 
    ) 
:

setup.py dosyası bu kodu içerir: 2

from distutils.core import setup 

setup(name='ProjectName', 
     version='1.0', 
     packages=['somePackage'], 
     data_files = [('config', ['config\propFiles1.ini', 
           'config\propFiles2.ini', 
           'config\propFiles3.ini'])] 
    ) 

: Yöntem

setup.py dosyası Bu kodu,

Ardından, Bu satırda bir MANIFEST.in dosyası oluşturun:

include config\* 

Bu yöntemler arasında bir fark var mı? Hangisi tercih edilir? İlkine doğru eğilmeye eğilimliyim çünkü o zaman hiçbir MANIFEST.in dosyası gerekli değil. Ancak, ilk yöntemde, her dosyayı tek tek belirtmeniz gerekir, ikincisini ise tüm klasörü dahil edebilirsiniz. Göz önünde bulundurmam gereken başka bir şey var mı? Standart uygulama nedir?

+0

Not: Yolları oluşturmak için os.path.join kullanın; "\" kullanarak Windows'a özgüdür. –

+9

Tüm platformlarda '/' de kullanabilirsiniz. 'Config \ notes.txt' gibi bir dosya varsa \ n \ 'ın yeni bir satıra dönüşeceğini unutmayın! Sadece şanslısınız, 'p' hiçbir şey için durmuyor. –

+0

@Ian Bicking - bahşiş için teşekkürler! Bunlara dikkat çekmek için hepsini bir r ile önledim. – froadie

cevap

25

MANIFEST.in, python setup.py sdist numaralı telefonu aradığınızda dağıtım dosyalarına hangi dosyaların konduğunu denetler. Ne yüklü değil kontrol eder. data_files (veya daha iyisi package_data) hangi dosyaların yüklü olduğunu kontrol eder (ayrıca dosyaların zip dosyasında bulunduğundan emin olur). Yüklemediğiniz dosyalar için belgeler gibi MANIFEST.in ve Python kodu olmayan (resim veya şablon gibi) dosyalar için package_data kullanın.

+5

Data_files veya package_data'da listelenen dosyaların, yakında gelen 2.7 sürümünden önce herhangi bir Python sürümünde sdist'e otomatik olarak dahil edilmediğine dikkat edin (bu, son olarak düzeltilen bir distutils hatasıdır). serbest bırakma çevrimi). Bu nedenle, gerçekte, şu anda piyasaya sürülen Python sürümleri için, kurulacak dosyalara ihtiyacınız varsa, bunları data_files/package_data AND içinde MANIFEST.in içinde BOTH listelemeniz gerekir. –

+1

Dikkat Ediyorum [3.2 docs] (http://docs.python.org/py3k/distutils/setupscript.html#distutils-additional-files) "3.1'de değiştirildi: package_data (veya data_files) ile eşleşen dosyalar otomatik olarak Hiçbir şablon sağlanmamışsa MANIFEST. " Ancak, bu benim için doğru değil WinXP üzerinde 3.2: Ben bir MANIFEST.in oluşturarak ve bunları ekleyerek onları el ile oraya koymak zorunda. –

+1

Bu garip. Bir hata raporu açar mısın? –

İlgili konular