Kütüphaneler neden her programla birlikte değil ayrı olarak gönderilir?


10

Bunun neden genel olarak iyi olduğunu biliyorum: daha hızlı güvenlik düzeltmeleri, daha kolay paketleme, daha fazla özellik. Ancak, bazı çalışma arkadaşlarını programımızla birlikte bir kütüphane oluşturmamız gerekmediği konusunda ikna etmeye çalışıyorum. Bu kütüphane olmadan çalışmayacak, ancak kütüphane bir süredir istikrarlı ve öngörülebilir gelecek için öyle kalacak. Ayrıştırmak için bir neden görmüyorum.

Onları ikna etmek için hangi argümanları kullanabilirim?


Benim özel durumum şudur: Sembolik matematik için açık kaynaklı bir Python kütüphanesi olan SymPy üzerinde çalışıyorum . Bunun temel bir parçası, çok-prevision kayan nokta aritmetiği için bir kütüphane olan mpmath'tır . SymPy mpmath olmadan çalışmaz, alternatifi yoktur. Bu nedenle, başlangıçtan beri SymPy ile birlikte paketlenmiştir (her yeni sürüm içe aktarıldığında düzeltmek için genellikle küçük uyumsuzluklar olduğu söylendi). Ayrıca, mpmath geliştiricisinin SymPy gelişimine dahil olduğu belirtilmelidir. Artık mpmath'in ayrıştırılmasıyla ilgili bir sorun var, hepsini buradan okuyabilirsiniz .

Buradaki tartışmayı özetlemek gerekirse:

Unsurların:

  • Python 3'e taşınması biraz daha kolay (küçük argüman IMHO)

  • Dağıtımlar için daha kolay paketleme

  • Kullanıcılara daha hızlı (güvenlik) özellik güncellemeleri

  • "Ambalajlama ve elleçleme bağımlılıkları zor problemler ama çözüldü. Bu kesinlikle kendi işimizi yapmamız gereken bir alan değil."

Paketlemeye devam et:

  • Kurulum. Linux'ta kolay, Mac'te zor ve Windows'ta çok zor. Su erişimi ve diğer sorunların olmaması.

  • SymPy'nin ayrılmaz bir parçasıdır, yani sense onsuz çalışmaz (hiç)

  • orada hiçbir başka paket, o mpmath iş yapabilirsiniz

  • "Bir kullanıcı olarak senfoni indirdiğimde, sadece çalışmasını bekliyorum."


Bu benim özel durumum, ama iyi, genel bir cevap da veren bir yanıtı kabul ediyorum.


Daha iyi bir yanıt almak için özel durumunuz hakkında daha fazla bilgi vermeniz gerekir. Örneğin, hangi ortamı çalıştırmayı planlıyorsunuz? İnternete maruz kalacak mı?
tshepang

Başvurunuz açık kaynak mı?
Anton Barkovsky

@Anton Evet, sembolik matematik için açık kaynaklı bir Python kütüphanesi olan SymPy . Bir GSoC öğrencisi olarak çalışıyorum (tam açıklama :)).
VPeric

@Tshepang Tartışma şu adreste görülebilir: code.google.com/p/sympy/issues/detail?id=2482
VPeric

@VPeric: Sorunuzu cevaplamak isteyenler için zaman kazanmak için bu tartışmayı özetlemek çok güzel olurdu.
tshepang

Yanıtlar:


5

Yine başka bir cevap, ama en önemlisi olarak düşündüğüm (sadece kendi kişisel görüşüm), diğerleri de iyi cevaplar.

Lib'in ayrı ayrı paketlenmesi, uygulamanın güncellenmesine gerek kalmadan lib'in güncellenmesine izin verir. Diyelim ki lib'de bir hata var, sadece lib'i güncelleyebilmek yerine, tüm uygulamayı güncellemelisiniz. Bu, uygulamanızın sadece lib nedeniyle kodu değişmeden bir sürüm yumruya ihtiyacı olacağı anlamına gelir.


1
Bu önemli bir noktadır ve birçok dağıtımın neden programlarla birlikte kütüphanelere sahip olmaktan hoşlanmamasının bir parçasıdır; örneğin Debian, yalnızca belirli bir program tarafından (veya statik bağlantı için dinamik bağlamanın desteklenmediği durumlarda) kullanılamadığı sürece bir kitaplığı yürütülebilir bir dosyayla paketlememe veya kitaplığı statik olarak bağlamayan bir ilkeye sahiptir.
Gilles 'SO- kötü olmayı kes'

Sonunda, bu belki de en önemli nokta. Diğer cevaplara da katılıyorum, ama sadece bir tane seçmek zorunda kaldım. :)
VPeric

6

