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:55 | Komunita

Mozilla oznámila, že projekt Things byl přejmenován na WebThings. Nové jméno by mělo zdůraznit, že se nejedná pouze o projekt IoT (Internet věcí), ale o WoT (Web věcí). Současně byla vydána WebThings Gateway (GitHub) ve verzi 0.8 pro Raspberry Pi.

Ladislav Hagara | Komentářů: 0
včera 21:11 | Nová verze

Byl vydán balík KDE Aplikace ve verzi 19.04. Shrnuje práce za poslední čtyři měsíce: opravy chyb, mj. ve správci souborů Dolphin, prohlížeči dokumentů (nejen PDF) Okular nebo prohlížeči obrázků Gwenview – tyto dostaly např. lepší podporu dotykových obrazovek. Významného přepracování se dočkal editor videa Kdenlive.

Fluttershy, yay! | Komentářů: 0
včera 16:22 | Nová verze

Byla vydána verze 19.04 linuxové distribuce Ubuntu a oficiálních odnoží Ubuntu Budgie, Kubuntu, Lubuntu, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio a Xubuntu. Kódový název Ubuntu 19.04 je Disco Dingo. Přehled novinek a odkazy ke stažení v poznámkách k vydání. Ubuntu 19.04 bude podporováno 9 měsíců, tj. do ledna 2020.

Ladislav Hagara | Komentářů: 6
včera 09:55 | Nová verze

Byla vydána verze 8.0 sady aplikací pro SSH komunikaci OpenSSH. Řešena je bezpečnostní chyba CVE-2019-6111 v scp. Přidána byla experimentální podpora výměny klíčů, která je odolná vůči kvantovým počítačům (Streamlined NTRU Prime 4591^761 a X25519). Výchozí délka nově generovaných RSA klíčů je 3072 bitů.

Ladislav Hagara | Komentářů: 0
17.4. 22:44 | Komunita

Zend Framework, open source objektově orientovaný webový aplikační framework implementovaný v PHP, byl předán neziskovému technologickému konsorciu Linux Foundation. Framework se pod novým názvem Laminas v průběhu několika měsíců stane oficiálním projektem konsorcia.

Ladislav Hagara | Komentářů: 4
17.4. 22:00 | Komunita

Gentoo Foundation a společnost Nitrokey společně oznámily, že všichni vývojáři linuxové distribuce Gentoo budou vybaveni kryptografickým tokenem Nitrokey Pro 2 (pdf). Vývojáři se mají zaregistrovat s emailovou adresou @gentoo.org.

Ladislav Hagara | Komentářů: 0
17.4. 20:55 | Zajímavý software

Článek na PIXLS.US představuje svobodný program pro zpracování astronomických fotografií s názvem Siril (GitLab) a uvádí postup, jak v Siril vytvořit hezký snímek noční oblohy.

Ladislav Hagara | Komentářů: 0
17.4. 10:11 | Nová verze

Laboratoře CZ.NIC vydaly novou verzi 4.13.0 aplikace Datovka, tj. svobodné multiplatformní desktopové aplikace pro přístup k datovým schránkám a k trvalému uchovávání datových zpráv v lokální databázi. Nové vlastnosti: U existujícího účtu lze změnit přihlašovací jméno. Podmínkou je, že starým i novým jménem se přihlašuje do stejné datové schránky. Aplikace dovoluje volitelné automatické nahrávání nově stažených datových zpráv do

… více »
Ladislav Hagara | Komentářů: 36
17.4. 01:11 | Zajímavý software

Mozilla na svém blogu Mozilla Hacks věnovaném vývojářům představila projekty Iodide a Pyodide. Iodide umožňuje nejenom vědcům vytvářet interaktivní dokumenty pomocí webových technologií. Viz například Lorenzův atraktor. Rádi byste něco upravili? Stačí kliknout na tlačítko EXPLORE. Po úpravě na tlačítko REPORT. Pyodide přidává do Iodide podporu programovacího jazyka Python a souvisejících knihoven. Na straně klienta není nutné nic instalovat. K vyzkoušení je demo.

Ladislav Hagara | Komentářů: 2
16.4. 23:44 | IT novinky

ČVUT má nejvýkonnější superpočítač pro výzkum umělé inteligence v ČR. Fakulta elektrotechnická a Fakulta informačních technologií ČVUT v Praze spojily své síly a založily Výzkumné centrum informatiky (Research Center for Informatics – RCI). V rámci projektu byl vybudován nejvýkonnější počítačový klastr pro výzkum umělé inteligence v ČR v hodnotě 41,6 milionu korun. Toto jedinečné zařízení, které se svým výkonem řadí mezi superpočítače, se nachází v podzemí historické budovy Fakulty elektrotechnické ČVUT na Karlově náměstí.

Ladislav Hagara | Komentářů: 16
Používáte headset pro virtuální realitu?
 (1%)
 (2%)
 (1%)
 (20%)
 (0%)
 (74%)
