2011-01-15 22 views
7

Bazı C kitaplıklarına bağlı olan bir Python paketim varsa (örneğin sayısal hesaplamalar için Gnu Bilimsel Kütüphanesi (GSL) gibi), kütüphaneyi kodumla birleştirmek iyi bir fikir midir?C kitaplıklarını Python uygulamam ile paketlemeli miyim?

Paketlerimi kullanıcılar için olabildiğince kurulumu kolay hale getirmek istiyorum ve C kütüphanelerini el ile indirmek zorunda kalmayı ve içerme yolları sağlamayı istemiyorum. Ayrıca, gönderdiğim kitaplık sürümünün kodumla uyumlu olmasını da sağlayabiliyordum. Bununla birlikte, eğer kullanıcı kütüphaneye zaten kurulmuşsa ya da bunu yapmamam için başka nedenler varsa çatışmanın olması olasıdır?

Sadece ikili bir dağıtım sağlayarak kullanıcıları daha kolay hale getirebileceğimi biliyorum, ancak tüm olası işletim sistemleri için ikili dağıtımları sürdürmekten kaçınmak istiyorum. Yani, bir kaynak dağıtımına bağlı kalmak istiyorum, ancak kullanıcı (bir C derleyicisine sahip olan) kurulum için python setup.py install kadar kolay olmalıdır.

cevap

0

Biri, kütüphaneleri içeren bir diğeri olmayan iki ayrı src birimine sahip olabilirsiniz. Bu sayede kullanıcılarınızı kütüphaneleri kurduklarında açıkça uyarırsınız. Başka bir çözüm de (eğer kütüphanelerin izinleri size izin veriyorsa), tek bir dosyada sarmak olabilir.

Bence benzersiz bir çözüm yok, ama bu şimdiye kadar düşünebildiğim fikirler.

İyi şanslar

0

uygulamanız için özel Python ortamı oluşturmak için virtualenv kullanabilirsiniz. Bu, diğer kütüphanelerle çakışmaları önler. Kütüphaneleriniz gibi modülleri ve bağımlılıkları Distribute kullanarak paketlemeniz en iyisidir. Distutils, araştırmaya değer başka bir şeydir.

4

Dağıtım, herhangi bir yazılım projesi için zor kısımlardan biridir. Java ve .NET bu yükün bir parçasını standart bir çalışma zamanı tanımlayarak ve daha sonra sadece "her şeyi dağıtmak" diyerek parçalara ayırıyorlar. Elbette bir dezavantaj vardır: her şey çalışma zamanı tarafından desteklenen bir dilde yeniden yazılmalıdır - yerel kodu kullanmak istediğinizde tüm avantajları kaybedersiniz. onlar varolan yerel kütüphaneleri kaldıraç gibi, Ruby, C, C++ ve diğer dillerde olduğu gibi, Python zor

.

Genel anlamda:

  1. mümkün bir kaynak Sdist almak için emin olun, pypi.python.org aracılığıyla bir örnek olarak. Install_requires'lerinizi doğru bir şekilde ayarlayın (muhtemelen GSL için değil, GSL için python bağlamaları gerekir). düzenini dağıtmak/standart Setuptools'u kullanın. Bu, herkesin - herhangi bir dağıtım için bir paket koruyucusu - yazılımınızı almasını ve paketlemesini sağlayalım. Ayrıca, hedef kitleniz için eksiksiz bir yüklenebilir paket sağlamayı da düşünebilirsiniz. Tüm dağıtımları ve işletim sistemini desteklemek zorunda değilsiniz; En çok kullanılacağını düşündüğünüz bir veya iki tane seçin. PyInstaller gibi araçlar birçok işletim sistemleri için yüklenebilir bir runnable paketi oluşturmak izin verir ancak özellikle linux için size geçişli-PS arasında dağıtımın kendi sürümünü yüklemek için kullanıcı isteyebilir (libgsl?) - Bir tam gelişmiş deb veya gerekir rpm paket olduğunu karşılamak için - yine, deli söndürmeye edeceğiz her türlü dağıtımın destekleyen çalışmayın. En çok kullandığınız bir şeyi destekleyin ve diğer kullanıcıların diğer ambalajlama ihtiyaçlarınız için size yardımcı olmasını sağlayın.Ayrıca

Python Packaging Guide

bakmak
İlgili konular