SORU
13 AĞUSTOS 2011, CUMARTESİ


Python/setuptools giriş noktaları (uzantıları) uygulamaları/diğer dillerde alternatif uygulamalar

Bu soruyu python bir arka uç olsa da, sorudeğilpython bağlı kendisi, ama/register nasıl uzantı mekanizmaları hakkında oldukça ve eklentileri için arama.

Python, entrypoints kavramı setuptools tarafından tanıtıldı ve yüklü python dağıtımları (diğer ambalaj sistemleri paketleri) meta bağlıdır.

Olarak bildiğim kadarıyla, biri tarafından sağlanan özelliklere entrypoints altında bırakmak bir uygulama için belirli bir yere koymak olabilir diğer şeyler, yani herhangi bir uygulama kullanmak isteyenler için bir giriş noktası olabilir bir listesi tescil sınıfları/işlevleri vardır. Bir örnek verelim:

  • Foo tanımlar "entrypoint1" ve eklentileri bu isimle kayıtlı arayın. girişnoktası
  • Bar kayıt üzerinde bir çağrı (Bar.callable) "entrypoint1" giriş noktası.
  • Herhangi bir python betiği sonra kayıtlı callables için biri olarak Bar.callable liste yapabiliyor "". entrypoint1

Setuptools ile, uygulamaları yüklemek zamanda entrypoints kaydeder ve bu bilgileri meta ambalaj, adı ile saklanır .egginfo genellikle dağıtım adı hakkında bilgi, bağımlılıkları ve ambalaj hakkında daha fazla meta veri içeren ().

Ambalaj meta bu bilgiler ambalaj bağlı olduğunu anlamıyorum gibi bu tür bilgileri saklamak için doğru yer olmadığını düşünüyorum.

/Plugins diğer dillerde özellikleri/, ve özellikle eğer bir kavram meta ve ambalaj bağlı olup olmadığını böyle entrypoints duymak merak ediyorum. Ve soru şu...

Bir baksam iyi olur örnekler var mı? Tasarım seçimleri bu şekilde yapıldı neden açıklayabilir misiniz?

Bu sorunun çözümü için farklı yollar görebiliyor musun? Bu sorun zaten farklı araçlar çözüldü biliyor musunuz? Bu olumsuzlukları ve diğerleri içinde geçerli bir python uygulaması avantajları nelerdir?


Ne buldumşimdiye kadar

Farklı projeler oluşturmak ve dağıtmak için bir yol buldum "özellikle hakkında dikkat çekici olan", "nasıl eklentiler yapabilirim". eklentileri

Örneği, libpeas (gobject eklenti çerçeve) tanımlar eklentileri belirterek varsayılan bir davranış genişletmek için yollar bir dizi. Bu ilginç olsa da, sadece ile ilgileniyorum" (ve sonunda yükleme) bir parçası. "kaydetme ve bulma

Burada bulgular şimdiye kadar benim bazı

Libpeas its own metadata file (*tanımlar.eklenti), çağrı (farklı dillerde farklı eklentileri olması mümkündür) türü hakkında bilgileri depolar. Ana bilgiler burada yüklemek için modülün adı.

Maven a design document malzeme var yönetilmektedir hakkında bilgi içeren. Maven bağımlılıklarını ile eklentiler yönetir ve ilginç bir yer gibi how they implemented things aramak için öyle görünüyor meta.

Sonra tüm eklentileri @goal belirli bir kayıtlı bulmak için kullanılan sınıfları, kendi belgelerine, maven plugins are using annotations (@goal) belirtilen. Bu yaklaşım statik dilde mümkün olsa da, biz sadece callables / olası tüm sınıflar ne değişebilir zaman zaman bir noktası verilen bildiği gibi yorumlanan dillerde değil.

Mercurial a central configuration file (~/.hgrc), bulunabilir yoluna eklentinin adı için bir eşleme içeren kullanır.


Biraz daha düşünce

Bu soruya bir cevap değil, aynı zamanda setuptools entrypoints nasıl uygulandığını ve performans açısından karşılaştırmak ne kadar dikkat çekici, mercurial olanlar.

Ne zaman setuptools, all the metadata are read at run time and a list is built that way ile belirli bir giriş noktası için isteyin. Bu okuma eğer yolunuz python dağıtımları bir sürü varsa, bu biraz zaman alabilir anlamına gelir. Mercurial diğer taraftakodasenin çağrılabilir orada tam yolunu belirtmelisiniz yani tek bir dosya içine bu Bilgi, o zaman callables "" ama "" yapılandırma dosyası. doğrudan okuma keşfedilen kayıtlı değil Bu kullanılabilir olması gerekenler ve olmaması gerekir ve daha hızlı görünüyor ne ince taneli yapılandırma sağlar.

Diğer tarafta, python yolu değiştirilebilir çalışma zamanında, bu demektir ki callables sağlanan böyle olur olmak zorunda kontrol karşı yol için biliyor olmalılar iade veya olmayan her türlü durum.


Neden entrypoints şu anda paketleme bağlıdır

Ayrıca ilginç entrypoints setuptools ambalaj bağlı olduğunu anlamak zordur. Ana nedeni python dağıtımları yükleme sırasında bir giriş noktası genişletme olarak kendilerinden bir parça kaydedebilir ve kullanışlı görünüyor: o zaman takma demek de entrypoints Kayıt: Kayıt için ekstra bir adım. gerek

Bu oldukça iyi davaların büyük bir çoğunluğu python dağıtımları aslında yüklendiğinde () çalışırken yüklü değil ya da sadece paketlenmiş zaman değil. Anladığım kadarıyla diğer bir deyişle, çalışma zamanında bir giriş noktası, bir olmadan kayıt yapamazsın .yumurta-bilgi dosyası.

CEVAP
20 EKİM 2013, Pazar


Olası fikirlerden biri olarak, Eclipse eklenti sistem yönetimi için kullanılan OSGi konsept bak. Özel bir durum, ama kesinlikle ilham kaynağı için overkill olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FrameCityJackal

    FrameCityJac

    4 Aralık 2010
  • Sam Kear

    Sam Kear

    14 Temmuz 2007
  • Viktorija A.

    Viktorija A.

    28 Mart 2009