Celkem 207 hlasů
 Komentářů: 12, poslední včera 01:19
Rozcestník

Zabalení python package do jedné spustitelné binárky

18.6.2015 23:40 | Přečteno: 1389× | linux | Výběrový blog

Python umožňuje spouštět i daleko podivnější věci než jen skripty s koncovkou .py, pojďme si ukázat jak vytvořit pod Linuxem z python balíku (adresáře) spustitelnou "binárku".

Vytvořímě si složku "foo". V ní vytvoříme soubor "__main__.py" a do něj napíšeme

print "wow!"

Soubor __main__.py způsobí, že je složka foo nyní "spustitelná". Můžeme tedy zavolat "python2 foo".

Nyní vytvoříme ze složky zip soubor:

python2 -m zipfile -c foo.zip foo/*

Zip soubor je také spustitelný:

python2 foo.zip

Vytvoříme soubor "foo" a do něj zapíšeme shebang:

#!/usr/bin/env python2

Nakonec obsah zipu zapíšeme na konec souboru foo a povolíme spuštení:

cat foo.zip >> foo
chmod +x foo

Voilá, máme spustitelnou binárku! :)

Uvedený postup ukázal David Bezley ve své přednášce Modules and Packages: Live and Let Die! (čas 45min) na konferenci PyCon 2015.        

Hodnocení: 93 %

        špatnédobré        

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

Komentáře

Vložit další komentář

Josef Kufner avatar 19.6.2015 01:29 Josef Kufner | skóre: 68
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky
PHP má na tohle PHAR. Je to přímo formát souboru určený k tomuto triku a má i podporu ve formě knihovny na manipulaci s ním. Na začátku pak je klasický PHP kód jako takový malý booloader a zbytek souboru je archiv, se kterým se pracuje.
#!/usr/bin/env php
<?php
Phar::mapPhar();
include 'phar://myphar.phar/index.php';
__HALT_COMPILER();
... a tady následuje archiv
Hello world ! Segmentation fault (core dumped)
19.6.2015 11:42 Dundee5 | skóre: 17 | blog: Dundee5 | Praha
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky
Ano, Phar je celkem podobný koncept, ale řešení v Pythonu se mi líbí daleko víc, protože jsem schopný ho kdykoliv použít i bez čtení manuálu. Vytvoření PHARu zdaleka tak jednoduché a přímočaré není.
Kdo se vzdá svobody, aby získal jistotu, ztratí nakonec obojí. --Benjamin Franklin
xxxxxx avatar 19.6.2015 01:36 xxxxxx | skóre: 23
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky
Super věc :)

Proč ale python3 -m zipfile -c foo.zip foo/* funguje, kdežto zip foo.zip foo/* ne?

Do zápisku by se pak hodil tenhle odkaz, zmíněn v prezentaci.
19.6.2015 09:43 daks
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky
Proč ale python3 -m zipfile -c foo.zip foo/* funguje, kdežto zip foo.zip foo/* ne?
protože takhle do archivu nacpeš i ten adresář, ale python očekává pouze jeho obsah, tohle by mělo fungovat:

zip -j foo.zip foo/*
xxxxxx avatar 19.6.2015 10:25 xxxxxx | skóre: 23
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky
Ahá, díky, to je přesně ono :)
Bystroushaak avatar 19.6.2015 12:13 Bystroushaak | skóre: 35 | blog: Bystroushaakův blog | Praha
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky
Zajímavé, to jsem ani neznal. Kdybych to řešil, tak bych asi použil nuitku, která vytvoří skutečnou spustitelnou binárku.
19.6.2015 16:02 oryctolagus | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky
Zas tohle má výhodu, že to je přenositelný...
Jendа avatar 19.6.2015 21:17 Jendа | skóre: 75 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky
Ale stejně potřebuješ interpret Pythonu (ve správné verzi) a moduly. Tak nějak nevidím výhody proti distribuci adresáře se soubory…
Píšu sem výhradně jako přihlášený uživatel z tohoto účtu.
Bystroushaak avatar 19.6.2015 23:51 Bystroushaak | skóre: 35 | blog: Bystroushaakův blog | Praha
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky
Jednodušší stahování (nemusíš to packovat zvlášť jen pro stažení). Taky se to dá přímo spustit, narozdíl od složky s kopou souborů, kde musíš hledat hlavní.
19.6.2015 14:29 tom
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky
Funguje to diky tomu, ze ma zip hlavicku na konci souboru, takze na zacatek se da nacpat cokoliv. Nevyhoda je, ze ruzne nastroje oznaci typ souboru ruzne.
Josef Kufner avatar 19.6.2015 16:35 Josef Kufner | skóre: 68
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky
Teď se nabízí otázka, zda to je bug, nebo feature.
Hello world ! Segmentation fault (core dumped)
mirec avatar 19.6.2015 16:42 mirec | skóre: 31 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky

Bez tejto vlastnosti by nebolo možné urobiť samorozbaľovacie zip (s príponou .exe).

LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
Jendа avatar 19.6.2015 21:26 Jendа | skóre: 75 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky
Bez této vlastnosti je možné vytvořit samorozbalovací tar (s příponou sh). Tak proč ne zip?

Typicky to vypadá nějak jako cat $0 | tail -c +30 | tar xf a pak je přilepený ten tarball. (btw. jak skipnout prvních N bajtů souboru? dd nefunguje a tail -c +N IMHO není podporovaný všude)
Píšu sem výhradně jako přihlášený uživatel z tohoto účtu.
mirec avatar 20.6.2015 08:14 mirec | skóre: 31 | blog: mirecove_dristy | Poprad
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky

S tarom musí človek vedieť presný offset. Na zip postačuje obyčajné unzip subor.exe.

LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
20.6.2015 11:30 oryctolagus | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky
S tarom musí človek vedieť presný offset.
Přesně tak. Tyhle prasárny fakt miluju, ještě když je to nakombinovaný s naprosto dementním stahovacím systémem...
xkucf03 avatar 20.6.2015 14:33 xkucf03 | skóre: 47 | blog: xkucf03
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky

Jako mnohem větší prasárna mi přijde, že stáhneš soubor z Internetu po HTTP a ani nezkontroluješ jeho hash.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Relational pipes
20.6.2015 17:24 oryctolagus | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Zabalení python package do jedné spustitelné binárky
Kontrolu hashí jsem tam dřív měl, ale oni ten systém občas měněj a asi se to někde ztratilo. Kdyby neměli tak idiotskej systém, tak můžu hashe kontrolovat vestavěným mechanismem. Ještě to opravim.
xkucf03 avatar 19.6.2015 23:53 xkucf03 | skóre: 47 | blog: xkucf03
Rozbalit Rozbalit vše Java a binfmt
Nyní vytvoříme ze složky zip soubor:

Že by inspirace Javou? :-) (JAR)

Nakonec obsah zipu zapíšeme na konec souboru foo a povolíme spuštení:

V Javě není potřeba ani nic takhle hackovat – použije se standardní mechanismus: binfmt_misc.

Vytvoříme si soubor Test.java s obsahem např.:

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        System.out.println(Arrays.toString(args));
    }
}
Zkompilujeme a spustíme:
#Zkompilujeme:
javac Test.java

#Vytvoříme JAR:
jar cfe test.jar Test Test.class

# nastavíme spustitelný příkaz
chmod +x test.jar

# spustíme jako běžnou binárku
./test.jar ahoj
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Relational pipes
20.6.2015 00:13 chrono
Rozbalit Rozbalit vše Re: Java a binfmt
Pri tom Python riešení netreba používať binfmt_misc a ani nemusí mať ten súbor nejakú konkrétnu príponu.
xkucf03 avatar 20.6.2015 20:10 xkucf03 | skóre: 47 | blog: xkucf03
Rozbalit Rozbalit vše Re: Java a binfmt_misc

binfmt_misc se řídí buď příponou nebo magickým číslem – takže přípona může být libovolná. Viz binfmt_misc: spouštíme javovské programy podobně jako nativní binárky

BTW: pro Python by to mělo fungovat taky:

$ cat /proc/sys/fs/binfmt_misc/python2.7 
enabled
interpreter /usr/bin/python2.7
flags: 
offset 0
magic 03f30d0a

$ cat /proc/sys/fs/binfmt_misc/python3.4 
enabled
interpreter /usr/bin/python3.4
flags: 
offset 0
magic ee0c0d0a
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Relational pipes
21.6.2015 01:26 chrono
Rozbalit Rozbalit vše Re: Java a binfmt_misc
Keďže jar súbory sú normálne zip súbory, tak jediné rozumné riešenie je len tá prípona (a nechce sa mi hľadať, ako si to poradí s rôznou veľkosťou písmen). Pri tých zbalených python archívoch je binfmt_misc zbytočné, keďže tam stačí štandardný binfmt_script.
xkucf03 avatar 21.6.2015 02:33 xkucf03 | skóre: 47 | blog: xkucf03
Rozbalit Rozbalit vše Re: Java a binfmt_misc
Keďže jar súbory sú normálne zip súbory

Úplně normální ne – sice je tam na začátku taky PK, ale další bajty jsou jiné. Můžeš si to vyzkoušet – příkaz file dokáže rozlišit ZIP a JAR.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Relational pipes
23.6.2015 17:35 Gilhad | skóre: 20 | blog: gilhadoviny
Rozbalit Rozbalit vše Re: Java a binfmt_misc
To dokážu taky :)

zip

jar
23.6.2015 17:40 oryctolagus | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Java a binfmt_misc
:-D

Založit nové vláknoNahoru

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