Python opdateret til Python 3

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:

  1. su
  2. (Skriv din kode til root)
  3. pacman -Sy python2
  4. cd /usr/bin
  5. wget http://privat.archlinux.dk/pastebin
  6. 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:

http://www.archlinux.org/news/python-is-now-python-3/

1 kommentar - RSS feed til kommentarer i denne post

  1. Nick - 22. januar 2011 - 10:24

    Fin beskrivelse

Skriv en kommentar

Kopier venligst strengen 25N8Yj til nedenstående felt: