2013-04-17 12 views
5

Jeśli mam rację, pliki Pythona kompilują się na różnych platformach. Dlaczego więc wydaje się większość bibliotek, które wymagają kompilacji i instalacji?Dlaczego biblioteki Pythona nie są dostarczane jako pyc?

Czy to lenistwo ze strony dystrybutora, czy też nie mam racji mówiąc, że mogliby po prostu rozpowszechniać pliki pyc? Jeśli tak nie jest, w jaki sposób mogę rozpowszechniać plik skryptowy Pythona, który ma biblioteki jako wstępny, bez konieczności tworzenia i instalowania bibliotek?

+5

I, myślę, że warto zauważyć, że jedyny wzrost wydajności dostajesz przez "kompilowanie" znajduje się w początkowym "import". W przeciwnym razie wszystko działa z dokładnie taką samą prędkością AFAIK. Innymi słowy, nie zauważysz różnicy w wydajności uruchomionej z 'pyc' lub' py'. – mgilson

Odpowiedz

7

Ponieważ format zawartego kodu może się zmienić przy każdym (głównym) wydaniu w języku Python, a kod źródłowy co najmniej może być zgodny z. Format może się różnić pomiędzy implementacjami (których jest kilka, dwa najbardziej znane są CPython and PyPy.

Zobacz this article więcej informacji o wewnętrznej strukturze plików .pyc.

4

Są wieloplatformowym, ale nie w wersji krzyżowej, a nie w implementacji krzyżowej. Innymi słowy, różne wersje CPythona mogą mieć problemy z jednym i tym samym plikiem .pyc:

A jeśli spojrzysz na inne implementacje, takie jak PyPy, IronPython, Jython itp. , w ogóle nie będziesz miał szczęścia z plikami .pyc

Poza tym pliki .pyc odpowiadają jednemu plikowi .py. Prawdopodobnie masz na myśli biblioteki, które zawierają część napisaną w C. Muszą być skompilowane do plików zależnych od platformy (.pyd, .dll, .so itd.), Aby działały. Ponieważ niewielu programistów ma dostępne wszystkie obsługiwane platformy, udostępnia je jako źródło i pozostawia je systemowi użytkownika, aby go skompilować.

+0

Uwaga dotycząca ostatniej części: Binarna dystrybucja modułów rozszerzeń jest normą w systemie Windows, gdzie rzadko każdy ma kompilator. – delnan

0

Proces tworzenia pliku .pyc z pliku .py odbywa się w trybie przezroczystym przez tłumacza. Powód, dla którego niektóre instalatory generują je w czasie instalacji, ma na celu uniknięcie konieczności generowania ich przy pierwszym uruchomieniu skryptu - zazwyczaj ze względu na szybkość, ale także po to, aby plik .pyc mógł trafić do całego systemu (nie dla użytkownika -writable) katalogu. W przeciwieństwie do języków kompilowanych, a nawet modułów napisanych w języku C, jest to , a nie wymóg techniczny, że te pliki istnieją - w pierwszym przypadku nie byłbyś w stanie umieścić własnych skryptów bezpośrednio w python i mieć ich uruchom bez etapu kompilacji.

Każda biblioteka, która bezwzględnie wymaga kroku kompilacji przed zainstalowaniem, z pewnością ma składnik, który kompiluje się do natywnego kodu - który z pewnością nie jest na różnych platformach. W przypadku dowolnej biblioteki z czystym pythonem zawsze wystarczy umieścić drzewo katalogów źródłowych modułu w PYTHONPATH, po skopiowaniu go bezpośrednio z archiwum, w którym zostało ono pobrane.

Powiązane problemy