Jaka jest różnica między modułem a biblioteką w Pythonie?

86

Mam doświadczenie w Javie i jestem nowy w Pythonie. Chcę się upewnić, że dobrze rozumiem terminologię Pythona, zanim przejdę dalej.

Rozumiem moduł : skrypt, który można importować za pomocą wielu skryptów, aby ułatwić czytanie. Podobnie jak w javie, masz klasę, która może być importowana przez wiele innych klas.

Moje rozumienie biblioteki jest następujące: Biblioteka zawiera wiele modułów, które są oddzielone przez jej użycie.

Moje pytanie brzmi: czy biblioteki są jak pakiety, w których masz pakiet np. foodWywołany:

  • chocolate.py
  • sweets.py
  • biscuts.py

są zawarte w foodpakiecie?

Czy biblioteki używają pakietów, więc gdybyśmy mieli inny pakiet drink:

  • milk.py
  • juice.py

zawarte w opakowaniu. libraryZawiera dwa pakiety?

Ponadto interfejs programowania aplikacji (API) zwykle zawiera zestaw bibliotek, który znajduje się na szczycie hierarchii:

  1. API
  2. Biblioteka
  3. Pakiet
  4. Moduł
  5. Scenariusz

Więc API będzie składać się z wszystkich od 2 do 5?

żartowniś
źródło
3
Python używa terminu „pakiet”, a nie bardzo dużo „biblioteki” (poza biblioteką standardową).
John Zwinck,

Odpowiedzi:

75

Z samouczka Pythona - moduły

  • Moduł :

    Moduł to plik zawierający definicje i instrukcje Pythona. Nazwa pliku to nazwa modułu z .pydołączonym sufiksem .

  • Pakiet :

    Pakiety są sposobem na ustrukturyzowanie przestrzeni nazw modułów Pythona za pomocą „kropkowanych nazw modułów”.

Jeśli czytasz dokumentację do importwyciągu podaje więcej szczegółów, na przykład:

Python ma tylko jeden typ obiektu modułu i wszystkie moduły są tego typu, niezależnie od tego, czy moduł jest zaimplementowany w Pythonie, C czy w czymś innym. Aby ułatwić organizację modułów i zapewnić hierarchię nazewnictwa, Python ma koncepcję pakietów.

Możesz myśleć o pakietach jako o katalogach w systemie plików, a modułach jako plikach w katalogach, ale nie bierz tej analogii zbyt dosłownie, ponieważ pakiety i moduły nie muszą pochodzić z systemu plików. Na potrzeby tej dokumentacji użyjemy wygodnej analogii katalogów i plików. Podobnie jak katalogi systemu plików, pakiety są zorganizowane hierarchicznie, a same pakiety mogą zawierać podpakiety, a także zwykłe moduły.

Należy pamiętać, że wszystkie pakiety są modułami, ale nie wszystkie moduły są pakietami. Innymi słowy, pakiety to tylko specjalny rodzaj modułów. W szczególności każdy moduł zawierający __path__atrybut jest uważany za pakiet.

Stąd termin moduleodnosi się do konkretnej jednostki: jest to klasa, której instancjami są moduleobiekty używane w programach Pythona. Jest on również używany przez analogię w odniesieniu do pliku w systemie plików, z którego te instancje „są tworzone”.

Termin skrypt jest używany w odniesieniu do modułu, którego celem jest wykonanie. Ma to samo znaczenie co „program” lub „aplikacja”, ale zwykle jest używane do opisania prostych i małych programów (tj. Pojedynczego pliku zawierającego co najwyżej kilkaset wierszy). Napisanie scenariusza zajmuje kilka minut lub kilku godzin.

Termin biblioteka jest po prostu ogólnym terminem oznaczającym zbiór kodu, który został zaprojektowany w celu wykorzystania w wielu aplikacjach. Zapewnia pewne ogólne funkcje, z których mogą korzystać określone aplikacje.

