Yüzünde, öyle görünüyor requirements.txt
ve setup.py
aptalca kopyalar, ancak form benzer olsa da, amaçlanan fonksiyonun çok farklı olduğunu anlamak önemlidir.
Bir paket yazarının amacı, bağımlılıkları belirtirken, "bu paketi her nereye yüklerseniz yükleyin, bu paketin çalışması için ihtiyacınız olan diğer paketlerdir" demektir.
Buna karşılık, dağıtım yazarı (farklı bir zamanda aynı kişi olabilir) farklı bir işe sahiptir, çünkü "burada topladığımız ve test ettiğimiz ve şimdi yüklemem gereken paketler listesi".
Paket yazarı çok çeşitli senaryolar için yazıyor, çünkü çalışmalarını bilmedikleri yollarla kullanılmak üzere ortaya koyuyorlar ve paketlerinin yanında hangi paketlerin kurulacağını bilmenin bir yolu yok. İyi bir komşu olmak ve diğer paketlerle bağımlılık sürümü çakışmalarını önlemek için, muhtemelen çalışabilecek kadar geniş bir bağımlılık sürümleri yelpazesi belirtmeleri gerekir. Bu ne install_requires
de setup.py
yapar.
Dağıtım yazarı çok farklı ve çok özel bir amaç için yazar: yüklü bir uygulamanın veya hizmetin belirli bir bilgisayara yüklenen tek bir örneği. Bir dağıtımı tam olarak denetlemek ve doğru paketlerin sınandığından ve dağıtıldığından emin olmak için, dağıtım yazarının, bağımlılıklar ve bağımlılık bağımlılıkları da dahil olmak üzere, yüklenecek her paketin tam sürümünü ve kaynak konumunu belirtmesi gerekir. Bu spesifikasyonla, bir dağıtım birkaç makineye tekrarlanabilir şekilde uygulanabilir veya bir test makinesinde test edilebilir ve dağıtım yazarı her seferinde aynı paketlerin konuşlandırıldığından emin olabilir. Bu, a'nın requirements.txt
yaptığı şeydir .
Gördüğünüz gibi, ikisi de büyük bir paket ve sürüm listesi gibi görünse de, bu iki şeyin çok farklı işleri var. Ve bunu karıştırmak ve yanlış yapmak kesinlikle kolay! Ancak bunu düşünmenin doğru yolu requirements.txt
, çeşitli setup.py
paket dosyalarındaki gereksinimlerin ortaya koyduğu "soru" nun "cevabı" dır . Elle yazmak yerine, genellikle pip'e setup.py
, istenen paketlerdeki tüm dosyalara bakmasını, tüm gereksinimlere uyduğunu düşündüğü bir paket kümesi bulmasını ve ardından kurulduktan sonra "dondurmasını söyleyerek üretilir. msgstr "bu paketlerin listesini bir metin dosyasına ( pip freeze
adın geldiği yer).
Yani paket servisi olan restoran:
setup.py
hala uygulanabilir olan en gevşek bağımlılık sürümlerini bildirmelidir. Görevi, belirli bir paketin neyle çalışabileceğini söylemek.
requirements.txt
tüm kurulum işini tanımlayan ve herhangi bir pakete bağlı olduğu düşünülmemesi gereken bir dağıtım bildirimidir. Görevi, bir dağıtım işini yapmak için gerekli tüm paketlerin kapsamlı bir listesini bildirmektir.
- Bu iki şeyin çok farklı içeriği ve mevcut nedenleri olduğundan, birini diğerine kopyalamak mümkün değildir.
Referanslar:
install_requires
paketin çalışması için gerekli olan ve paketin geliştiricisi tarafından kullanılan paketlere bağımlılıkları bildirmek için kullanılırkenrequirements.txt
, ekstra yazılım yüklemeye izin veren ve sürüm sabitlemeyi sağlayan ve sürümü dağıtan sistem yöneticileri tarafından kullanılan ortamların yüklenmesini otomatikleştirmek için kullanılır. paketlemek. Rolleri ve hedef kitleleri önemli ölçüde farklılık gösterir, bu yüzden onları OP'nin istediği gibi birleştirmeye çalışmak gerçek bir tasarım hatası imho'dur.