Python projelerinin MANIFEST.in'e ihtiyacı var mı ve içinde ne olmalı?


121

"Python Dağıtma" kılavuzu (python-distribute.org adresindeydi, ancak kayıt süresi doldu) bana doc/txtdosyaları dahil etmemi söylüyor ve .pydosyalar MANIFEST.indosyada hariç tutuldu

Kaynak listesi belgeleri bana yalnızca sdist'in kullandığını MANIFEST.inve yalnızca belirttiğiniz dosyayı ve .pydosyaları içerdiğini söylüyor . Ayrıca şunu kullanmamı söylüyor: python setup.py sdist --manifest-onlya oluşturmak için MANIFEST, ancak python bana bunun olmadığını söylüyor

Bunların farklı python sürümlerinden olduğunu ve dağıtım sisteminin tam bir karmaşa içinde olduğunu anlıyorum, ancak python 3 ve setuptools(yeni olanı dağıtmayı içeren, ancak şimdi kurulum araçları olarak adlandırılan, yalnızca dağıtım araçları için kullanımdan kaldırılan eski kurulum araçları değil) kullandığımı varsayarsak yeniden dağıtıma getirilecek ve kurulum araçlarına yeniden adlandırılacak .....)

ve 'standart' klasör yapısını ve setup.pydosyasını takip ediyorum ,

  1. Bir ihtiyacım var MANIFEST.inmı?
  2. İçinde ne olmalı?
  3. Tüm bu farklı paket sistemleri ve yöntemleri ne zaman tek ve basit bir süreç haline getirilecek?

Yanıtlar:


118

Re: "MANIFEST.in'e ihtiyacım var mı?

Hayır, kullanmak zorunda değilsin MANIFEST.in. Hem distutilsve setuptoolskaynak dağılımı paketindeki tüm belirtilen dosyaları dahil setup.py- modülleri, paket piton dosyaları README.txtve test/test*.py. Dağıtım paketinde sahip olmak istediğiniz tek şey buysa, kullanmak zorunda değilsiniz MANIFEST.in.

Dahil edilecek varsayılan dosyaları değiştirmek (eklemek veya kaldırmak) istiyorsanız, kullanmanız gerekir MANIFEST.in.

Re: İçinde ne olmalı?

Prosedür basittir:

  1. Senin içinde, emin olun setup.pysize (vasıtasıyla dahil setup(... modüller, paketler, komut) argümanları) programı çalıştırmak için önemli hissediyorum tüm dosyaları

  2. Eklenecek bazı dosyalar veya dışarıda bırakılacak dosyalar olup olmadığını belirtin. İkisine de gerek yoksa, kullanmaya gerek yoktur MANIFEST.in.

  3. Gerekirse MANIFEST.inoluşturun. Genellikle, orada eklemek tests*/*.py, dosyaları README.rstkullanmak yoksa README.txt, docsgerekirse test paketi için dosyaları ve muhtemelen bazı veri dosyalarını.

Örneğin:

include README.rst
include COPYING.txt

Test etmek için, python setup.py sdistaltında oluşturulan tarball'ı çalıştırın ve inceleyin dist/.

Tüm bu farklı paket sistemler ne zaman ...

Bugün ve 2 yıl önceki durumu karşılaştırmak - durum çok daha iyi - setuptoolsgidilecek yoldur. Gerçeği görmezden gelebilirsiniz, distutilsbiraz bozuk ve düşük seviyeli bir temeldir, setuptoolsçünkü setuptoolsbunları sizden saklamakla ilgilenirsiniz.

DÜZENLEME : pbrÜç hatlı dağıtım paketleri oluşturmak için kullandığım son birkaç proje setup.pyve geri kalanlar setup.cfgve requirements.txt. Umursamana gerek yok MANIFEST.inve diğer garip şeyler. Paket biraz daha fazla dokümantasyonu hak edecek olsa bile. Bkz. Http://docs.openstack.org/developer/pbr/


1
Benim sınırlı deneyimime göre, eğer bir python modülünün ( init .py ile dir ) içinde olmayan dosyaları dahil etmek istiyorsanız , MANIFEST.in ve sdist(anlam: kaynak dağıtımı ) komutunu kullanmanız gerekir. Eğer düşünürsek bdistve bdist_wheelolan ikili ve yalnızca piton yolunda kurulması amaçlanan, bu mantıklı. (Bu modül olmayan dosyalar ve dizinler nereye gider? İçeri /usr/local/lib/python2.7/dist-packages/? Elbette hayır.) Ancak, oluşturulan arşivi görmek kafa karıştırıcı olduğundan ve dosyaları içermediğinden bahsetmeye değer.
Bruno Bronosky

7
Kaçınılmaz kapalı başkanı package_datave data_fileskapsam dışında olan, tavsiyeler, devam edeceğiz. * .py adı olmadığı için atlanacak olan package_datapaketinizle birlikte yüklenen dosyaları listeler dist-packages/yourpackage. data_filespaketinizin dışında yüklenen dosyaları listeler. Her girdi sys.prefix, göreli veya doğrudan oluşturulmuşsa (izinler izin veriyorsa) ön ekli bir hedef yolu belirtir /.
Bruno Bronosky

2
@JanVlcinsky ne olduğunu bilmek önemlidir ve [daha da önemlisi] farklı dağıtım formatlarına dahil edilmemiştir . Paketin dışına (kökte) bir boto.sample.cfg dosyası (sahte bir AWS IAM kimlik bilgisi içeren) dahil ettiğim ve ikili dağıtımlar bunu içermeyeceği için yalnızca kaynak dağıtımı yoluyla dağıttığım genel bir projem var. Data_files = [('/ etc /', ['boto.cfg'])] olan üretime dağıtım için özel ikili yapılar oluşturuyorum. Py olmayan dosyaları dağıtmak istiyorsanız, bunların nasıl çalıştığını bilmeniz gerekir.
Bruno Bronosky

2
@MichaelGoerz Dürüst olmak gerekirse, yapmamalılar. Bu cevap çok eski ve önermek pbrde kötü bir fikir.
Arne

1
@Ame Katılıyorum, işler ilerledi. Şu anda projelerimin çoğunu
pbr'den

7

Eski soru, yeni cevap:

Hayır, ihtiyacın yok MANIFEST.in. Bununla birlikte, setuptools(genellikle) demek istediğiniz şeyi yapmak için setuptools_scm, MANIFEST.in2 önemli yerde rol alan , kullanmanız gerekir :

  • sdistKomutu çalıştırırken ilgili tüm dosyaların paketlenmesini sağlar (burada tüm ilgili dosyalar "kaynak kontrolü altındaki tüm dosyalar" olarak tanımlanır)
  • include_package_dataPaket verilerini buildveya öğesinin bir parçası olarak eklemek için kullanılırken bdist_wheel. (tekrar: kaynak kontrolü altındaki dosyalar)

Tarihsel anlayış MANIFEST.inşudur: Bir kaynak kontrol sisteminiz olmadığında, "kaynak dosyalar" ile "çalışma dizininizde bulunan dosyalar" arasında ayrım yapmak için başka bir mekanizmaya ihtiyacınız vardır. Ancak, projeniz kaynak kontrolü altında (doğru mu?) Bu yüzden buna gerek yok MANIFEST.in. Bu makalede daha fazla bilgi .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.