2015-09-16 21 views
8

paketinin dışına ek dosyalar ekliyorum Değiştiremediğim sabit bir düzeni olan bir python uygulamasına sahibim. Kurulum araçları kullanarak ör. Bir setup.py komut dosyası yazın.setuptools:

Resmi belgeleri kullanarak, bir ilk şablon yazabiliyordum. Ancak, söz konusu uygulama, herhangi bir paketin açıkça bir parçası olmayan birçok ek veri dosyası kullanır.

somepackage 
    __init__.py 
    something.py 
    data.txt 
additionalstuff 
    moredata.txt 
INFO.txt 

İşte belası: İşte bir örnek kaynak ağacı something.py kod dosyaları moredata.txt ve INFO.txt okur. Birincisi için, additionalstuff ürününü bir pakete tanıtmak için additionalstuff/__init__.py boş bir dosya ekleyerek ve setuptools tarafından alınmasını sağlayarak sorunu çözebilirim. Fakat INFO.txt'u .egg'a nasıl ekleyebilirim? dosyalar moredata ve INFO.txt bir pakete ait fakat ayrı bir klasöre parçası olan yok çünkü benim için çalışmıyor

package_data = { '' : ['moredata.txt','INFO.txt']} 

çizgisinde bir şey kullanarak

Düzenleme

önerilen çözümler Bu, modülün sadece bir parçası, herhangi bir bireysel paketin değil. Yukarıda açıklandığı gibi, bu, additionpythonalstuff numaralı __init__.py dosyasını ekleyerek moredata.txt durumunda düzeltilebilir, böylece bir pakete tanıtılır. Ancak, bu zarif bir çözüm değildir ve üst düzey dizinde yaşayan INFO.txt için hiç çalışmaz. kabul edilen yanıt dayanarak

Çözüm

, burada bu setup.py olan çözüm

var:

from setuptools import setup, find_packages 

setup(
    name='mytest', 
    version='1.0.0', 
    description='A sample Python project', 
    author='Test', 
    zip_safe=False, 
    author_email='[email protected]', 
    keywords='test', 
    packages=find_packages(), 
    package_data={'': ['INFO.txt', 'moredata.txt'], 
        'somepackage':['data.txt']}, 
    data_files=[('.',['INFO.txt']), 
       ('additionalstuff',['additionalstuff/moredata.txt'])], 
    include_package_data=True, 
) 

Ve bu MANIFEST.in geçerli:

include INFO.txt 
graft additionalstuff 
include somepackage/*.txt 
+1

[Setup.py ile Python olmayan dosyalar dahil] olası bir kopyası (http://stackoverflow.com/questions/1612733/including-non-python-files-with-setup-py) – pacholik

+1

Bu bir kopya değildir . Verilen soruda, kabul edilen çözüm 'package_data' kullanmaktır. Bu zaten yaptım. '' '(Boş dize) kullanmak için verilen çözümün, benim eklemek istemediğim dosyaya ait olmadığından, benim için geçerli olmayan "tüm paketler" e atıfta bulunduğundan, benim için çalışmadığına dikkat edin. * Karşı karşıya olduğum problem olan herhangi bir * paket. – carsten

cevap

2

data_files=[("yourdir", 
      ["additionalstuff/moredata.txt", "INFO.txt"])], 

data_files bu dosyaları koymak istediğiniz yerler hakkında bir düşünmek var: Kök dizininde setup.py koy, ve sadece gerekir. Daha fazla bilgi için docs.

0

Sen gerek package_data kullanın. Orada da

package_data={'': [ 
    'somepackage/*.txt', 
    'additionalstuff/*.txt', 
    '*.txt', 
] 
+1

Bu yanıt, "tüm paketler" e atıfta bulunmak için '' '' özelliğine dayanır. Ancak, 'INFO.txt' dosyası herhangi bir * pakete ait değildir ve bu nedenle alınmaz. – carsten

+0

Benim için çalışıyor. Benim yaptığım projenin kökünde tam olarak aynı dizin ağacı yapılandırmasına sahibim ve sadece bir README.md ve setup.py var. README.md paket_data kullanılarak doğru şekilde dahil edilir. –

+0

Bu beni şaşırtıyor. Küçük bir test çantası oluşturdum ve yine aynı problemi gözlemledim. Yaptığım şeyden farklı bir şey yapıyor gibisin. Söz konusu projeye bir link verebilir misiniz, böylece mimariyi araştırabilir miyim? – carsten

İlgili konular