Pilonlardaki ve Peak sayfalarındaki yumurta giriş noktaları hakkındaki belgeleri okudum ve hala gerçekten anlamıyorum. Birisi bana açıklayabilir mi?
Pilonlardaki ve Peak sayfalarındaki yumurta giriş noktaları hakkındaki belgeleri okudum ve hala gerçekten anlamıyorum. Birisi bana açıklayabilir mi?
Yanıtlar:
"Giriş noktası" tipik olarak Python paketinizin bir geliştiricisinin veya kullanıcısının kullanmak isteyebileceği bir işlevdir (veya çağrılabilir işlev benzeri başka bir nesnedir), ancak çağrılamaz bir nesne de giriş noktası olarak sağlanabilir (doğru yorumlarda dikkat çekti!).
En popüler giriş noktası, paketinizi her kim yüklerse, komut satırı aracı olarak kullanılabilir olmasını istediğiniz bir işleve işaret eden console_scripts giriş noktasıdır. Bu, setup.py'nize gider:
entry_points={
'console_scripts': [
'cursive = cursive.tools.cmd:cursive_command',
],
},
Ben sadece "cursive.tools" adlı dağıttığım bir paket var ve birisinin komut satırından çalıştırabileceği bir "cursive" komutu kullanılabilir olmasını istedim:
$ cursive --help
usage: cursive ...
Bunu yapmanın yolu, cursive / tools / cmd.py dosyasında "cursive_command" işlevi gibi bir işlevi tanımlamaktır:
def cursive_command():
args = sys.argv[1:]
if len(args) < 1:
print "usage: ..."
ve benzerleri; komut satırından çağrıldığını, kullanıcının sağladığı bağımsız değişkenleri ayrıştırdığını ve ... komutun yapmak için tasarlandığı her şeyi yapmasını sağlamalıdır.
Giriş noktası kullanımının harika bir örneği için docutils paketini yükleyin : Python belgelerini diğer formatlara dönüştürmek için yarım düzine yararlı komut gibi bir şey yükleyecektir.
EntryPoints , kalıcı, dosya sistemi tabanlı bir nesne adı kaydı ve ad tabanlı doğrudan nesne içe aktarma mekanizması sağlar ( setuptools paketi tarafından uygulanır ).
Python nesnelerinin adlarını serbest biçimli tanımlayıcılarla ilişkilendirir. Böylece aynı Python kurulumunu kullanan ve tanımlayıcıyı bilen diğer kodlar, nesnenin nerede tanımlandığına bakılmaksızın ilişkili ada sahip bir nesneye erişebilir. İlişkili isimler Python modülünde mevcut herhangi isimler olabilir ; örneğin bir sınıf, işlev veya değişkenin adı. Giriş noktası mekanizması, isabet edilebilir olduğu sürece adın ne anlama geldiğini umursamaz.
Örnek olarak, bir işlev (adı) ve tam nitelikli bir ad olan 'myns.mypkg.mymodule' ile hayali bir python modülü kullanalım:
def the_function():
"function whose name is 'the_function', in 'mymodule' module"
print "hello from the_function"
Giriş noktaları, setup.py dosyasında bir giriş noktası bildirimi ile kaydedilir. 'İşlevimi' my_ep_func 'adı verilen giriş noktası altında kaydetmek için:
entry_points = {
'my_ep_group_id': [
'my_ep_func = myns.mypkg.mymodule:the_function'
]
},
Örnekte gösterildiği gibi, giriş noktaları gruplandırılmıştır; bir gruba ait tüm giriş noktalarını aramak için karşılık gelen API vardır (aşağıdaki örnek).
Paket kurulumundan sonra (yani, 'python setup.py install' çalıştırıldığında), yukarıdaki bildirim setuptools tarafından ayrıştırılır. Daha sonra ayrıştırılan bilgileri özel dosyaya yazar. Bundan sonra, pkg_resources API'si (setuptools'un bir parçası) giriş noktasını aramak ve ilişkili ad (lar) ı içeren nesnelere erişmek için kullanılabilir:
import pkg_resources
named_objects = {}
for ep in pkg_resources.iter_entry_points(group='my_ep_group_id'):
named_objects.update({ep.name: ep.load()})
Burada, setuptools, özel dosyalara yazılan giriş noktası bilgilerini okur. Giriş noktasını buldu, modülü (myns.mypkg.mymodule) içeri aktardı ve pkg_resources.load () çağrıldığında burada tanımlanan işlevi aldı.
Aynı grup kimliği için başka giriş noktası kaydı olmadığı varsayılarak, the_function işlevinin çağrılması basit olacaktır:
>>> named_objects['my_ep_func']()
hello from the_function
Bu nedenle, başlangıçta belki biraz kavramak zor olsa da, giriş noktası mekanizmasının kullanımı oldukça basittir. Takılabilir Python yazılım geliştirme için kullanışlı bir araç sağlar.
EntryPoints
Açıklama çok açıktır olsa bağlantı, eski.
Soyut bakış açısından, giriş noktaları, belirli arayüzleri uygulayan sistem çapında bir Python callables kayıt defteri oluşturmak için kullanılır. Belirli bir paket tarafından hangi giriş noktalarının reklamı yapıldığını görmek için pkg_resources API'ları ve belirli bir giriş noktasının hangi paketlerin reklamını yapacağını belirlemek için API'ler vardır.
Giriş noktaları, bir paketin başka bir paketin içindeki eklentileri kullanmasına izin vermek için kullanışlıdır. Örneğin, Ian Bicking'ın Yapıştır projesi giriş noktalarını kapsamlı bir şekilde kullanır. Bu durumda, giriş noktasını kullanarak WSGI uygulama fabrikasını tanıtan bir paket yazabilirsiniz paste.app_factory
.
Giriş noktaları için başka bir kullanım, bazı eklenti işlevselliği sağlayan sistemdeki tüm paketleri numaralandırmaktır. TurboGears web çerçeve kullanır python.templating.engines
yüklü ve kullanılabilir olan şablon kütüphaneleri bakmak için giriş noktası.
setup.py
hiç içermiyorentry_points
.