Efter en længere periode i [testing] er python 3 kommet ud af [testing] og ind i [extra]. Opdateringen vil for mange brugere ikke ske helt uden problemen eftersom følgende er lavet:
/usr/bin/python -> /usr/bin/python2
Er ændret til:
/usr/bin/python -> /usr/bin/python3
Som nogen måske allerede ved så er Python 3 ikke kompatible med kode skrevet op imod Python 2. Problemet er nu at alle de scripts der er skrevet op imod Python 2 har en linje øverst der ligner følgende:
#!/usr/bin/env python
Linjen gør således at systemet ved hvilket program der skal køre scriptet hvis man kører det men eftersom python nu peger på Python 3 vil scriptet med stor sandsynlighed ikke virke længeren. Et andet problem er at mange distributioner stadig ikke har valgt at opdatere til Python 3 hvilket betyder at der nok går noget tid før vi rent faktisk ser nye versioner af disse Python 2 programmer der er kompatible med Python 3 (problemet er kort sagt at Python 3 programmer er heller ikke kompatible med Python 2).
Der er flere løsninger på dette problem. Den mere krævende løsning er at udvikle alle sine scripts til Python 3 men for mange er dette ikke en mulighed. En anden løsning der er nemmere er at installere python2 pakken der er i [extra]. Denne løsning kan virke enkel og vil også fungere i noget tid men på et tidspunkt vil supported for Python 2 stoppe og løsningen skal derfor betragtes som en god måde til at få kørt sit system over på Python 3. Efter at have installeret python2 pakken skal de forskellige scripts peges over på /usr/bin/python2
i stedet for /usr/bin/python
.
Som eksempel kan vi prøve at få programmet pastebin
til at køre ved brug af python2 pakken. Programmet er skrevet af LokeDK i Python 2 kode og bruges til at upload en fil til Pastebin.com fra en terminal. Herefter vil programmet output en URL til den Pastebin.com hvor koden blev uploadet til.
Koden kan ses her:
#!/usr/bin/env python import urllib import urllib2 import sys import os def submitOnPastebin(data): try: url = "http://pastebin.com/api_public.php" values = {'paste_code':data} data = urllib.urlencode(values) req = urllib2.Request(url, data) response = urllib2.urlopen(req) return response.read() except URLError as e: print "Caught Exception", e if __name__ == '__main__': if len(sys.argv) == 2: param = sys.argv[1] if param[0] is not "/": param = os.getcwd()+"/"+param try: f = open(param) d = f.read() print "URL: "+submitOnPastebin(d) except IOError as e: print e else: print "Usage: "+sys.argv[0]+" [filename]" sys.exit(1)
I dette eksempel er det altså den første linje der skal laves om til:
#!/usr/bin/env python2
Scriptet kan som altid hentes på følgende URL og holdes løbende opdateret indtil vi en dag finde ud af at lave en PKGBUILD til scriptet (scriptet er allerede opdateret til at bruge python2):
http://privat.archlinux.dk/pastebin
Indtil videre kan scriptet installeres med følgende vejledning:
su
- (Skriv din kode til root)
pacman -Sy python2
cd /usr/bin
wget http://privat.archlinux.dk/pastebin
chmod +x pastebin
Programmet kan køres med pastebin /sti/til/fil/der/skal/uploades
og vil kunne køres som ses nedenfor hvor jeg uploader koden til pastebin scriptet til Pastebin.com:
[julemand101@carbon ~]$ pastebin pastebin URL: http://pastebin.com/5TVFwGD4
Læs mere omkring Python 3 opdateringen her:
Nick - 22. januar 2011 - 10:24
Fin beskrivelse