abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 23:11 | IT novinky

    Nový ovladač Steam Controller jde do prodeje 4. května. Cena je 99 eur.

    Ladislav Hagara | Komentářů: 0
    včera 14:22 | Komunita

    Greg Kroah-Hartman začal používat AI asistenta pojmenovaného gkh_clanker_t1000. V commitech se objevuje "Assisted-by: gkh_clanker_t1000". Na social.kernel.org publikoval jeho fotografii. Jedná se o Framework Desktop s AMD Ryzen AI Max a lokální LLM.

    Ladislav Hagara | Komentářů: 3
    včera 04:44 | Komunita

    Ubuntu 26.10 bude Stonking Stingray (úžasný rejnok).

    Ladislav Hagara | Komentářů: 1
    26.4. 22:22 | Nová verze

    Webový prohlížeč Dillo (Wikipedie) byl vydán ve verzi 3.3.0. S experimentální podporou FLTK 1.4. S příkazem dilloc pro ovládání prohlížeče z příkazové řádky. Vývoj prohlížeče se přesunul z GitHubu na vlastní doménu dillo-browser.org (Git).

    Ladislav Hagara | Komentářů: 1
    26.4. 21:55 | Komunita

    Byl publikován přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Vývojáři v přehledu vypíchli vylepšenou instalaci, podporu senzoru okolního světla, úsporu energie, opravy Bluetooth nebo zlepšení audia. Vývoj lze podpořit na Open Collective a GitHub Sponsors.

    Ladislav Hagara | Komentářů: 1
    25.4. 04:00 | Nová verze

    raylib (Wikipedie), tj. multiplatformní open-source knihovna pro vývoj grafických aplikací a her, byla vydána ve verzi 6.0.

    Ladislav Hagara | Komentářů: 0
    24.4. 18:33 | IT novinky

    Nové verze AI modelů. Společnost OpenAI představila GPT‑5.5. Společnost DeepSeek představila DeepSeek V4.

    Ladislav Hagara | Komentářů: 0
    24.4. 15:33 | Zajímavý článek

    Nová čísla časopisů od nakladatelství Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 164 (pdf) a Hello World 29 (pdf).

    Ladislav Hagara | Komentářů: 0
    24.4. 04:44 | Komunita

    Bylo oznámeno, že webový prohlížeč Opera GX zaměřený na hráče počítačových her je už také na Flathubu and Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    23.4. 23:11 | IT novinky

    Akcionáři americké mediální společnosti Warner Bros. Discovery dnes schválili převzetí firmy konkurentem Paramount Skydance za zhruba 110 miliard dolarů (téměř 2,3 bilionu Kč). Firmy se na spojení dohodly v únoru. O část společnosti Warner Bros. Discovery dříve usilovala rovněž streamovací platforma Netflix, se svou nabídkou však neuspěla. Transakci ještě budou schvalovat regulační orgány, a to nejen ve Spojených státech, ale také

    … více »
    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (8%)
     (2%)
     (13%)
     (31%)
     (3%)
     (6%)
     (3%)
     (15%)
     (25%)
    Celkem 1436 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Dotaz: Python: jak pribalit pdftk v cx_Freeze?

    3.4.2016 21:05 zdenek2008 | skóre: 26
    Python: jak pribalit pdftk v cx_Freeze?
    Přečteno: 546×
    Pythonovym skriptem vyplnuji pdf formulare pomoci pdftk. Problem nastane, kdyz skript zmrazim pomoci cx_Freeze; zmrazeny skript pdftk nezavola a pdf formulare nevyplni. Jestli spravne rozumim, cx_Freeze umi pribalit moduly, ale jak je to s externimi programy? Umi je pribalit take? Z dokumentace jsem moc nezmoudrel. Nekde jsem cetl, ze toto by snad melo jit v jinych podobnych programech (pyinstaller, py2exe), nebo mozna pouzitim modulu pypdftk, ale to by znamenalo prepsat ten skript nebo presedlat na nektery z tech jinych programu. Nemate nejake tipy?

    Řešení dotazu:


    Odpovědi

    Řešení 1× (zdenek2008 (tazatel))
    Pavel Stárek avatar 4.4.2016 12:43 Pavel Stárek | skóre: 43 | blog: Tady bloguju já :-) | Kolín
    Rozbalit Rozbalit vše Re: Python: jak pribalit pdftk v cx_Freeze?
    Umí to přibalit. Jak jsem psal, je potřeba vyplnit v setup skriptu sekci include_files třeba takto:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import sys
    from cx_Freeze import setup, Executable
    
    # Dependencies are automatically detected, but it might need fine tuning.
    #build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}
    includefiles = [("src/pdftk.exe", "pdftk.exe"), ("src/libiconv2.dll", "libiconv2.dll")]
    build_exe_options = {"packages": ["os"], "excludes": [""], "include_files": includefiles}
    #build_exe_options = {}
    # GUI applications require a different base on Windows (the default is for a
    # console application).
    base = None
    #if sys.platform == "win32":
    #    base = "Win32GUI"
    
    setup(  name = "pdftkexample",
            version = "1.0",
            description = "PdfTk example",
            options = {"build_exe": build_exe_options},
            executables = [Executable("src/pdftkexample.py", base=base)])
    
    
    Předpokládaná struktura adresáře je například: C:\MojeAplikace\src - tam bude pdftkexample.py a pdftk.exe+libiconv2.dll

    C:\MojeAplikace\setup-cxfreeze.py kde bude to co je napsané nahoře. Po zmrazení bude pdftk.exe i s knihovnou libiconv2.dll přibaleno k výslednému exe progámku. Ovšem, aby ho bylo možno volat, je potřeba zjistit kde je umístěn, to se ve vlastním skriptu, který bude volat pdftk.exe udělá takto:
    import sys
    import os
    import os.path
    
    
    def getModulePath():
        if (hasattr(sys, "frozen")):
            return os.path.dirname(sys.executable)
        return os.path.dirname(__file__)
    
    
    def getPdftkExe(exe_name="pdftk.exe"):
        path = os.path.join(getModulePath(), exe_name)
        return path
    
    
    if __name__ == "__main__":
        exe = getPdftkExe()
        print exe
    
    
    V proměné exe je celá cesta k pdftk.exe, která se dá použít pro volání pomocí popen() atd.
    Kdo chce, hledá způsob; kdo nechce, hledá důvod.
    4.4.2016 14:03 zdenek2008 | skóre: 26
    Rozbalit Rozbalit vše Re: Python: jak pribalit pdftk v cx_Freeze?
    Diky, ja jsem mylne zkousel zadat pdftk v setup.py do 'includes', coz hlasilo chybu ze takovy modul neexistuje; ale i kdybych se zkusmo trefil s 'include_files', tu druhou cast s vyhledanim cesty k pdftk bych stejne nevedel. Takze diky jeste jednou, vrhnu se na to.
    5.4.2016 21:04 zdenek2008 | skóre: 26
    Rozbalit Rozbalit vše Re: Python: jak pribalit pdftk v cx_Freeze?
    Tvuj priklad jsem si upravil tak, ze cx_Freeze ted pribaluje pdftk.exe a ten dll soubor do stejne slozky s vygenerovanym exe skriptem. V puvodnim pythonovem skriptu volam pdftk takhle:
    pdftk_command='pdftk form.pdf fill_form form.fdf output form_from_script.pdf'
    os.system(pdftk_command)
    
    Zmrazeny exe skript prislusne pdf soubory nevytvari, cili stale jeste nevola pdftk. Tim se dostavam k tvemu druhemu skriptu, ktery vyhleda cestu k pdftk a vrati ji v promenne exe. Kdyz je pdftk ve stejne slozce se skriptem ktery ho vola, nemelo by stacit volat s cestou .\ , tedy takto?:
    pdftk_command='.\pdftk form.pdf fill_form form.fdf output form_from_script.pdf'
    os.system(pdftk_command)
    5.4.2016 22:01 zdenek2008 | skóre: 26
    Rozbalit Rozbalit vše Re: Python: jak pribalit pdftk v cx_Freeze?
    Pridal jsem do skriptu tvuj kod, ale zmrazeny exe pdf nevygeneruje. Jen problikne okno konzole a to je vse. Preddefinovany fdf soubor se vytvori, takze alespon zbytek skriptu funguje. S os.path moc zkusenosti jeste nemam, takze je to spis pokus-omyl; takhle jsem pouzil tvuj kod:
    import logging
    from decimal import *
    import os
    import glob
    import sys
    import os.path
    
    def getModulePath():
        if (hasattr(sys, "frozen")):
            return os.path.dirname(sys.executable)
        return os.path.dirname(__file__)
    
    def getPdftkExe(exe_name="pdftk.exe"):
        path = os.path.join(getModulePath(), exe_name)
        return path
    
    if __name__ == "__main__":
        cesta_k_pdftk_exe = getPdftkExe()
        #print(cesta k_pdftk_exe)
    
    pdftk_command=cesta_k_pdftk_exe+' form.pdf fill_form form.fdf output form_from_script.pdf'
    os.system(pdftk_command)
    
    5.4.2016 22:26 zdenek2008 | skóre: 26
    Rozbalit Rozbalit vše Re: Python: jak pribalit pdftk v cx_Freeze?
    Tvuj kod pro vyhledani cesty mi vypisuje primo "pdftk.exe", ale zmrazeny skript s nim zatim jeste nefunguje, tak mam nekde chybu. Ale zkusmo jsem do prikazu zadal "pdftk.exe" misto jen "pdftk" a vse zacalo fungovat pote co jsem do include_files v setup.py pridal prazdny pdf formular ktery se ma vyplnovat, aby se pribalil k vyslednemu baliku. No kdybych to umel, nakopal bych se sam...
    Pavel Stárek avatar 8.4.2016 17:25 Pavel Stárek | skóre: 43 | blog: Tady bloguju já :-) | Kolín
    Rozbalit Rozbalit vše Re: Python: jak pribalit pdftk v cx_Freeze?
    Samozřejmě že je potřeba si pomocí include_files přidat všechny další soubory které aplikace používá, například i sdílené knihovny Microsoftu které jsou používány samotným Pythonem.

    Ten modul os.path obsahuje různé funkce pro práci s "cestami". Funkce join "sečte" dva stringy tak, že přidá správný path separator (\ / - znak v proměnné os.sep) podle typu operačního systému na kterém je spuštěna. Samozřejmě na Windows (i v Linuxu) je možné si takovéhle stringy "sčítat" ručně, ale výsledný skript nebude přenositelný mezi různými OS.
    Kdo chce, hledá způsob; kdo nechce, hledá důvod.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.