2012-01-27 14 views
13

py2exe jest świetny i używam go, gdy chcę spakować program Pythona do działania w systemie Windows.Wieloplatformowa alternatywa dla py2exe

Moje pytanie brzmi, czy istnieje równoważne narzędzie, za pomocą którego mogę spakować program w systemie Windows, ale czy mogę go uruchomić na Linuksie?

+0

Można bezpiecznie założyć, że Python jest już zainstalowany na większości systemów Linux. – ThiefMaster

+2

Tak, ale nadal chciałbym łatwo spakować wszystkie odpowiednie pliki źródłowe, w tym importowane moduły, bez instalowania rzeczy w docelowym systemie Linux. – xorsyst

Odpowiedz

1

OK, zrobiłem to. To trochę hacky, ale działa bardzo dobrze dla mojego przypadku użycia.

Głównym celem jest użycie modułu ModuleFinder w celu znalezienia wszystkich zaimportowanych modułów, odfiltrowania dowolnych systemów, skompilowania ich i skompresowania.

Niestety mój kod ten jest pełno dodatkowych komplikacji, które nie mają żadnego znaczenia dla tego pytania, więc nie mogę wkleić program roboczy, tylko niektóre rozszerzone:

zipfile = ZipFile(os.path.join(dest_dir, zip_name), 'w', ZIP_DEFLATED) 
sys.path.insert(0, '.') 
finder = ModuleFinder() 
finder.run_script(source_name) 

for name, mod in finder.modules.iteritems(): 
    filename = mod.__file__ 
    if filename is None: 
     continue 
    if "python" in filename.lower(): 
     continue 

    subprocess.call('"%s" -OO -m py_compile "%s"' % (python_exe, filename)) 

    zipfile.write(filename, dest_path) 
6

tutaj jest również PyInstaller, który obsługuje Linux, MacOS i Windows - nie używałem go (jeszcze), więc nie wiem, czy można pakować rzeczy w systemie Windows dla systemu Linux, ale patrząc na manual wydaje się to możliwe .

EDIT: W FAQ stwierdza wyraźnie, że nie można utworzyć pakiet Windows z Linuksem i nie pakiet Mac OS z Linuksa ani - nie ma nic na temat tworzenia pakietu linux z dwóch innych źródeł, ale nie może praca.

EDIT2: Po googling trochę znalazłem cx_freeze który może również być warte obejrzenia.

+0

Interesujące pomysły, ale nie udało mi się dostać do pracy. Dzięki za sugestie. – xorsyst

5

Naprawdę wątpię, że możesz w ogóle coś takiego zrobić.

Co możesz zrobić, to po prostu skonfigurować sobie 3 zbudować maszyny wirtualne dla systemu Windows, jedną dla systemu MacOS i jedną dla systemu Linux, które mają wszystko, czego potrzebujesz, aby uruchomić program.

Następnie użyj kombinacji py2exe/py2app/pyinstaller, aby wygenerować dystrybucję dla każdej platformy. Będziesz mieć 3 różne pakiety, ale każda z nich będzie ładnie zapakowana i nie będzie potrzeby instalowania czegokolwiek na komputerach klienckich.