Fórum Root.cz
Hlavní témata => Distribuce => Téma založeno: 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:
#!/usr/bin/env python2
import sys
for line in sys.stdin:
print line
Děkuji za názory.
JN
-
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. :)
-
A updaty by sa mali dat aj zakazat pre ten ktory balik. Neviem ako sa to robi v Archu to snad najdes v dokumentaci.
-
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ší..
-
Lze se vrátit ke starší verzi. Stačí jí v /var/cache/pacman/pkg najít, a nainstalovat pomocí pacman -U
-
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..
-
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.
-
Muzu se trosku off-topic zeptat, jak se choval ten skript z uvodniho dotazu?
-
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
-
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.
-
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.
-
Zkuste si na archu porovnat chování:
#!/usr/bin/env python
import sys
f = open(sys.argv[1])
for line in f:
print(line, end='')
a
#!/usr/bin/env python2
import sys
f = open(sys.argv[1])
for line in f:
print line,
Pro volání ./test.py /etc/passwd
fungují stejně, pro ./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)
-
Mas bajecny styl popisu problemu. Ve stejnem duchu ti naprosto presne mohu rici, v cem je problem - je to rozbity!!!
-
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.
-
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..
-
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é.
-
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ý.
-
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..
-
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.
-
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 :)
-
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
import sys
for line in iter(sys.stdin.readline,''):
print line,
-
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
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é :)