2009-10-13 33 views
75

Moja aplikacja wygląda tak:Jak mogę rozpowszechniać programy Pythona?

 
main.py 
windows/ 
    __init__.py 
    mainwindow.py 
    ... 
model/ 
    __init__.py 
    orders.py 
    ... 
resources/ 
    image1.png 
    logo.jpg 
    ... 

Program rozpoczyna się main.py. Czy istnieje dobry sposób na stworzenie "ostatecznej" aplikacji z tego? Mam na myśli coś takiego jak py2exe/py2app, ale bez kopiowania interpretera/modułów python do aplikacji, w której jest tylko jeden plik wykonywalny.

Spojrzałem na distutils, ale wygląda na to, że instaluje program w katalogu Pythona, co nie jest typowe na platformach innych niż linux.

W tej chwili po prostu skopiować cały folder źródłowy na maszynę docelową i utworzyć alias do main.pyw w systemie Windows. Niektóre niedogodności:

  • Ikona jest domyślną ikoną Pythona.
  • Muszę ręcznie utworzyć alias.
  • W moim katalogu źródłowym znajduje się wiele dodatkowych plików, takich jak folder sterowania źródłami.
  • Muszę ręcznie zmienić nazwę main.py na main.pyw.
  • Byłoby miło, gdyby tylko pliki .pyo * znajdowały się na maszynie docelowej. Nie ma prawdziwego powodu, po prostu nie lubię mieć niepotrzebnych plików.

Jak stworzyć ładną automatyczną dystrybucję?

  • dla systemu Windows? (To jest jedyna platforma, którą muszę w tej chwili obsługiwać.)
  • dla mac?
  • dla systemu Linux?
+2

„Musiałem spojrzeć na distutils, ale wygląda na to instaluje program do katalogu Pythona, który nie jest zwykle na platformach innych niż Linux. ” Dlaczego mówisz, że? Jaki tekst przeczytałeś, który to powiedział? To na pewno nieprawda, skąd masz takie wrażenie? –

+0

Możliwy duplikat [Dystrybucja programów napisanych w języku Python] (http://stackoverflow.com/questions/4190635/distributing-programs-written-in-python) – SebasSBM

Odpowiedz

29

Normalnym sposobem dystrybucji aplikacji w języku Python jest distutils. Jest on przeznaczony zarówno do dystrybucji modułów pythona typu biblioteki, jak i aplikacji Pythona, chociaż nie wiem, jak to działa w systemie Windows. W przypadku Windows musisz zainstalować osobno Pythona, jeśli korzystasz z distutils.

Prawdopodobnie zaleciłbym rozprowadzanie go z dyskietkami dla systemu Linux i Py2exe lub podobnego dla systemu Windows. Dla OS X nie wiem. Jeśli jest to aplikacja użytkownika końcowego, prawdopodobnie potrzebujesz obrazu typu dysku, nie wiem jak to zrobić. Ale przeczytaj this post, aby uzyskać więcej informacji na temat doświadczenia użytkownika. W przypadku aplikacji dla programistów prawdopodobnie jesteś w porządku z instalacją typu distutils na OS X też.

+1

Mac i Linux nie są obecnie tak ważne. Py2app tworzy pakiety .app. I myślę, że wysyłanie aplikacji mac w .dmg jest nieaktualne, należy użyć .zip. Czy można użyć distutils, aby utworzyć katalog 'dist' i skopiować do niego wszystkie odpowiednie pliki? –

+1

@gs: polecenie sdist utworzy plik tar wszystkich plików źródłowych. –

+4

@gs: wysyłka aplikacji Mac w .dmg jest w rzeczywistości bardzo powszechna. .dmg to obrazy dysków, a nie format dla aplikacji (które mogłyby być .app). Dlatego często znajduje się pojedynczy plik .app wewnątrz pliku .dmg wraz z plikiem README. – EOL

1

Jeśli prowadzisz dystrybucję w systemie Windows, użyj installer, aby zainstalować wszystkie odpowiednie pliki/interpretery, co jest potrzebne. Rozprowadź plik setup.exe. To najlepszy sposób na Windows. W przeciwnym razie użytkownicy będą narzekać.

+1

Nie potrzebuję instalatora, ponieważ jest tylko jeden użytkownik, który zamierza korzystać z programu. Ale oczywiście podczas pisania programu dla większej liczby użytkowników, który jest koniecznością w systemie Windows. –

+1

@gs: Oh, tylko jeden użytkownik. Dobrze, to polecam zrobienie podstawowego pakietu distutils, albo dystrybucji źródłowej, albo instalatora binarnego Windows. To zdecydowanie łatwy i przyjemny sposób na rozpowszechnienie modułu Pythona. –

47

Bardzo polecam Pyinstaller, które obsługuje wszystkie główne platformy całkiem bezproblemowo. Podobnie jak py2exe i py2app, tworzy standardowy plik wykonywalny w systemie Windows i pakiet aplikacji w systemie OS X, ale ma także tę zaletę, że wykonuje fantastyczną pracę polegającą na automatycznym rozwiązywaniu typowych zależności i włączaniu ich bez dodatkowych usprawnień konfiguracji.

Należy również pamiętać, że jeśli wdrażasz Python 2.6 na Windows, powinieneś zastosować this patch do pnia Pyinstalatora.

Wskazałeś, że nie potrzebujesz instalatora, ale Inno Setup jest łatwym w użyciu i szybkim w konfiguracji wyborem dla platformy Windows.

+0

Overkill dla tego przypadku, ponieważ ma tylko jednego użytkownika, ale ogólnie dobre zalecenie o oprogramowaniu, o którym istnieniu zapomniałem. +1 –

+3

Nie jestem pewien, czy to przesada. Łączenie aplikacji z Pyinstallerem może być łatwiejsze niż w przypadku innych metod, szczególnie tych, które mają zależności od rozszerzeń c ... w większości przypadków są to proste połączenia z wiersza poleceń. Instalowanie zależności Pythona + sama aplikacja (czy to przez distutils, itp., Czy tylko plik zip) jest bardziej zaangażowana, zwłaszcza jeśli programista nie jest w stanie sam ręcznie skonfigurować komputera docelowego i musi dostarczyć instrukcje klientowi. Przynajmniej w systemie Windows, myślę, że styl dystrybucji ma sens. –

+1

Trochę niewygodne z Pyinstaller, podczas korzystania z pliku wykonywalnego utworzonego za pomocą Pyinstaller, rozpoczęcie wykonywania trwa kilka sekund. – JuanPablo

5

Fredrik Lundh za squeeze.py może utworzyć pojedynczy plik, który nie zawiera interpretera Pythona, ale zamiast niego zawiera kod bajtowy. Z odpowiednimi argumentami możesz dołączyć inne pliki, moduły itp. Do pliku wynikowego. Z powodzeniem stosowałem go w jednym projekcie. Wynikowy program działał na OS X, Linux i Windows bez żadnego problemu!

PS: Każda maszyna musi mieć interpreter Pythona, który jest zgodny z kodem bajtowym generowanym przez squeeze.py. Możesz wygenerować różne wersje kodu bajtowego dla różnych wersji Pythona, jeśli zajdzie taka potrzeba (wystarczy uruchomić squeeze.py z odpowiednią wersją Pythona).

+0

Wygląda bardzo obiecująco, przyjrzę się temu. –

Powiązane problemy