Fórum Root.cz

Hlavní témata => Distribuce => Téma založeno: kei.101 22. 02. 2011, 18:50:47

Název: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: kei.101 22. 02. 2011, 18:50:47
Dobrý den.

Chtěl bych se zeptat, jakou distribuci byste doporučili na vývoj programů v C a pythonu. Začínal jsem na Gentoo a teď už několik let používám Arch. Poslední dobou mě ale dost štvou rolling updates. Když něco napíšu v pythonu, skoro jistě to po pár updatech nefunguje nebo to nefunguje hned, protože mám zrovna nějakou nepříliš odladěnou verzi pythonu.

V tento moment mi například nefunguje podle očekávání ani:

Kód: [Vybrat]
#!/usr/bin/env python2

import sys

for line in sys.stdin:
    print line

Děkuji za názory.

JN
Název: Re: Distribuce pro vývoj aplikací (c, python)
Přispěvatel: Michal Štrba 22. 02. 2011, 19:30:33
Updatuju sa len balicky takze pokial chces aby sa ti neupdatoval python, stiahni, skompiluj a nainstaluj si ho. Pokial ti prekaza rolling distro tak prejdi na nejake "nerolling" napr. Ubuntu, Fedora alebo OpenSUSE. Tam by si nemal mat problemy. :)
Název: Re: Distribuce pro vývoj aplikací (c, python)
Přispěvatel: Michal Štrba 22. 02. 2011, 19:36:02
A updaty by sa mali dat aj zakazat pre ten ktory balik. Neviem ako sa to robi v Archu to snad najdes v dokumentaci.
Název: Re: Distribuce pro vývoj aplikací (c, python)
Přispěvatel: kei.101 22. 02. 2011, 23:12:11
No ono to není jen o zakázání aktualizace. Já chci mít aktuální interpreter, ale chci ho mít také stabilní a problém Archu je, že se nelze vrátit ke staré verzi.. Myslím, že zase zkusím oživit vzopmínky na Gentoo, tam to s těmi verzemi bylo přívětivější..
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: Kaemon 23. 02. 2011, 06:46:01
Lze se vrátit ke starší verzi. Stačí jí v /var/cache/pacman/pkg najít, a nainstalovat pomocí pacman -U
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: kei.101 23. 02. 2011, 11:16:36
Jojo, už jsem viděl návod. Jenomže já na notebooku s 8GB diskem rád píšu "pacman -Sc" :) takže to tam už nenajdu a ostatní postupy jaksi nefungují. Už to ale není nutné řešit, protože chyba byla ve mě, ta 2.* verze pythonu funguje pro mě stejně nepředvídatelně i třeba v PCBSD. Ale divím se, že v pythonu v3.* to funguje přesně, jak bych čekal. no nic..
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: Mordae 23. 02. 2011, 13:59:33
Ne vyvoj Fedoru. Je to nove a stabilni. A kdyz potrebujes ultra-nove veci, tak sahnes do rawhide. A kdyz jeste novejsi, tak vezmes .src.rpm z rawhide, upravis .spec file pro novejsi verzi a zbuildujes lokalne.
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: zatt 23. 02. 2011, 15:42:12
Muzu se trosku off-topic zeptat, jak se choval ten skript z uvodniho dotazu?
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: FrostyX 23. 02. 2011, 21:07:06
K tomu archu. Lze se vrátit na starší verzy i s promazaným /var/cache. Stačí si stáhnout libovolnou verzy balíku třeba odtud http://arm.konnichi.com/search/ (http://arm.konnichi.com/search/) a pak již zmíněné pacman -U
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: broukoid 23. 02. 2011, 22:08:09
Tipuju ze problem nebude vubec v distribucich, ale spis v prvni radce prikladu - konkretne v "python2" - python2 na vetsine distribucich neni nic. Bud to zmen na "python", nebo pokud potrebujes nejakou konkretni verzi tak treba na python2.5.
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: Radim Zátopek 24. 02. 2011, 16:08:29
Tipuju ze problem nebude vubec v distribucich, ale spis v prvni radce prikladu - konkretne v "python2" - python2 na vetsine distribucich neni nic. Bud to zmen na "python", nebo pokud potrebujes nejakou konkretni verzi tak treba na python2.5.