Kiedy moduł / pakiet / coś innego jest „publikowane”, ludzie często nazywają go biblioteką. Często biblioteki zawierają pakiet lub wiele powiązanych pakietów, ale może to być nawet pojedynczy moduł.

Biblioteki zazwyczaj nie zapewniają żadnej określonej funkcjonalności, tj. Nie można „uruchomić biblioteki”.

API może mieć różne znaczenia w zależności od kontekstu. Na przykład:

  • może zdefiniować protokół, taki jak DB API lub protokół bufora .
  • może definiować sposób interakcji z aplikacją (np. Python/C API)
  • w przypadku powiązania z biblioteką / pakietem to po prostu interfejs zapewniany przez tę bibliotekę dla jej funkcjonalności (zestaw funkcji / klas / stałych itp.)

W każdym razie API nie jest kodem Pythona. To opis, który może być mniej lub bardziej formalny.

Bakuriu
źródło
37

Tylko pakiet i moduł mają dobrze zdefiniowane znaczenie specyficzne dla Pythona.

  1. API nie jest zbiorem kodu per se - to bardziej jak „Protocol” specyfikacji jak różne części (zwykle biblioteki) komunikują się ze sobą. W Pythonie jest kilka godnych uwagi „standardowych” interfejsów API. Np. API DB

  2. Moim zdaniem biblioteka to wszystko, co nie jest aplikacją - w Pythonie biblioteka to moduł - zwykle z submodułami . Zakres biblioteki jest bardzo zmienna - na przykład standardowej biblioteki Pythona jest ogromna (z dość kilka submodułów), podczas gdy istnieje wiele bibliotek pojedynczych cel w PyPI, np backportu z collections.OrderedDictza py <2,7

  3. Pakiet jest zbiorem modułów Pythona w ramach wspólnej przestrzeni nazw. W praktyce jeden jest tworzony poprzez umieszczenie wielu modułów Pythona w katalogu ze specjalnym __init__.pymodułem (plikiem).

  4. Moduł jest pojedynczy plik kodu Pythona, który ma być importowany . Jest to trochę uproszczenie, ponieważ w praktyce sporo modułów wykrywa, kiedy są uruchamiane jako skrypt i robi w tym przypadku coś specjalnego.

  5. Skrypt jest pojedynczy plik kodu Pythona, który ma być wykonywany jako program „głównego”.

  6. Jeśli masz zestaw kodu obejmujący wiele plików, prawdopodobnie masz aplikację zamiast skryptu.

Kimvais
źródło
1

Biblioteka: jest to zbiór modułów.

(Biblioteka zawiera wbudowane moduły (napisane w C) + moduły napisane w Pythonie).

Moduł: każdy z zestawu znormalizowanych części lub niezależnych jednostek, które można wykorzystać do zbudowania bardziej złożonej struktury.

