2011-01-15 24 views
7

Jeśli mam pakiet Pythona, który zależy od niektórych bibliotek C (np. Gnu Scientific Library (GSL) do obliczeń numerycznych), czy dobrze jest połączyć bibliotekę z moim kodem?Czy powinienem łączyć biblioteki C z moją aplikacją Python?

Chciałbym, aby mój pakiet był możliwie łatwy w instalacji dla użytkowników i nie chcę, aby pobierał biblioteki C ręcznie i dostarczał ścieżki włączania. Zawsze mogłem też zapewnić, że wersja biblioteki, którą wysyłam, jest zgodna z moim kodem.

Czy jest jednak możliwe, że zdarzają się konflikty, jeśli użytkownik ma już zainstalowaną bibliotekę, lub czy istnieją inne powody, dla których nie powinienem tego robić?

Wiem, że mogę ułatwić użytkownikom, zapewniając tylko dystrybucję binarną, ale chciałbym uniknąć konieczności utrzymywania dystrybucji binarnych dla wszystkich możliwych systemów operacyjnych. Tak więc chciałbym trzymać się dystrybucji źródłowej, ale dla użytkownika (który jest dumnym właścicielem kompilatora C) instalacja powinna być tak łatwa jak python setup.py install.

Odpowiedz

0

Można mieć dwie oddzielne gałęzie src, jedną zawierającą biblioteki, a drugą nie. W ten sposób możesz ostrzec użytkowników, na wypadek gdyby zainstalowali biblioteki. Innym rozwiązaniem może być (jeśli pozwolą ci na to biblioteki), aby je zawinąć w jeden plik.

Myślę, że nie ma wyjątkowego rozwiązania, ale takie są pomysły, które do tej pory mogłem myśleć.

Powodzenia

0

Można użyć virtualenv stworzyć prywatny środowiska Pythona dla danej aplikacji. Pozwala to uniknąć konfliktów z innymi bibliotekami. Najlepiej jest, jeśli pakiety i zależności, takie jak biblioteki, są pakowane przy użyciu Distribute. Distutils to coś, co warto poznać.

4

Dystrybucja jest jedną z trudniejszych części każdego projektu oprogramowania. Java i .NET podnoszą część tego obciążenia, definiując standardowe środowisko uruchomieniowe, a następnie mówiąc "po prostu rozpowszechniaj wszystko inne". Oczywiście jest wada: wszystko musi być przepisane w języku obsługiwanym przez środowisko wykonawcze - gdy tylko chcesz użyć natywnego kodu, tracisz wszystkie zalety.

To jest trudniejsze w Pythonie, ponieważ jest w języku Ruby, C, C++ i innych językach, ponieważ zwykle wykorzystują istniejące biblioteki natywne.

Generalnie:

  1. pozwalają uzyskać sdist źródłowego poprzez pypi.python.org jako przykład. Poprawnie ustaw parametry install_requires (prawdopodobnie będziesz potrzebować powiązań Pythona dla GSL, a nie samego GSL). Użyj standardowych narzędzi setuptools/distribute layout. To pozwoli każdemu - powiedzmy opiekunowi pakietów na dowolną dystrybucję - na pobranie oprogramowania i spakowanie go.

  2. Dodatkowo, rozważ dostarczenie pełnego zestawu instalacyjnego dla swoich odbiorców. Nie musisz obsługiwać wszystkich dystrybucji i systemu operacyjnego; wybierz jeden lub dwa, które uważasz za najbardziej używane. Narzędzia takie jak PyInstaller pozwolą Ci stworzyć pakiet instalowalny, który może być uruchamiany dla wielu systemów operacyjnych, ale szczególnie dla Linuksa możesz chcieć, aby użytkownik zainstalował własną wersję dystrybucji przechodnich (libgsl?) - będziesz potrzebował pełnowymiarowego deb lub pakiet RPM, aby to zaspokoić - znowu, nie próbuj wspierać żadnego i wszystkich dystrybutorów, okażesz się szalony. Wspieraj coś, co najbardziej Ci się podoba, i pozwól innym użytkownikom pomóc Ci w innych potrzebach związanych z pakowaniem.

także przyjrzeć Python Packaging Guide

Powiązane problemy