2015-06-11 24 views
6

Znam różnicę między łączeniem statycznym i dynamicznym w C lub C++. Ale co to znaczy w Pythonie? Ponieważ jest to tylko interpreter i ma tylko jeden mechanizm importu modułów, jak to ma sens?Co to oznacza dla statycznego linkowania i dynamicznego linkowania w Pythonie?

Jeśli zamrażam moją aplikację Python z cx_freeze przez wykluczenie konkretnej biblioteki, czy jest to rodzaj dynamicznego linkowania? Ponieważ użytkownicy muszą samodzielnie pobrać i zainstalować tę bibliotekę, aby uruchomić moją aplikację.

W rzeczywistości mój problem polega na tym, że używam biblioteki PySide (z LGPL v2.1) do opracowania aplikacji GUI Pythona. Biblioteka mówi, że powinienem dynamicznie łączyć się z biblioteką, aby wypełniać ich warunki prawne (tak jak Qt). W takim przypadku w jaki sposób mogę dynamicznie łączyć się z PySide?

+0

Myślę, że w jakikolwiek sposób normalnie używasz liczby PySide jako dynamicznego łączenia, nawet jeśli jest to część tego samego pobrania. Jeśli zbudujesz pojedynczy plik exe (który cx_Freeze i tak nie działa), niektórzy mogą nazwać to statyczne linkowanie, ale myślę, że większość nadal by tego nie robiła. Śmiało i użyj go - ludzie mogą tworzyć aplikacje w języku Python, więc jeśli to robisz, prawdopodobnie masz się dobrze. –

+0

Dziękuję Thomas. Masz na myśli, nawet jeśli zbuduję pojedynczy plik exe (używając programu piorącego lub czegoś podobnego), to nadal dynamiczne linkowanie? Jeśli będę mógł kontynuować z prostym plikiem readme do instrukcji gdzie pobrać źródła pyside. Czy to jest? – Kaje

+0

Myślę, że większość ludzi powiedziałaby, że to wciąż dynamiczne łączenie, a to, co proponujesz, powinno być w porządku. Jeśli się martwisz, zapytaj o to [Listę dyskusyjną PySide] (http://lists.qt-project.org/mailman/listinfo/pyside) - ważna jest ich interpretacja. Ale byłbym bardzo zaskoczony, gdyby uważali, że nie jest wystarczająco dobry. –

Odpowiedz

0

W pytonie nie ma statycznego łączenia. Wszystkie importowanie wymaga zainstalowania poprawnych zależności na naszym komputerze docelowym. Wybór wersji takich bibliotek jest w naszej decyzji.

Przejdźmy teraz do binarnych budowniczych dla Pythona. W takim przypadku będziemy musieli określić typ połączenia na podstawie definicji GNU. Jeśli użytkownik może zastąpić zależność, jak mu się podoba, jest dynamiczny. Jeśli zależność jest dołączona razem z samym binarnym, jest to statyczne łączenie. W przypadku cx_freeze lub Pyinstaller, jeśli budujemy to jako jeden plik, to jest to statyczne łącze. Jeśli budujemy to w normalnym trybie, w którym wszystkie zależności są gromadzone jako oddzielne pliki, jest to dynamiczne łączenie. Pomysł polega na tym, czy możemy zastąpić zależność w maszynie docelowej, czy nie.

Powiązane problemy