Mówiąc w nieformalnym języku, moduł to zestaw wierszy kodu, które są używane w określonym celu i mogą być używane w innych programach w takiej postaci, aby uniknąć DRY ( D on't R epeat Y siebie) jako zespół i skupienie się na główny wymóg. źródło

API to interfejs umożliwiający innym aplikacjom interakcję z biblioteką bez bezpośredniego dostępu.

Pakiet to w zasadzie katalog z plikami.

Skrypt oznacza serię poleceń w jednym pliku.

Premraj
źródło
0

Spróbuję odpowiedzieć na to pytanie bez używania terminów, których używaliby najwcześniejsi początkujący, i wyjaśnić, dlaczego lub w jaki sposób używali ich inaczej, wraz z najbardziej „oficjalnym” i / lub najbardziej zrozumiałym lub jednolitym użyciem tych terminów.

Może to być zagmatwane i pomyliłem się, myśląc zbyt mocno, więc nie myśl o tym zbyt wiele. W każdym razie kontekst ma ogromne znaczenie.

Biblioteka - najczęściej będzie odnosić się do biblioteki ogólnej lub innej kolekcji utworzonej w podobnym formacie i zastosowaniu. Biblioteka ogólna to suma „standardowych”, popularnych i szeroko używanych modułów, które można na razie traktować jako narzędzia jednoplikowe lub skróty umożliwiające lub przyspieszające. Biblioteka ogólna jest opcją, którą większość ludzi włącza podczas instalowania Pythona. Ponieważ ma tę nazwę „Biblioteka ogólna Pythona”, jest często używana z podobną strukturą i pomysłami. Witch to po prostu posiadanie kilku modułów, może nawet pakietów zgrupowanych razem, zwykle na liście. Lista zwykle służy do ich pobrania. Zwykle są to tylko powiązane pliki o podobnych zainteresowaniach. Najłatwiej to opisać.

Moduł - moduł odnosi się do pliku. Plik zawiera skrypt „w sobie”, a nazwa pliku to nazwa modułu, pliki w Pythonie kończą się na .py. Wszystko, co zawiera plik, to kod, który działając razem sprawia, że ​​coś się dzieje, używając funkcji, łańcuchów znaków itp. Główne moduły, które prawdopodobnie widzisz najczęściej, są popularne, ponieważ są to specjalne moduły, które mogą pobierać informacje z innych plików / modułów. Jest to mylące, ponieważ nazwy pliku i modułu są równe i po prostu upuść plik .py. Naprawdę to tylko kod, którego możesz użyć jako skrótu napisanego przez kogoś, aby coś było łatwiejsze lub możliwe.

Pakiet - jest to termin używany ogólnie, chociaż kontekst ma znaczenie. Z mojego doświadczenia wynika, że ​​najczęstszym zastosowaniem jest wiele modułów (lub plików), które są zgrupowane razem. Powody, dla których są zgrupowane, może wynikać z kilku powodów - wtedy liczy się kontekst. Oto sposoby, w jakie zwróciłem uwagę na termin pakiet (y)używany. Stanowią grupę pobranych, utworzonych i / lub przechowywanych modułów. Które mogą być prawdziwe lub tylko 1, ale tak naprawdę jest to tylko plik, który odwołuje się do innych plików, które muszą mieć poprawną strukturę lub format, a cała suma to sam pakiet, zainstalowany lub mógł być uwzględniony w Biblioteka ogólna Pythona. Pakiet może zawierać moduły (pliki .py), ponieważ zależą one od siebie i czasami mogą nie działać poprawnie lub wcale. Każda część (moduł / plik) pakietu ma zawsze wspólny cel, a całkowitą sumą wszystkich części jest sam pakiet.

Najczęściej w Pythonie pakiety są modułami, ponieważ nazwa pakietu to nazwa modułu, który jest używany do łączenia wszystkich elementów. Możesz więc wprowadzić pakiet, ponieważ jest to moduł, pozwala również na wywoływanie innych modułów, które nie są pakietami, ponieważ wykonują tylko określoną funkcję lub zadanie nie obejmuje innych plików. Pakiety mają cel, a każdy moduł współpracuje, aby osiągnąć ten ostateczny cel.

Większość nieporozumień wynika z prostej nazwy pliku lub prefiksu pliku, używanego jako nazwa modułu, a następnie ponownie nazwa pakietu.

Pamiętaj, że można zainstalować moduły i pakiety. Biblioteka jest zazwyczaj ogólnym terminem określającym listę lub formatowanie grupy modułów i pakietów. Podobnie jak ogólna biblioteka Pythona. Hierarchia by nie działała, interfejsy API tak naprawdę nie należą, a gdyby tak było, mogłyby być wszędzie i każdy towar zawierający Skrypt, Moduł i Pakiety. siedzieć nad lub pod nim. Niektóre moduły mogą być oparte na innym kodzie i myślę, że jest to jedyny przypadek, w którym odnosi się to do dyskusji związanej z czystym Pythonem.

Mizat
źródło