A to jste prave na omylu. Arch je jedna z distribuci ktera presla na Python 3 (python) a Python 2.7.1 lze nainstaloval pro potreby zpetne kompatibility a je potreba pro nektere balicky, ktere jeste nebyly na python3 naportovany. Balicek s  Python 2.7.1 se v archu jmenuje python2 a na binarku je defaultne vytvoren symbolicky link /usr/bin/python2.
viz http://www.archlinux.org/news/python-is-now-python-3/.
Takze ten script je napsany spravne a me by taky zajimalo jak "nepredvidatelne" se choval.
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: kei.101 25. 02. 2011, 11:00:29
Zkuste si na archu porovnat chování:

Kód: [Vybrat]
#!/usr/bin/env python
 
import sys

f = open(sys.argv[1])
for line in f:
    print(line, end='')

a

Kód: [Vybrat]
#!/usr/bin/env python2
 
import sys

f = open(sys.argv[1])
for line in f:
    print line,

Pro volání
Kód: [Vybrat]
./test.py /etc/passwd fungují stejně, pro
Kód: [Vybrat]
./test.py /dev/tty se python ve verzi 2 chová jinak a podle mého názoru divně (mimochodem stejně, jako když se rovnou iteruje přes sys.stdin)
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: andro 25. 02. 2011, 12:28:18
Mas bajecny styl popisu problemu. Ve stejnem duchu ti naprosto presne mohu rici, v cem je problem - je to rozbity!!!
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: Harvie 25. 02. 2011, 12:52:41
Jojo, už jsem viděl návod. Jenomže já na notebooku s 8GB diskem rád píšu "pacman -Sc" :)

Hele existuje "Arch Rollback Machine", coz je server s obrovskym diskovym polem ze kteryho si muzes stahnout verzi libovolnyho balicku z libovolnyho data nekolik let zpatky, samozrejme nemusis vsechny balicky ukladat u sebe.

Jinak ta nekompatibilita spocivala v prepnutim z pythonu 2 na python 3. Ja osobne bych ti radil vyvijet v pythonu 3, pokud chces starsi verzi, tak to musis ve skriptu nahore (v hashbangu) napsat.
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: kei.101 25. 02. 2011, 13:30:46
Mas bajecny styl popisu problemu. Ve stejnem duchu ti naprosto presne mohu rici, v cem je problem - je to rozbity!!!

Omlouvám se, ale měl jsem pocit, že je zřejmé, co skript demonstruje. Jde o to, že přes řádky běžného souboru lze v pohodě iterovat, ale přes řádky načtené ze standardního vstupu iterovat nelze (v python2). Zkuste zpustit ten pvní skript s parametrem /dev/tty a zadávat řádky z klávesnice a pak spusťte ten druhý skript se stejným parametrem a zadávejte řádky z klávesnice. V prvním případě (verze 3) vám je bude program duplikovat (správné chování), v tom druhém ne. Alespoň u mě to tak funguje. Považuji to za chybu, protože nechápu, proč by se mělo v unixu rozlišovat mezi deskriptorem běžného souboru a standardním vsupem. Vždyť i v C je to FILE jako FILE a to i ve windows! Tak mě napadá, zkusit to ještě ve windows..
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: kei.101 25. 02. 2011, 13:33:34
Jojo, už jsem viděl návod. Jenomže já na notebooku s 8GB diskem rád píšu "pacman -Sc" :)

Hele existuje "Arch Rollback Machine", coz je server s obrovskym diskovym polem ze kteryho si muzes stahnout verzi libovolnyho balicku z libovolnyho data nekolik let zpatky, samozrejme nemusis vsechny balicky ukladat u sebe.

Jinak ta nekompatibilita spocivala v prepnutim z pythonu 2 na python 3. Ja osobne bych ti radil vyvijet v pythonu 3, pokud chces starsi verzi, tak to musis ve skriptu nahore (v hashbangu) napsat.

Já právě dělám na projektu, kde potřebuju pyserial package a když jsem začínal, tak ten ještě nebyl pro python3, alespoň ne na archu, ani v AUR. A navíc si nejsem jistý, jestli psát pro python v3 je už dostatečně přenositelné.
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: kei.101 25. 02. 2011, 13:35:54
Jojo, už jsem viděl návod. Jenomže já na notebooku s 8GB diskem rád píšu "pacman -Sc" :)