Bahsettiğiniz avantajların (güvenlik, paketleme, özellikler) yanı sıra, biraz daha düşünebilirim:

  • İşlevselliği başka bir program için yararlı bulan birinin, onu bölme işini yapmasına gerek yoktur. Bu, projenizde işlevselliğin ilk etapta bir kütüphane şeklinde olup olmadığını bile biliyorsa. Bu ne kadar iyi tasarlandığına bağlıdır ... projeniz yeterince modüler ise.

  • Bunun diğer projeler için yararlı olması durumunda, bu genel olarak disk kullanımının boyutunu azaltacaktır (örneğin, kodun sadece bir kopyası).

  • Bu, kodunuzun kalitesini artıracak ve bazı (çok gerekli) yeniden düzenleme yapmaya zorlayacaktır. Yukarıdaki ilk noktada olduğu gibi bu, kodunuzun kalitesine de bağlıdır.

  • Kütüphanenin kullanıcı sayısını arttırmak (eğer bölünmüşse) kütüphanenin daha genel olmasına yardımcı olur, bu da kalitesini artıracaktır.


1
Tüm iyi puan. Sanırım "geleceğe hazır" olarak okunabilir: puanlarınızdan birkaçı şu anda geçerlidir (mpmath şu anda sadece birkaç projede kullanılmaktadır), ancak puanlarınızın her birinin her yeni proje için değer kazandığını görmek kolaydır mpmath kullanarak.
VPeric

4

Avantajlar açık olsa da, dağıtım kolaylığı, sizin durumunuzdaki programla birlikte nakliye kütüphanesi için ana argüman gibi görünmektedir.

Paketlemeye karşı birkaç argüman daha:

  • Linux'ta, kitaplığınızın bağımlılıkları ile iyi çalışmasını sağlamak dağıtım yöneticisinin görevidir. Çoğu kullanıcı her durumda dağıtımın paket yöneticisini kullanarak kütüphaneyi indirir. Bagajı kullananlar genellikle kütüphaneyi yapılandırmak için zaman harcamayı umursamazlar.

  • Windows ve Mac OS'de pip gibi Python paket yöneticileri genellikle zaten kullanılır, çünkü kitaplıkları elle yüklemek zahmetlidir.

  • Google uygulama motoruna zorla dağıtım hakkında tartışmalar bile var, ancak tüm web çerçeveleri üzerinde çalışmaz. Birçoğu bile bağlantı gerektirir, kütüphaneler için disk alanı sınırlıdır ve sonuçta web uygulaması barındırma! Web uygulamasının sembolik matematik kullanması pek olası değildir.

  • Bağımlılık yoksa veya yanlış sürüme sahipse kimse temiz hata iletileri görüntülemenizi engellemez.

  • Program kendisinden daha zeki olduğunu düşündüğünde insanlar bundan sık sık nefret ederler. Kullanıcıların kendi sistemlerine bakmasına izin verin.


Son noktayı açıklayabilir misiniz? Paketlemeye karşı / tartışmaya karşı bir argüman olup olmadığını söyleyemem.
tshepang

3
Paketlemeye karşı anlıyorum - kullanıcılar istedikleri şeyi yüklemek istiyorlar, üzerlerinde belirli bir sürümü zorlamıyorlar.
VPeric

3

Uygun bir yol paket kütüphanenin varlığı için preinst testi olacaktır yükleyicisi pencerelerde ayrıştırılmış işlemek için ve mevcut değilse, yazılım yükleyici paketinde içerdiğini kütüphane paketinden yüklemek için teklif. Windows portları olan çoğu GTK uygulamasının bu hatlar boyunca bir şeyler yaptığından eminim - pidgin'in yaptığını biliyorum .


3

Bir beden herkese uymak zorunda değildir.

Kaynak dağıtımları için, gruplandırırsanız, birçok dağıtımdaki (en azından Debian ve Fedora miraslarının) paketleyicilerin, bu platformlar için paket ilkeleri paketlemeyi yasakladığı veya en azından kesinlikle cesaretini kırdığı için, paketlemeyi devre dışı bırakmak veya kaldırmak için ek çalışmalar yapmak zorundadır. Bu nedenle, demetleme yoluyla, aşağı akışınız için çok az fayda ile daha fazla iş yaratıyorsunuz. Bu argümanın ağırlığı olabilir mi?

İkili dağıtımlar (bunları sağlarsanız) her iki şekilde de gidebilir; demetleme, aşağı akış tarafından kullanılmadıkları için muhtemelen mantıklıdır.

Ancak, Windows ve Mac yükleyicileri için tam tersi karar verememenizin bir nedeni yoktur.


1
Genel olarak hemfikir olsam da, muhtemelen hiç kimse bu çözümü desteklemeyeceği anlamına gelen ekstra bir yük (ancak küçük) yaratıyor.
VPeric

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.