Hele existuje "Arch Rollback Machine", coz je server s obrovskym diskovym polem ze kteryho si muzes stahnout verzi libovolnyho balicku z libovolnyho data nekolik let zpatky, samozrejme nemusis vsechny balicky ukladat u sebe.

Jinak ta nekompatibilita spocivala v prepnutim z pythonu 2 na python 3. Ja osobne bych ti radil vyvijet v pythonu 3, pokud chces starsi verzi, tak to musis ve skriptu nahore (v hashbangu) napsat.

Bohužel ne všechny package, které potřebuji byli v době, kdy jsem začínal na aktuálním projektu, už dostupné pro python3 a navíc si nejsem moc jistý, zda by byl skript pro python3 v dnešní době už dostatečně přenositelný.
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: kei.101 25. 02. 2011, 13:55:11
Tak ve windows to ani nemá stejný typ.. sys.stdin je nějaké RPCProxy. ale v linuxu to má stejný typ a přesto se to chová jinak..
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: Radim Zátopek 25. 02. 2011, 14:42:12
Tak jsem to vyzkousel ve svem Archu a opravdu se to chova rozdilne. V python3 to nacita zadane radky a vypisuje je na stdout hned po zadani LF, kdezto v python2 to ceka az vstup ukoncim EOF (ctrl-d) a az potom ho zacne zpracovavat. Vyzkousel jsem to taky pod win7 x64 a tam se to chova naprosto stejne, takze to vypada rozdilnou implementaci v python2 vs python3. Nehazel bych tedy vinu na Arch a na rolling release model.
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: kei.101 25. 02. 2011, 18:44:59
Tak jsem to vyzkousel ve svem Archu a opravdu se to chova rozdilne. V python3 to nacita zadane radky a vypisuje je na stdout hned po zadani LF, kdezto v python2 to ceka az vstup ukoncim EOF (ctrl-d) a az potom ho zacne zpracovavat. Vyzkousel jsem to taky pod win7 x64 a tam se to chova naprosto stejne, takze to vypada rozdilnou implementaci v python2 vs python3. Nehazel bych tedy vinu na Arch a na rolling release model.

Vždyť taky jo :) Neřekl jste mi nic nového (kromě pokusu ve win7). Já to už zkoušel v linuxu, BSD a windows XP :) doporučuji číst celou diskuzi :)
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: Radim Zátopek 26. 02. 2011, 09:29:15
Vždyť taky jo :) Neřekl jste mi nic nového (kromě pokusu ve win7). Já to už zkoušel v linuxu, BSD a windows XP :) doporučuji číst celou diskuzi :)

Aha, to jsem přehlídl :) Pak je váš problém vyřešen, protože jsme dokázali že to "nepředvídatelné chování" je způsobeno odlišnou implementací Pythonu 2 a 3, tudíž změna distribuce nepomůže :)

Ovšem nedalo mi to, tak jsem trošku hledal a zkoušel a v Pythonu 2 se ten váš příklad dá přepsat a pak se to chová stejně jako v P3
Kód: [Vybrat]
import sys

for line in iter(sys.stdin.readline,''):
    print line,
Název: Re: Distribuce pro vývoj aplikací (C, Python)
Přispěvatel: kei.101 26. 02. 2011, 10:20:57
Vždyť taky jo :) Neřekl jste mi nic nového (kromě pokusu ve win7). Já to už zkoušel v linuxu, BSD a windows XP :) doporučuji číst celou diskuzi :)

Aha, to jsem přehlídl :) Pak je váš problém vyřešen, protože jsme dokázali že to "nepředvídatelné chování" je způsobeno odlišnou implementací Pythonu 2 a 3, tudíž změna distribuce nepomůže :)

Ovšem nedalo mi to, tak jsem trošku hledal a zkoušel a v Pythonu 2 se ten váš příklad dá přepsat a pak se to chová stejně jako v P3
Kód: [Vybrat]
import sys

for line in iter(sys.stdin.readline,''):
    print line,

Výborně, děkuji. Sice nemám rád berličky, ale tohle je celkem hezké :)