[elbe-devel] [PATCH 20/25] py3: use print("x") function instead of print "x"

Manuel Traut manut at linutronix.de
Fri Dec 1 16:51:17 CET 2017


print is a function in python3 and a statement in python2.
Convert the code to use the print function.

To be python2 compatible a __future__ import is used.

Signed-off-by: Manuel Traut <manut at linutronix.de>
---
 elbe                               | 14 +++++-----
 elbepack/aptprogress.py            | 10 ++++---
 elbepack/commands/add.py           | 10 ++++---
 elbepack/commands/adjustpkgs.py    | 10 ++++---
 elbepack/commands/bootup-check.py  | 14 +++++-----
 elbepack/commands/buildchroot.py   | 16 ++++++-----
 elbepack/commands/buildsysroot.py  |  7 ++---
 elbepack/commands/check_updates.py | 22 +++++++++-------
 elbepack/commands/chg_archive.py   | 10 ++++---
 elbepack/commands/chroot.py        |  7 ++---
 elbepack/commands/control.py       | 40 ++++++++++++++--------------
 elbepack/commands/daemon.py        | 12 +++++----
 elbepack/commands/db.py            |  5 ++--
 elbepack/commands/debianize.py     | 10 ++++---
 elbepack/commands/diff.py          | 30 +++++++++++----------
 elbepack/commands/gen_update.py    | 20 +++++++-------
 elbepack/commands/genlicence.py    |  3 ++-
 elbepack/commands/get_archive.py   | 13 ++++-----
 elbepack/commands/hdimg.py         | 14 +++++-----
 elbepack/commands/init.py          | 28 +++++++++++---------
 elbepack/commands/parselicence.py  |  9 ++++---
 elbepack/commands/pin_versions.py  | 14 +++++-----
 elbepack/commands/pkgdiff.py       | 10 ++++---
 elbepack/commands/remove_sign.py   | 10 ++++---
 elbepack/commands/setsel.py        |  9 ++++---
 elbepack/commands/show.py          | 40 ++++++++++++++--------------
 elbepack/commands/sign.py          |  6 +++--
 elbepack/commands/validate.py      | 10 ++++---
 elbepack/commands/xsdtoasciidoc.py |  6 +++--
 elbepack/db.py                     |  6 +++--
 elbepack/dbaction.py               | 54 ++++++++++++++++++++------------------
 elbepack/finetuning.py             |  4 ++-
 elbepack/gpg.py                    | 40 ++++++++++++++--------------
 elbepack/hdimg.py                  |  6 +++--
 elbepack/pkgutils.py               | 27 ++++++++++++-------
 elbepack/templates.py              |  4 ++-
 elbepack/updated.py                | 12 +++++----
 elbepack/updatepkg.py              | 12 +++++----
 elbepack/virtapt.py                | 11 ++++----
 elbepack/xmldefaults.py            | 11 +++++---
 test/modify_rfs.py                 | 10 ++++---
 test/updated.py                    | 18 +++++++------
 42 files changed, 353 insertions(+), 271 deletions(-)

diff --git a/elbe b/elbe
index 48056013..2a9e5902 100755
--- a/elbe
+++ b/elbe
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import os
 import sys
 
@@ -26,11 +28,11 @@ from elbepack.version import elbe_version, running_os
 from elbepack.directories import init_directories, get_cmdlist
 
 def usage():
-    print 'elbe v' + elbe_version
-    print 'need a subcommand: e.g. \'elbe initvm\'. \n\
-    Available subcommands are: \n'
+    print("elbe v%s" % elbe_version)
+    print("need a subcommand: e.g. \'elbe initvm\'. \n\
+    Available subcommands are: \n")
     for i in get_cmdlist():
-        print '        * '+i
+        print("        * %s" % i)
 
 # First initialise the directories module
 # so that it knows, where the current elbe
@@ -43,7 +45,7 @@ if (len(sys.argv) < 2):
     sys.exit(20)
 
 if sys.argv[1] == "--version":
-    print 'elbe v' + elbe_version + ' ' + running_os[0] + ' ' + running_os[1]
+    print("elbe v %s %s %s" % (elbe_version, running_os[0], running_os[1]))
     sys.exit(0)
 
 cmd_list = get_cmdlist()
@@ -57,7 +59,7 @@ if sys.argv[1] == "--test-commands":
 
 
 if not sys.argv[1] in cmd_list:
-    print "Unknown subcommand !\n"
+    print("Unknown subcommand !\n")
     usage()
     sys.exit(20)
 
diff --git a/elbepack/aptprogress.py b/elbepack/aptprogress.py
index d3b09436..5a86784f 100644
--- a/elbepack/aptprogress.py
+++ b/elbepack/aptprogress.py
@@ -16,6 +16,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 from apt.progress.base import InstallProgress, AcquireProgress, OpProgress
 from apt_pkg import size_to_str
 import os
@@ -36,7 +38,7 @@ class ElbeInstallProgress (InstallProgress):
         if self.cb:
             self.cb (line)
         else:
-            print line
+            print(line)
 
     def processing (self, pkg, stage):
         self.write ("processing: " + pkg + " - " + stage)
@@ -51,7 +53,7 @@ class ElbeInstallProgress (InstallProgress):
         try:
             obj.do_install (self.fileno)
         except AttributeError:
-            print 'installing .deb files is not supported by elbe progress'
+            print("installing .deb files is not supported by elbe progress")
             raise SystemError
         return 0
 
@@ -76,7 +78,7 @@ class ElbeAcquireProgress (AcquireProgress):
         if self.cb:
             self.cb (line)
         else:
-            print line
+            print(line)
 
     def ims_hit(self, item):
         line = 'Hit ' + item.description
@@ -114,7 +116,7 @@ class ElbeOpProgress (OpProgress):
         if self.cb:
             self.cb (line)
         else:
-            print line
+            print(line)
     def update (self, percent=None):
         pass
     def done (self):
diff --git a/elbepack/commands/add.py b/elbepack/commands/add.py
index 2b1e344c..317e007c 100644
--- a/elbepack/commands/add.py
+++ b/elbepack/commands/add.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import sys
 
 from elbepack.elbexml import ElbeXML
@@ -29,25 +31,25 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) < 2:
-        print "Wrong number of arguments"
+        print("Wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
     try:
         xml = ElbeXML ( args[0] )
     except Exception as e:
-        print "Error reading xml file: %s" % str(e)
+        print(("Error reading xml file: %s" % str(e)))
         sys.exit(20)
 
     for a in args[1:]:
         try:
             xml.add_target_package( a )
         except Exception as e:
-            print "Error adding package %s: %s" % (a, str(e))
+            print(("Error adding package %s: %s" % (a, str(e))))
             sys.exit(20)
 
     try:
         xml.xml.write( args[0] )
     except:
-        print "Unable to write new xml file"
+        print("Unable to write new xml file")
         sys.exit(20)
diff --git a/elbepack/commands/adjustpkgs.py b/elbepack/commands/adjustpkgs.py
index 4c8d1779..d21da1bd 100644
--- a/elbepack/commands/adjustpkgs.py
+++ b/elbepack/commands/adjustpkgs.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 from optparse import OptionParser
 
 from elbepack.asciidoclog import ASCIIDocLog
@@ -53,7 +55,7 @@ class adjpkg(object):
                     continue
                 if p.essential or p.is_auto_installed or (p.name in pkglist) or p.installed.priority == "important" or p.installed.priority == "required":
                     continue
-                print "MARK REMOVE %s" % p.name
+                print("MARK REMOVE %s" % p.name)
                 p.mark_delete( auto_fix=False, purge=True )
 
             for name in pkglist:
@@ -66,7 +68,7 @@ class adjpkg(object):
                 cp = cache[name]
 
                 cp.mark_install()
-                print "MARK INSTALL %s" % cp.name
+                print("MARK INSTALL %s" % cp.name)
 
             cache.commit(apt.progress.base.AcquireProgress(),
                          apt.progress.base.InstallProgress())
@@ -80,7 +82,7 @@ class adjpkg(object):
                     continue
                 if p.is_auto_removable:
                     p.mark_delete( purge=True )
-                    print "MARKED AS AUTOREMOVE %s" % p.name
+                    print("MARKED AS AUTOREMOVE %s" % p.name)
 
         cache.commit(apt.progress.base.AcquireProgress(),
                      apt.progress.base.InstallProgress())
@@ -97,7 +99,7 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) != 1:
-        print "Wrong number of arguments"
+        print("Wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
diff --git a/elbepack/commands/bootup-check.py b/elbepack/commands/bootup-check.py
index c7e22c82..d63cc0cc 100755
--- a/elbepack/commands/bootup-check.py
+++ b/elbepack/commands/bootup-check.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import apt
 import apt_pkg
 
@@ -33,7 +35,7 @@ def is_installed (ip, cache):
     try:
         p = cache[ip.et.text]
     except KeyError:
-        print '%s is not in local apt' % ip.et.text
+        print("%s is not in local apt" % ip.et.text)
         return False
     if p.current_state == apt_pkg.CURSTATE_INSTALLED:
         return True
@@ -50,26 +52,26 @@ def bootup_check (xml):
     for p in hl_cache:
         if p.is_installed:
             if not is_in_fpl (p, fpl):
-                print '%s installed by user' % p.name
+                print("%s installed by user" % p.name)
 
     for ip in fpl:
          if not is_installed (ip, cache):
-                print '%s removed by user' % ip.et.text
+                print("%s removed by user" % ip.et.text)
 
 def bootup_info ():
     with open ("/etc/elbe_version", 'r') as ev:
-        print ev.read()
+        print(ev.read())
 
 def run_command (argv):
     try:
         xml = etree ("/etc/elbe_base.xml")
     except IOError:
-        print '/etc/elbe_base.xml removed by user'
+        print("/etc/elbe_base.xml removed by user")
         return -1
 
     bootup_check (xml)
     try:
         bootup_info ()
     except IOError:
-        print '/etc/elbe_version removed by user'
+        print("/etc/elbe_version removed by user")
         return -1
diff --git a/elbepack/commands/buildchroot.py b/elbepack/commands/buildchroot.py
index 56f69723..bc7864bd 100644
--- a/elbepack/commands/buildchroot.py
+++ b/elbepack/commands/buildchroot.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 from optparse import OptionParser
 import sys
 
@@ -85,23 +87,23 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) != 1:
-        print "wrong number of arguments"
+        print("wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
     if not opt.target:
-        print "No target specified"
+        print("No target specified")
         sys.exit(20)
 
     if opt.skip_cdrom:
-        print "WARNING: Skip CDROMS is now the default, use --build-bin to build binary CDROM"
+        print("WARNING: Skip CDROMS is now the default, use --build-bin to build binary CDROM")
 
     try:
         project = ElbeProject( opt.target, args[0], opt.output, opt.name,
                 opt.buildtype, opt.skip_validation )
     except ValidationError as e:
-        print str(e)
-        print "xml validation failed. Bailing out"
+        print((str(e)))
+        print("xml validation failed. Bailing out")
         sys.exit(20)
 
     try:
@@ -109,12 +111,12 @@ def run_command( argv ):
                 opt.build_sources, opt.cdrom_size, opt.debug, opt.skip_pkglist,
                 opt.skip_pbuild )
     except CommandError as ce:
-        print "command in project build failed:", ce.cmd
+        print(("command in project build failed: %s" % ce.cmd))
         sys.exit(20)
 
     try:
         db = ElbeDB()
         db.save_project (project)
     except OperationalError:
-        print "failed to save project in database"
+        print("failed to save project in database")
         sys.exit(20)
diff --git a/elbepack/commands/buildsysroot.py b/elbepack/commands/buildsysroot.py
index 80f3782f..6fcba489 100644
--- a/elbepack/commands/buildsysroot.py
+++ b/elbepack/commands/buildsysroot.py
@@ -16,6 +16,7 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
 
 from optparse import OptionParser
 import sys
@@ -34,7 +35,7 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) != 1:
-        print "wrong number of arguments"
+        print("wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
@@ -42,8 +43,8 @@ def run_command( argv ):
         project = ElbeProject( args[0], override_buildtype=opt.buildtype,
                 skip_validate=opt.skip_validation )
     except ValidationError as e:
-        print str(e)
-        print "xml validation failed. Bailing out"
+        print(str(e))
+        print("xml validation failed. Bailing out")
         sys.exit(20)
 
     project.build_sysroot ()
diff --git a/elbepack/commands/check_updates.py b/elbepack/commands/check_updates.py
index c3e9930a..cc0669eb 100644
--- a/elbepack/commands/check_updates.py
+++ b/elbepack/commands/check_updates.py
@@ -16,6 +16,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import os
 import sys
 
@@ -37,19 +39,19 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) != 1:
-        print "Wrong number of arguments"
+        print("Wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
     if not opt.skip_validation:
         validation = validate_xml (args[0])
         if len (validation) != 0:
-            print "xml validation failed. Bailing out"
+            print("xml validation failed. Bailing out")
             for i in validation:
-                print i
+                print(i)
             sys.exit(20)
 
-    print "checking %s" % args[0]
+    print("checking %s" % args[0])
 
     xml = etree( args[0] )
 
@@ -93,10 +95,10 @@ def run_command( argv ):
 
         if not pname in v.cache:
             if pauto == 'false':
-                print pname, "does not exist in cache but is specified in pkg-list"
+                print("%s does not exist in cache but is specified in pkg-list" % pname)
                 errors += 1
             else:
-                print pname, "is no more required"
+                print("%s is no more required" % pname)
                 required_updates += 1
 
             continue
@@ -106,18 +108,18 @@ def run_command( argv ):
         if d.marked_install( centry ):
             cver = d.get_candidate_ver( v.cache[pname] ).ver_str
             if pver != cver:
-                print pname, "%s != %s" % (pver, cver)
+                print("%s: %s != %s" % (pname, pver, cver))
                 required_updates += 1
 
     sys.stdout.flush()
     sys.stderr.flush()
     if errors > 0:
-        print errors, "Errors occured, xml files needs fixing"
+        print("%d Errors occured, xml files needs fixing" % errors)
         if opt.script:
             os.system( "%s ERRORS %s" % (opt.script, args[0]) )
     elif required_updates > 0:
-        print required_updates, "updates required"
+        print("%d updates required" % required_updates)
         if opt.script:
             os.system( "%s UPDATE %s" % (opt.script, args[0]) )
     else:
-        print "No Updates available"
+        print("No Updates available")
diff --git a/elbepack/commands/chg_archive.py b/elbepack/commands/chg_archive.py
index 66c53d28..c0c148f1 100644
--- a/elbepack/commands/chg_archive.py
+++ b/elbepack/commands/chg_archive.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import sys
 import os
 
@@ -51,14 +53,14 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) != 2:
-        print "Wrong number of arguments"
+        print("Wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
     try:
         xml = etree( args[0] )
     except:
-        print "Error reading xml file!"
+        print("Error reading xml file!")
         sys.exit(20)
 
     if os.path.isdir (args[1]):
@@ -76,13 +78,13 @@ def run_command( argv ):
         arch = xml.ensure_child( "archive" )
         arch.set_text( enbase( archive ) )
     except:
-        print "Error reading archive"
+        print("Error reading archive")
         sys.exit(20)
 
     try:
         xml.write( args[0] )
     except:
-        print "Unable to write new xml file"
+        print("Unable to write new xml file")
         sys.exit(20)
 
     if os.path.isdir (args[1]):
diff --git a/elbepack/commands/chroot.py b/elbepack/commands/chroot.py
index 29e8de38..2a16d0f4 100644
--- a/elbepack/commands/chroot.py
+++ b/elbepack/commands/chroot.py
@@ -16,6 +16,7 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
 
 from optparse import OptionParser
 import sys
@@ -38,7 +39,7 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) < 1:
-        print "wrong number of arguments"
+        print("wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
@@ -46,8 +47,8 @@ def run_command( argv ):
         project = ElbeProject(args[0], override_buildtype=opt.buildtype,
                 skip_validate=opt.skip_validation, url_validation=ValidationMode.NO_CHECK)
     except ValidationError as e:
-        print str(e)
-        print "xml validation failed. Bailing out"
+        print(str(e))
+        print("xml validation failed. Bailing out")
         sys.exit(20)
 
     os.environ["LANG"] = "C"
diff --git a/elbepack/commands/control.py b/elbepack/commands/control.py
index b9e9cd3f..fa0d44ba 100755
--- a/elbepack/commands/control.py
+++ b/elbepack/commands/control.py
@@ -104,41 +104,41 @@ def run_command (argv):
     args = args[2:]
 
     if len(args) < 1:
-        print ('elbe control - no subcommand given', file=sys.stderr)
+        print("elbe control - no subcommand given", file=sys.stderr)
         ClientAction.print_actions ()
         return
 
     try:
         control = ElbeSoapClient (opt.host, opt.port, opt.user, opt.passwd, debug=opt.debug, retries=int(opt.retries))
     except socket.error as e:
-        print ("Failed to connect to Soap server %s:%s\n" % (opt.host, opt.port), file=sys.stderr)
-        print ("", file=sys.stderr)
-        print ("Check, wether the Soap Server is running inside the initvm", file=sys.stderr)
-        print ("try 'elbe initvm attach'", file=sys.stderr)
+        print("Failed to connect to Soap server %s:%s\n" % (opt.host, opt.port), file=sys.stderr)
+        print("", file=sys.stderr)
+        print("Check, wether the Soap Server is running inside the initvm", file=sys.stderr)
+        print("try 'elbe initvm attach'", file=sys.stderr)
         sys.exit(10)
     except URLError as e:
-        print ("Failed to connect to Soap server %s:%s\n" % (opt.host, opt.port), file=sys.stderr)
-        print ("", file=sys.stderr)
-        print ("Check, wether the initvm is actually running.", file=sys.stderr)
-        print ("try 'elbe initvm start'", file=sys.stderr)
+        print("Failed to connect to Soap server %s:%s\n" % (opt.host, opt.port), file=sys.stderr)
+        print("", file=sys.stderr)
+        print("Check, wether the initvm is actually running.", file=sys.stderr)
+        print("try 'elbe initvm start'", file=sys.stderr)
         sys.exit(10)
     except BadStatusLine as e:
-        print ("Failed to connect to Soap server %s:%s\n" % (opt.host, opt.port), file=sys.stderr)
-        print ("", file=sys.stderr)
-        print ("Check, wether the initvm is actually running.", file=sys.stderr)
-        print ("try 'elbe initvm start'", file=sys.stderr)
+        print("Failed to connect to Soap server %s:%s\n" % (opt.host, opt.port), file=sys.stderr)
+        print("", file=sys.stderr)
+        print("Check, wether the initvm is actually running.", file=sys.stderr)
+        print("try 'elbe initvm start'", file=sys.stderr)
         sys.exit(10)
 
     try:
         v_server = control.service.get_version ()
         if v_server != elbe_version:
-            print ("elbe v%s is used in initvm, this is not compatible with \
+            print("elbe v%s is used in initvm, this is not compatible with \
 elbe v%s that is used on this machine. Please install same \
 versions of elbe in initvm and on your machine." % (v_server, elbe_version), file=sys.stderr)
             if not (opt.ignore_version):
                 sys.exit (20)
     except AttributeError:
-        print ("the elbe installation inside the initvm doesn't provide a \
+        print("the elbe installation inside the initvm doesn't provide a \
 get_version interface. Please create a new initvm or upgrade \
 elbe inside the existing initvm.", file=sys.stderr)
         if not (opt.ignore_version):
@@ -147,7 +147,7 @@ elbe inside the existing initvm.", file=sys.stderr)
     try:
         action = ClientAction (args[0])
     except KeyError:
-        print ('elbe control - unknown subcommand', file=sys.stderr)
+        print("elbe control - unknown subcommand", file=sys.stderr)
         ClientAction.print_actions ()
         sys.exit(20)
 
@@ -156,10 +156,10 @@ elbe inside the existing initvm.", file=sys.stderr)
     try:
         action.execute (control, opt, args[1:])
     except WebFault as e:
-        print ('Server returned error:', file=sys.stderr)
-        print ('', file=sys.stderr)
+        print("Server returned error:", file=sys.stderr)
+        print("", file=sys.stderr)
         if hasattr (e.fault, 'faultstring'):
-            print (e.fault.faultstring, file=sys.stderr)
+            print(e.fault.faultstring, file=sys.stderr)
         else:
-            print (e, file=sys.stderr)
+            print(e, file=sys.stderr)
         sys.exit(5)
diff --git a/elbepack/commands/daemon.py b/elbepack/commands/daemon.py
index b670d06d..ca137675 100644
--- a/elbepack/commands/daemon.py
+++ b/elbepack/commands/daemon.py
@@ -16,6 +16,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import cherrypy
 
 from optparse import OptionParser
@@ -32,7 +34,7 @@ def run_command( argv ):
     daemons = get_daemonlist()
 
     if not daemons:
-        print 'no elbe daemons installed'
+        print("no elbe daemons installed")
 
     oparser = OptionParser(usage="usage: %prog")
     oparser.add_option( "--host", dest="host", default='0.0.0.0',
@@ -53,16 +55,16 @@ def run_command( argv ):
             if str(o) == str(d):
                 if getattr(opt,o) == True:
                     active = True
-                    print "enable", str(d)
+                    print(("enable %s" % str(d)))
                     module = "elbepack.daemons." + str(d)
                     mod = __import__(module)
                     cmdmod = sys.modules[module]
                     cherrypy.tree.graft(cmdmod.get_app(cherrypy.engine), "/"+str(d))
     if not active:
-        print 'no daemon activated, use'
+        print("no daemon activated, use")
         for d in daemons:
-            print '   --'+d
-        print 'to activate at least one daemon'
+            print(("   --%s" % d))
+        print("to activate at least one daemon")
         return
 
     cherrypy.server.unsubscribe()
diff --git a/elbepack/commands/db.py b/elbepack/commands/db.py
index d6396b6d..91bdfcf3 100644
--- a/elbepack/commands/db.py
+++ b/elbepack/commands/db.py
@@ -18,20 +18,21 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
 
 from elbepack.dbaction import DbAction
 
 def run_command (argv):
 
     if not len(argv):
-        print 'elbe db - no action given'
+        print("elbe db - no action given")
         DbAction.print_actions ()
         return
 
     try:
         DbAction (argv[0]).execute (argv[1:])
     except KeyError:
-        print 'elbe db - unknown action given'
+        print("elbe db - unknown action given")
         DbAction.print_actions ()
         return
 
diff --git a/elbepack/commands/debianize.py b/elbepack/commands/debianize.py
index 32ca7c9a..ecc36f39 100644
--- a/elbepack/commands/debianize.py
+++ b/elbepack/commands/debianize.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import os
 import sys
 
@@ -25,7 +27,7 @@ from elbepack.debianize.debianize import Debianize, DebianizeBase
 
 def run_command ( args ):
     if os.path.exists ('debian'):
-        print 'debian folder already exists, nothing to do'
+        print("debian folder already exists, nothing to do")
         sys.exit (10)
 
     try:
@@ -33,7 +35,7 @@ def run_command ( args ):
         Debianize (debianizer).run ()
         sys.exit(10)
     except KeyError:
-        print ("This creates a debinization of a source directory.")
-        print ("The software was not able to identify the current directory.")
-        print ("Please run the command from source directory")
+        print("This creates a debinization of a source directory.")
+        print("The software was not able to identify the current directory.")
+        print("Please run the command from source directory")
         sys.exit (20)
diff --git a/elbepack/commands/diff.py b/elbepack/commands/diff.py
index 0cbe7107..a5f994a8 100644
--- a/elbepack/commands/diff.py
+++ b/elbepack/commands/diff.py
@@ -16,6 +16,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import os
 import sys
 import filecmp
@@ -40,7 +42,7 @@ def walk_generated( gen_path, fix_path, exclude ):
 
         if len(files)==0:
             if not os.path.exists(fix_path+infs_root):
-                print "empty directory %s only exists in gen image" % (infs_root)
+                print("empty directory %s only exists in gen image" % (infs_root))
                 file_to_rm.append( infs_root )
         else:
             for f in files:
@@ -51,17 +53,17 @@ def walk_generated( gen_path, fix_path, exclude ):
                     if os.path.isfile(gen_fname) and os.path.isfile(fix_fname):
                         if not os.path.islink(gen_fname) and not os.path.islink(fix_fname):
                             if not filecmp.cmp(gen_fname,fix_fname,shallow=False):
-                                print "files %s and %s differ" %(gen_fname, fix_fname)
+                                print("files %s and %s differ" %(gen_fname, fix_fname))
                                 file_differ.append(os.path.join( infs_root, f ) )
                         else:
                             if not (os.readlink(gen_fname) == os.readlink(fix_fname)):
-                                print "symlinks %s and %s differ" %(gen_fname, fix_fname)
+                                print("symlinks %s and %s differ" %(gen_fname, fix_fname))
                                 file_differ.append(os.path.join( infs_root, f ) )
 
                 elif not os.path.exists(gen_fname) and os.path.exists(fix_fname):
-                    print "file %s only exists in fixed image" % (fix_fname)
+                    print("file %s only exists in fixed image" % (fix_fname))
                 elif os.path.exists(gen_fname) and not os.path.exists(fix_fname):
-                    print "file %s only exists in gen image" % (gen_fname)
+                    print("file %s only exists in gen image" % (gen_fname))
                     file_to_rm.append( os.path.join( infs_root, f ) )
 
     return file_differ, file_to_rm
@@ -85,7 +87,7 @@ def walk_fixed( gen_path, fix_path, exclude ):
 
         if len(files)==0:
             if not os.path.exists(gen_path+infs_root):
-                print "empty directory %s only exists in fix image" % (infs_root)
+                print("empty directory %s only exists in fix image" % (infs_root))
                 dir_to_create.append( infs_root.lstrip("/") )
         else:
             for f in files:
@@ -93,7 +95,7 @@ def walk_fixed( gen_path, fix_path, exclude ):
                 fix_fname = os.path.join(fix_path+infs_root, f)
 
                 if not os.path.exists(gen_fname) and os.path.exists(fix_fname):
-                    print "file %s only exists in fixed image" % (fix_fname)
+                    print("file %s only exists in fixed image" % (fix_fname))
                     file_only.append( os.path.join( infs_root, f ) )
 
     return file_only, dir_to_create
@@ -106,7 +108,7 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) != 2:
-        print "Wrong number of arguments"
+        print("Wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
@@ -120,19 +122,19 @@ def run_command( argv ):
     only, mkdir = walk_fixed( gen_rfs, fix_rfs, opt.exclude )
 
 
-    print "suggesting:"
-    print
+    print("suggesting:")
+    print()
 
     for f in rm:
-        print "<rm>%s</rm>"%f
+        print("<rm>%s</rm>"%f)
 
     for d in mkdir:
-        print "<mkdir>%s</mkdir>"%d
+        print("<mkdir>%s</mkdir>"%d)
 
-    print
+    print("")
 
     fileline=""
     for f in differ+only:
-        print "tar rf archive.tar -C %s %s"%(fix_rfs, f)
+        print("tar rf archive.tar -C %s %s"%(fix_rfs, f))
 
 
diff --git a/elbepack/commands/gen_update.py b/elbepack/commands/gen_update.py
index 9aa4a000..f0304594 100644
--- a/elbepack/commands/gen_update.py
+++ b/elbepack/commands/gen_update.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 from optparse import OptionParser
 import sys
 
@@ -58,11 +60,11 @@ def run_command( argv ):
             sys.exit(20)
 
     if len(args) == 1 and not opt.target:
-        print "No target specified"
+        print("No target specified")
         sys.exit(20)
 
     if not opt.output:
-        print "No output file specified"
+        print("No output file specified")
         sys.exit(20)
 
     if opt.buildtype:
@@ -75,22 +77,22 @@ def run_command( argv ):
                 override_buildtype=buildtype,
                 skip_validate=opt.skip_validation)
     except ValidationError as e:
-        print str(e)
-        print "xml validation failed. Bailing out"
+        print(str(e))
+        print("xml validation failed. Bailing out")
         sys.exit(20)
 
     if opt.presh_file:
         try:
             project.presh_file = open (opt.presh_file)
         except IOError as e:
-            print 'pre.sh file invalid: %s' % str (e)
+            print('pre.sh file invalid: %s' % str (e))
             sys.exit(20)
 
     if opt.postsh_file:
         try:
             project.postsh_file = open (opt.postsh_file)
         except IOError as e:
-            print 'post.sh file invalid: %s' % str (e)
+            print('post.sh file invalid: %s' % str (e))
             sys.exit(20)
 
     update_xml = None
@@ -103,11 +105,11 @@ def run_command( argv ):
                 cfg_dir = opt.cfg_dir, cmd_dir = opt.cmd_dir )
 
     except ValidationError as e:
-        print str(e)
-        print "xml validation failed. Bailing out"
+        print(str(e))
+        print("xml validation failed. Bailing out")
         sys.exit(20)
     except MissingData as e:
-        print str(e)
+        print(str(e))
         sys.exit(20)
 
     if project.postsh_file:
diff --git a/elbepack/commands/genlicence.py b/elbepack/commands/genlicence.py
index 234000f7..dfe77dc3 100644
--- a/elbepack/commands/genlicence.py
+++ b/elbepack/commands/genlicence.py
@@ -16,6 +16,7 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
 
 from optparse import OptionParser
 import sys
@@ -35,7 +36,7 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) != 1:
-        print "wrong number of arguments"
+        print("wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
diff --git a/elbepack/commands/get_archive.py b/elbepack/commands/get_archive.py
index cfba9825..ec0da856 100644
--- a/elbepack/commands/get_archive.py
+++ b/elbepack/commands/get_archive.py
@@ -18,10 +18,11 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import os
 import sys
 
-
 from base64 import standard_b64decode
 
 from elbepack.treeutils import etree
@@ -40,28 +41,28 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) != 2:
-        print "Wrong number of arguments"
+        print("Wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
     if os.path.exists( args[1] ):
-        print "archive already exists, bailing out"
+        print("archive already exists, bailing out")
         sys.exit(20)
 
     try:
         xml = etree( args[0] )
     except:
-        print "Error reading xml file!"
+        print("Error reading xml file!")
         sys.exit(20)
 
     if xml.has("archive"):
         try:
             unbase( xml.text("/archive"), args[1] )
         except:
-            print "Error writing archive"
+            print("Error writing archive")
             sys.exit(20)
     else:
-        print "no archive in this xml file."
+        print("no archive in this xml file.")
         sys.exit(20)
 
 
diff --git a/elbepack/commands/hdimg.py b/elbepack/commands/hdimg.py
index 05be1138..1f0764c1 100644
--- a/elbepack/commands/hdimg.py
+++ b/elbepack/commands/hdimg.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import sys
 
 from optparse import OptionParser
@@ -48,17 +50,17 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) != 1:
-        print "Wrong number of arguments"
+        print("Wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
     if not opt.target:
-        print "No directory specified!"
+        print("No directory specified!")
         oparser.print_help()
         sys.exit(20)
 
     if not opt.output:
-        print "No Log output"
+        print("No Log output")
         oparser.print_help()
         sys.exit(20)
 
@@ -66,7 +68,7 @@ def run_command( argv ):
         opt.grub_version = 0
 
     if opt.grub_version not in [0,199,202]:
-        print "invalid grub version"
+        print("invalid grub version")
         oparser.print_help()
         sys.exit(20)
 
@@ -75,8 +77,8 @@ def run_command( argv ):
                 xmlpath=args[0], logpath=opt.output,
                 skip_validate=opt.skip_validation )
     except ValidationError as e:
-        print str(e)
-        print "xml validation failed. Bailing out"
+        print(str(e))
+        print("xml validation failed. Bailing out")
         sys.exit(20)
 
     project.targetfs.part_target(opt.target, opt.grub_version)
diff --git a/elbepack/commands/init.py b/elbepack/commands/init.py
index fdad0246..6700d49b 100644
--- a/elbepack/commands/init.py
+++ b/elbepack/commands/init.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import os
 import sys
 import shutil
@@ -68,31 +70,31 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) == 0:
-        print "no filename specified"
+        print("no filename specified")
         oparser.print_help()
         sys.exit(20)
     elif len(args) > 1:
-        print "too many filenames specified"
+        print("too many filenames specified")
         oparser.print_help()
         sys.exit(20)
 
     if opt.devel:
         if not os.path.isdir( os.path.join (elbe_dir, "elbepack")):
-            print "Devel Mode only valid, when running from elbe checkout"
+            print("Devel Mode only valid, when running from elbe checkout")
             sys.exit(20)
 
     if not opt.skip_validation:
         validation = validate_xml (args[0])
         if len (validation) != 0:
-            print "xml validation failed. Bailing out"
+            print("xml validation failed. Bailing out")
             for i in validation:
-                print i
+                print(i)
             sys.exit(20)
 
     xml = etree( args[0] )
 
     if not xml.has( "initvm" ):
-        print "fatal error: xml missing mandatory section 'initvm'"
+        print("fatal error: xml missing mandatory section 'initvm'")
         sys.exit(20)
 
     if opt.buildtype:
@@ -126,14 +128,14 @@ def run_command( argv ):
     try:
         os.makedirs(path)
     except OSError as e:
-        print 'unable to create project directory: %s (%s)' % (path, e.strerror)
+        print("unable to create project directory: %s (%s)" % (path, e.strerror))
         sys.exit(30)
 
     out_path = os.path.join(path,".elbe-in")
     try:
         os.makedirs(out_path)
     except OSError as e:
-        print 'unable to create subdirectory: %s (%s)' % (out_path, e.strerror)
+        print("unable to create subdirectory: %s (%s)" % (out_path, e.strerror))
         sys.exit(30)
 
     d = {"elbe_version": elbe_version,
@@ -153,11 +155,11 @@ def run_command( argv ):
     try:
         copy_kinitrd(xml.node("/initvm"), out_path, defs, arch="amd64")
     except NoKinitrdException as e:
-        print "Failure to download kernel/initrd debian Package:"
-        print
-        print e.message
-        print
-        print "Check Mirror configuration"
+        print("Failure to download kernel/initrd debian Package:")
+        print("")
+        print(e.message)
+        print("")
+        print("Check Mirror configuration")
         sys.exit(20)
 
     templates = os.listdir( init_template_dir )
diff --git a/elbepack/commands/parselicence.py b/elbepack/commands/parselicence.py
index c9d215de..14fded31 100644
--- a/elbepack/commands/parselicence.py
+++ b/elbepack/commands/parselicence.py
@@ -16,6 +16,7 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
 
 from optparse import OptionParser
 from datetime import datetime
@@ -160,7 +161,7 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) != 1:
-        print "wrong number of arguments"
+        print("wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
@@ -172,7 +173,7 @@ def run_command( argv ):
     err_pkg = 0
 
     if not opt.mapping:
-        print "A mapping file is required"
+        print("A mapping file is required")
         oparser.print_help()
         sys.exit(20)
 
@@ -283,8 +284,8 @@ def run_command( argv ):
         tree.write (opt.output)
 
 
-    print "statistics:"
-    print 'num:%d mr:%d hr:%d err_pkg:%d' % (num_pkg, mr, hr, err_pkg)
+    print("statistics:")
+    print(("num:%d mr:%d hr:%d err_pkg:%d" % (num_pkg, mr, hr, err_pkg)))
 
 
 
diff --git a/elbepack/commands/pin_versions.py b/elbepack/commands/pin_versions.py
index 2b4b83b6..f8a28ca8 100644
--- a/elbepack/commands/pin_versions.py
+++ b/elbepack/commands/pin_versions.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import sys
 
 from elbepack.treeutils import etree
@@ -35,26 +37,26 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) != 1:
-        print "Wrong number of arguments"
+        print("Wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
     if not opt.skip_validation:
         validation = validate_xml (args[0])
         if len (validation) != 0:
-            print "xml validation failed. Bailing out"
+            print("xml validation failed. Bailing out")
             for i in validation:
-                print i
+                print(i)
             sys.exit(20)
 
     try:
         xml = etree( args[0] )
     except:
-        print "Error reading xml file!"
+        print("Error reading xml file!")
         sys.exit(20)
 
     if not xml.has ("fullpkgs"):
-        print "xml file does not have fullpkgs node"
+        print("xml file does not have fullpkgs node")
         sys.exit(20)
 
     plist = xml.ensure_child("/target/pkg-list")
@@ -74,6 +76,6 @@ def run_command( argv ):
     try:
         xml.write( args[0] )
     except:
-        print "Unable to write new xml file"
+        print("Unable to write new xml file")
         sys.exit(20)
 
diff --git a/elbepack/commands/pkgdiff.py b/elbepack/commands/pkgdiff.py
index 0cc27465..9e05966d 100644
--- a/elbepack/commands/pkgdiff.py
+++ b/elbepack/commands/pkgdiff.py
@@ -16,6 +16,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import os
 import sys
 
@@ -34,7 +36,7 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) != 2:
-        print "Wrong number of arguments"
+        print("Wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
@@ -79,12 +81,12 @@ def run_command( argv ):
 
     for p in list(fix_pkgs.keys()):
         if not p in list(gen_pkgs.keys()):
-            print "+<pkg>%s</pkg>" % p
+            print("+<pkg>%s</pkg>" % p)
 
     for p in list(gen_pkgs.keys()):
         if not p in list(fix_pkgs.keys()):
-            print "-<pkg>%s</pkg>" % p
+            print("-<pkg>%s</pkg>" % p)
 
     for p in list(fix_pkgs.keys()):
         if p in list(gen_pkgs.keys()) and fix_pkgs[p] != gen_pkgs[p]:
-            print "%s: Version mismatch %s != %s" % (p, fix_pkgs[p], gen_pkgs[p])
+            print("%s: Version mismatch %s != %s" % (p, fix_pkgs[p], gen_pkgs[p]))
diff --git a/elbepack/commands/remove_sign.py b/elbepack/commands/remove_sign.py
index b2b58eee..4dd06f33 100644
--- a/elbepack/commands/remove_sign.py
+++ b/elbepack/commands/remove_sign.py
@@ -20,16 +20,18 @@
 # with has to have ultimate trust level, otherwise you'll only get
 # VALID (Untrusted)!
 
+from __future__ import print_function
+
 from elbepack.gpg import unsign_file
 
 def run_command( argv ):
     if(len(argv) != 1):
-        print 'Wrong number of arguments.'
-        print 'Please pass the name of the file to unsign.'
+        print("Wrong number of arguments.")
+        print("Please pass the name of the file to unsign.")
         return
 
     fname = unsign_file( argv[0] )
     if fname:
-        print "unsigned file:", fname
+        print("unsigned file: %s" % fname)
     else:
-        print "removing signature failed"
+        print("removing signature failed")
diff --git a/elbepack/commands/setsel.py b/elbepack/commands/setsel.py
index 799116db..26f17507 100644
--- a/elbepack/commands/setsel.py
+++ b/elbepack/commands/setsel.py
@@ -18,8 +18,9 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
-import sys
+from __future__ import print_function
 
+import sys
 
 from elbepack.treeutils import etree
 from optparse import OptionParser
@@ -38,12 +39,12 @@ def parse_selections( fname ):
         sp = l.split()
 
 
-        print sp[0], sp[1]
+        print("%s %s" % (sp[0], sp[1]))
 
         if sp[1] == 'install':
             sels.append(sp[0])
 
-    print sels
+    print(sels)
     return sels
 
 
@@ -53,7 +54,7 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) != 2:
-        print "Wrong number of arguments"
+        print("Wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
diff --git a/elbepack/commands/show.py b/elbepack/commands/show.py
index 1a02155b..00df63ff 100644
--- a/elbepack/commands/show.py
+++ b/elbepack/commands/show.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import sys
 
 from elbepack.treeutils import etree
@@ -39,12 +41,12 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) == 0:
-        print "No Filename specified"
+        print("No Filename specified")
         oparser.print_help()
         sys.exit(20)
 
     if len(args) > 1:
-        print "too many filenames specified"
+        print("too many filenames specified")
         oparser.print_help()
         sys.exit(20)
 
@@ -52,39 +54,39 @@ def run_command( argv ):
         if not opt.skip_validation:
             validation = validate_xml (args[0])
             if len (validation) != 0:
-                print "xml validation failed. Bailing out"
+                print("xml validation failed. Bailing out")
                 for i in validation:
-                    print i
+                    print(i)
                 sys.exit(20)
 
         xml = etree( args[0] )
     except:
-        print "Unable to open xml File. Bailing out"
+        print("Unable to open xml File. Bailing out")
         sys.exit(20)
 
     if not xml.has("./project"):
-        print "no project description available"
+        print("no project description available")
         sys.exit(20)
 
-    print '== %s ==' %(args[0])
-    print 'Debian suite: %s' % (xml.text("./project/suite"))
+    print("== %s ==" %(args[0]))
+    print("Debian suite: %s" % (xml.text("./project/suite")))
     for s in xml.text("./project/description").splitlines():
-        print '%s' % s.strip()
+        print("%s" % s.strip())
     if opt.verbose:
-        print 'root password: %s' % xml.text("./target/passwd")
-        print 'primary_mirror: %s://%s%s' %(
+        print("root password: %s" % xml.text("./target/passwd"))
+        print("primary_mirror: %s://%s%s" % (
               xml.text("./project/mirror/primary_proto"),
               xml.text("./project/mirror/primary_host"),
-              xml.text("./project/mirror/primary_path"))
+              xml.text("./project/mirror/primary_path")))
         if xml.has("./project/mirror/url-list"):
-            print 'additional mirrors:'
+            print("additional mirrors:")
             for url in xml.node("./project/mirror/url-list"):
                 if url.has("binary"):
-                    print '    deb %s' % url.text("binary").strip()
+                    print("    deb %s" % url.text("binary").strip())
                 if url.has("source"):
-                    print '    deb-src %s' % url.text("source").strip()
-        print 'packages:'
+                    print("    deb-src %s" % url.text("source").strip())
+        print("packages:")
         for pkg in xml.node("./target/pkg-list"):
-            print '    %s' % pkg.et.text
-        print 'skip package validation: %s' % xml.has("./project/noauth")
-        print 'archive embedded?        %s' % xml.has("./archive")
+            print("    %s" % pkg.et.text)
+        print("skip package validation: %s" % xml.has("./project/noauth"))
+        print("archive embedded?        %s" % xml.has("./archive"))
diff --git a/elbepack/commands/sign.py b/elbepack/commands/sign.py
index b87c9849..4047352b 100644
--- a/elbepack/commands/sign.py
+++ b/elbepack/commands/sign.py
@@ -16,12 +16,14 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 from elbepack.gpg import sign_file
 
 def run_command( argv ):
     if(len(argv) != 2):
-        print 'Wrong number of arguments.'
-        print 'Please pass the name of the file to sign and a valid gnupg fingerprint.'
+        print("Wrong number of arguments.")
+        print("Please pass the name of the file to sign and a valid gnupg fingerprint.")
         return
     else:
         sign_file( argv[0], argv[1])
diff --git a/elbepack/commands/validate.py b/elbepack/commands/validate.py
index 99a6368b..98596e4a 100644
--- a/elbepack/commands/validate.py
+++ b/elbepack/commands/validate.py
@@ -16,6 +16,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import sys
 import os
 from optparse import OptionParser
@@ -35,22 +37,22 @@ def run_command( argv ):
         sys.exit(20)
 
     if not os.path.exists(args[2]):
-        print ("%s - file not found" % args[2])
+        print("%s - file not found" % args[2])
         oparser.print_help()
         sys.exit(20)
 
     validation = validate_xml (args[2])
     if len (validation):
-        print "validation failed"
+        print("validation failed")
         for i in validation:
-            print i
+            print(i)
         sys.exit(20)
 
     if opt.validate_urls:
         try:
             xml = ElbeXML(args[2], url_validation=ValidationMode.CHECK_ALL)
         except ValidationError as e:
-            print e
+            print(e)
             sys.exit(20)
 
     sys.exit (0)
diff --git a/elbepack/commands/xsdtoasciidoc.py b/elbepack/commands/xsdtoasciidoc.py
index c64e11c4..ec3e172e 100644
--- a/elbepack/commands/xsdtoasciidoc.py
+++ b/elbepack/commands/xsdtoasciidoc.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import sys
 
 from elbepack.treeutils import etree
@@ -36,14 +38,14 @@ def run_command( argv ):
     (opt,args) = oparser.parse_args(argv)
 
     if len(args) != 1:
-        print "Wrong number of arguments"
+        print("Wrong number of arguments")
         oparser.print_help()
         sys.exit(20)
 
     xml = etree( args[0] )
 
     if not opt.out:
-        print 'output is mandatory'
+        print("--output is mandatory")
         sys.exit(20)
 
     d = {"opt": opt,
diff --git a/elbepack/db.py b/elbepack/db.py
index fa322a2e..6edfd0a1 100644
--- a/elbepack/db.py
+++ b/elbepack/db.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 try:
     from urllib.parse import quote
 except ImportError:
@@ -977,7 +979,7 @@ class ElbeDB(object):
             try:
                 os.makedirs (cls.db_path)
             except OSError as e:
-                print e
+                print(str(e))
                 return
 
         db = ElbeDB()
@@ -985,7 +987,7 @@ class ElbeDB(object):
         try:
             db.add_user(name, fullname, password, email, admin)
         except ElbeDBError as e:
-            print e
+            print(str(e))
 
 
 class User(Base):
diff --git a/elbepack/dbaction.py b/elbepack/dbaction.py
index 92515c17..52dee742 100644
--- a/elbepack/dbaction.py
+++ b/elbepack/dbaction.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import sys
 
 from optparse import OptionParser
@@ -35,9 +37,9 @@ class DbAction(object):
 
     @classmethod
     def print_actions(cls):
-        print 'available actions are:'
+        print("available actions are:")
         for a in cls.actiondict:
-            print '   ' + a
+            print("   %s" % a)
 
     def __new__(cls, node):
         action = cls.actiondict[node]
@@ -85,7 +87,7 @@ class AddUserAction(DbAction):
         (opt, arg) = oparser.parse_args (args)
 
         if len(arg) != 1:
-            print "wrong number of arguments"
+            print("wrong number of arguments")
             oparser.print_help()
             return
 
@@ -115,13 +117,13 @@ class DelUserAction(DbAction):
         (opt, arg) = oparser.parse_args (args)
 
         if len(arg) != 1:
-            print "usage: elbe db del_user <userid>"
+            print("usage: elbe db del_user <userid>")
             return
 
         try:
             userid = int(arg[0])
         except:
-            print "userid must be an integer"
+            print("userid must be an integer")
             return
 
         db = ElbeDB()
@@ -131,18 +133,18 @@ class DelUserAction(DbAction):
         if projects:
             if not opt.quiet:
                 if opt.delete_projects:
-                    print "removing projects owned by the deleted user:"
+                    print("removing projects owned by the deleted user:")
                 else:
-                    print "keeping projects owned by the deleted user:"
+                    print("keeping projects owned by the deleted user:")
 
         for p in projects:
             if not opt.quiet:
-                print p.builddir + ":", p.name, "[", p.version, "]", p.edit
+                print("%s: %s [%s] %s" % (p.builddir, p.name, p.version, p.edit))
             if opt.delete_projects:
                 try:
                     db.del_project( p.builddir )
                 except ElbeDBError as e:
-                    print "  ==> ", e
+                    print("  ==> %s " % str(e))
 
 DbAction.register(DelUserAction)
 
@@ -158,7 +160,7 @@ class ListProjectsAction(DbAction):
         projects = db.list_projects ()
 
         for p in projects:
-            print p.builddir+":", p.name, "[", p.version, "]", p.edit
+            print("%s: %s [%s] %s" % (p.builddir, p.name, p.version, p.edit))
 
 DbAction.register(ListProjectsAction)
 
@@ -174,7 +176,7 @@ class ListUsersAction(DbAction):
         users = db.list_users ()
 
         for u in users:
-            print u.name+":", u.fullname, "<"+u.email+">"
+            print("%s: %s <%s>" % (u.name, u.fullname, u.email))
 
 DbAction.register(ListUsersAction)
 
@@ -211,7 +213,7 @@ class DeleteProjectAction(DbAction):
 
     def execute(self, args):
         if len (args) != 1:
-            print "usage: elbe db del_project <project_dir>"
+            print("usage: elbe db del_project <project_dir>")
             return
 
         db = ElbeDB()
@@ -228,7 +230,7 @@ class SetXmlAction(DbAction):
 
     def execute(self, args):
         if len (args) != 2:
-            print "usage: elbe db set_xml <project_dir> <xml>"
+            print("usage: elbe db set_xml <project_dir> <xml>")
             return
 
         db = ElbeDB()
@@ -246,7 +248,7 @@ class BuildAction(DbAction):
 
     def execute(self, args):
         if len (args) != 1:
-            print "usage: elbe db build <project_dir>"
+            print("usage: elbe db build <project_dir>")
             return
 
         db = ElbeDB()
@@ -259,7 +261,7 @@ class BuildAction(DbAction):
         except Exception as e:
             db.update_project_files( ep )
             db.reset_busy( args[0], "build_failed" )
-            print e
+            print(str(e))
             return
         db.reset_busy( args[0], "build_done" )
 
@@ -275,16 +277,16 @@ class GetFilesAction(DbAction):
 
     def execute(self, args):
         if len (args) != 1:
-            print "usage: elbe db get_files <project_dir>"
+            print("usage: elbe db get_files <project_dir>")
             return
 
         db = ElbeDB()
         files = db.get_project_files (args[0])
         for f in files:
             if f.description:
-                print "%-40s  %s" % (f.name, f.description)
+                print("%-40s  %s" % (f.name, f.description))
             else:
-                print f.name
+                print(f.name)
 
 DbAction.register(GetFilesAction)
 
@@ -305,7 +307,7 @@ class ResetProjectAction(DbAction):
         (opt, arg) = oparser.parse_args (args)
 
         if len(arg) != 1:
-            print "wrong number of arguments"
+            print("wrong number of arguments")
             oparser.print_help()
             return
 
@@ -324,7 +326,7 @@ class SetProjectVersionAction(DbAction):
 
     def execute(self, args):
         if len(args) != 2:
-            print "usage: elbe db set_project_version <project_dir> <version>"
+            print("usage: elbe db set_project_version <project_dir> <version>")
             return
 
         db = ElbeDB()
@@ -342,7 +344,7 @@ class ListVersionsAction(DbAction):
 
     def execute(self, args):
         if len(args) != 1:
-            print "usage: elbe db list_versions <project_dir>"
+            print("usage: elbe db list_versions <project_dir>")
             return
 
         db = ElbeDB()
@@ -350,9 +352,9 @@ class ListVersionsAction(DbAction):
 
         for v in versions:
             if v.description:
-                print v.version + ": " + v.description
+                print("%s: %s" % (v.version, v.description))
             else:
-                print v.version
+                print(v.version)
 
 DbAction.register(ListVersionsAction)
 
@@ -371,7 +373,7 @@ class SaveVersionAction(DbAction):
         (opt, arg) = oparser.parse_args (args)
 
         if len(arg) != 1:
-            print "wrong number of arguments"
+            print("wrong number of arguments")
             oparser.print_help()
             return
 
@@ -390,7 +392,7 @@ class DelVersionAction(DbAction):
 
     def execute(self, args):
         if len(args) != 2:
-            print "usage: elbe db del_version <project_dir> <version>"
+            print("usage: elbe db del_version <project_dir> <version>")
             return
 
         db = ElbeDB()
@@ -408,7 +410,7 @@ class PrintVersionXMLAction(DbAction):
 
     def execute(self, args):
         if len(args) != 2:
-            print "usage: elbe db print_version_xml <project_dir> <version>"
+            print("usage: elbe db print_version_xml <project_dir> <version>")
             return
 
         db = ElbeDB()
diff --git a/elbepack/finetuning.py b/elbepack/finetuning.py
index 64bfec81..8166dd32 100644
--- a/elbepack/finetuning.py
+++ b/elbepack/finetuning.py
@@ -16,6 +16,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import os
 import gpgme
 
@@ -397,6 +399,6 @@ def do_finetuning(xml, log, buildenv, target):
             action = FinetuningAction( i )
             action.execute(log, buildenv, target)
         except KeyError:
-            print "Unimplemented finetuning action " + i.et.tag
+            print("Unimplemented finetuning action '%s'" % (i.et.tag))
         except CommandError:
             log.printo( "Finetuning Error, trying to continue anyways" )
diff --git a/elbepack/gpg.py b/elbepack/gpg.py
index 89b9077f..0ea42be9 100644
--- a/elbepack/gpg.py
+++ b/elbepack/gpg.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import gpgme
 import os
 
@@ -67,46 +69,46 @@ def check_signature(ctx, sig):
     status = OverallStatus()
 
     if sig.summary & gpgme.SIGSUM_KEY_MISSING:
-        print 'Signature with unknown key: %s' % sig.fpr
+        print("Signature with unknown key: %s" % sig.fpr)
         status.key_missing = True
         return status
 
     # there should be a key
     key = ctx.get_key(sig.fpr)
-    print '%s <%s> (%s):' % (key.uids[0].name, key.uids[0].email, sig.fpr),
+    print("%s <%s> (%s):" % (key.uids[0].name, key.uids[0].email, sig.fpr))
     if sig.summary & gpgme.SIGSUM_VALID == gpgme.SIGSUM_VALID:
         # signature fully valid and trusted
-        print 'VALID (Trusted)'
+        print("VALID (Trusted)")
         return status
 
     # print detailed status in case it's not fully valid and trusted
     if sig.summary == 0:
         # Signature is valid, but the key is not ultimately trusted,
         # see: http://www.gossamer-threads.com/lists/gnupg/users/52350
-        print 'VALID (Untrusted).',
+        print("VALID (Untrusted).")
     if sig.summary & gpgme.SIGSUM_SIG_EXPIRED == gpgme.SIGSUM_SIG_EXPIRED:
-        print 'SIGNATURE EXPIRED!',
+        print("SIGNATURE EXPIRED!")
         status.sig_expired = True
     if sig.summary & gpgme.SIGSUM_KEY_EXPIRED == gpgme.SIGSUM_KEY_EXPIRED:
-        print 'KEY EXPIRED!',
+        print("KEY EXPIRED!")
         status.key_expired = True
     if sig.summary & gpgme.SIGSUM_KEY_REVOKED == gpgme.SIGSUM_KEY_REVOKED:
-        print 'KEY REVOKED!',
+        print("KEY REVOKED!")
         status.key_revoked = True
     if sig.summary & gpgme.SIGSUM_RED == gpgme.SIGSUM_RED:
-        print 'INVALID SIGNATURE!',
+        print("INVALID SIGNATURE!")
         status.invalid = True
     if sig.summary & gpgme.SIGSUM_CRL_MISSING == gpgme.SIGSUM_CRL_MISSING:
-        print 'CRL MISSING!',
+        print("CRL MISSING!")
         status.gpgme_error = True
     if sig.summary & gpgme.SIGSUM_CRL_TOO_OLD == gpgme.SIGSUM_CRL_TOO_OLD:
-        print 'CRL TOO OLD!',
+        print("CRL TOO OLD!")
         status.gpgme_error = True
     if sig.summary & gpgme.SIGSUM_BAD_POLICY == gpgme.SIGSUM_BAD_POLICY:
-        print 'UNMET POLICY REQUIREMENT!',
+        print("UNMET POLICY REQUIREMENT!")
         status.gpgme_error = True
     if sig.summary & gpgme.SIGSUM_SYS_ERROR == gpgme.SIGSUM_SYS_ERROR:
-        print 'SYSTEM ERROR!',
+        print("SYSTEM ERROR!'")
         status.gpgme_error = True
 
     return status
@@ -115,7 +117,7 @@ def check_signature(ctx, sig):
 def unsign_file(fname):
     # check for .gpg extension and create an output filename without it
     if len(fname) <= 4 or fname[len(fname)-4:] != '.gpg':
-        print 'The input file needs a .gpg extension'
+        print("The input file needs a .gpg extension")
         return None
 
     outfilename = fname[:len(fname)-4]
@@ -143,9 +145,9 @@ def unsign_file(fname):
         return outfilename
 
     except IOError as ex:
-        print ex.message
+        print(ex.message)
     except Exception as ex:
-        print 'Error checking the file %s: %s' % (fname, ex.message)
+        print("Error checking the file %s: %s" % (fname, ex.message))
 
     return None
 
@@ -158,7 +160,7 @@ def sign (infile, outfile, fingerprint):
     try:
         key = ctx.get_key(fingerprint)
     except gpgme.GpgmeError as ex:
-        print 'no key with fingerprint %s: %s' % (fingerprint, ex.message)
+        print("no key with fingerprint %s: %s" % (fingerprint, ex.message))
         pass
 
     ctx.signers = [key]
@@ -167,7 +169,7 @@ def sign (infile, outfile, fingerprint):
     try:
         ctx.sign(infile, outfile, gpgme.SIG_MODE_NORMAL)
     except Exception as ex:
-        print 'Error signing file %s' % ex.message
+        print("Error signing file %s" % ex.message)
         pass
 
 
@@ -179,7 +181,7 @@ def sign_file(fname, fingerprint):
             with open(outfilename, 'w') as outfile:
                 sign (infile, outfile, fingerprint)
     except Exception as ex:
-        print 'Error signing file %s' % ex.message
+        print("Error signing file %s" % ex.message)
         pass
 
 
@@ -208,6 +210,6 @@ def export_key (fingerprint, outfile):
     try:
         ctx.export(fingerprint, outfile)
     except Exception as ex:
-        print 'Error exporting key %s' % (fingerprint)
+        print("Error exporting key %s" % (fingerprint))
 
     return '/var/cache/elbe/gnupg/pubring.gpg'
diff --git a/elbepack/hdimg.py b/elbepack/hdimg.py
index 872b0ded..aca04208 100644
--- a/elbepack/hdimg.py
+++ b/elbepack/hdimg.py
@@ -16,6 +16,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import os
 from string import digits
 
@@ -177,7 +179,7 @@ class grubinstaller_base( object ):
         self.boot = None
 
     def set_boot_entry( self, entry ):
-        print "setting boot entry"
+        print("setting boot entry")
         self.boot = entry
 
     def set_root_entry( self, entry ):
@@ -431,7 +433,7 @@ def add_binary_blob( outf, hd, target ):
         # use file from target/ dir if binary path starts with /
         if (binary.et.text[0] == '/'):
             bf = os.path.join(target, 'target', binary.et.text[1:])
-            print bf
+            print(bf)
         # else use file from /var/cache/elbe/<uuid> project dir
         else:
             bf = os.path.join(target, binary.et.text)
diff --git a/elbepack/pkgutils.py b/elbepack/pkgutils.py
index e8288941..88c7c8b7 100644
--- a/elbepack/pkgutils.py
+++ b/elbepack/pkgutils.py
@@ -16,13 +16,20 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
 
+# different module names in python 2 and 3
+try:
+    import urllib.request
+    urlopen = urllib.request.urlopen
+except ImportError:
+    import urllib2
+    urlopen = urllib2.urlopen
 
 import os
+import hashlib
 
 from tempfile import mkdtemp
-import urllib2
-import hashlib
 
 from elbepack.shellhelper import CommandError, system
 
@@ -31,10 +38,10 @@ try:
     from apt_pkg import TagFile
     virtapt_imported = True
 except ImportError:
-    print "WARNING - python-apt not available: if there are multiple versions of"
-    print " elbe-bootstrap packages on the mirror(s) elbe selects the first package it"
-    print " has found. There is no guarantee that the latest package is used."
-    print " To ensure this, the python-apt package needs to be installed."
+    print("WARNING - python-apt not available: if there are multiple versions of")
+    print(" elbe-bootstrap packages on the mirror(s) elbe selects the first package it")
+    print(" has found. There is no guarantee that the latest package is used.")
+    print(" To ensure this, the python-apt package needs to be installed.")
     virtapt_imported = False
 
 
@@ -213,10 +220,10 @@ def copy_kinitrd( prj, target_dir, defs, arch="default" ):
             if m.hexdigest() != sha1:
                 raise NoKinitrdException ('elbe-bootstrap failed to verify !!!')
         else:
-            print "-----------------------------------------------------"
-            print "WARNING:"
-            print "Using untrusted elbe-bootstrap"
-            print "-----------------------------------------------------"
+            print("-----------------------------------------------------")
+            print("WARNING:")
+            print("Using untrusted elbe-bootstrap")
+            print("-----------------------------------------------------")
 
 
         try:
diff --git a/elbepack/templates.py b/elbepack/templates.py
index 9bbca711..1e552058 100644
--- a/elbepack/templates.py
+++ b/elbepack/templates.py
@@ -16,6 +16,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import os
 
 from elbepack.treeutils import etree
@@ -34,7 +36,7 @@ def template(fname, d, linebreak=False):
         else:
             return Template(filename=fname).render(**d)
     except:
-        print exceptions.text_error_template().render()
+        print(exceptions.text_error_template().render())
         raise
 
 def write_template( outname, fname, d, linebreak=False ):
diff --git a/elbepack/updated.py b/elbepack/updated.py
index 5e5dc9c2..d984595d 100644
--- a/elbepack/updated.py
+++ b/elbepack/updated.py
@@ -19,6 +19,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import apt
 import apt_pkg
 import errno
@@ -92,15 +94,15 @@ class UpdateStatus:
             try:
                 self.monitor.service.msg (msg)
             except:
-                print "logging to monitor failed, removing monitor connection"
+                print("logging to monitor failed, removing monitor connection")
                 self.monitor = None
-                print msg
+                print(msg)
         try:
             syslog (msg)
         except:
-            print msg
+            print(msg)
         if self.verbose:
-            print msg
+            print(msg)
 
 class UpdateApplication (Application):
     def __init__(self, *args, **kargs):
@@ -133,8 +135,8 @@ class UpdateService (ServiceBase):
 
         try:
             apply_update (fname, self.app.status)
-            print Exception, err
         except Exception as err:
+            print("%s" % str(err))
             self.app.status.set_finished ('error')
             return "apply snapshot %s failed" % version
 
diff --git a/elbepack/updatepkg.py b/elbepack/updatepkg.py
index 409c3959..cb3afeba 100644
--- a/elbepack/updatepkg.py
+++ b/elbepack/updatepkg.py
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import os
 
 from shutil import rmtree, copyfile, copytree
@@ -78,7 +80,7 @@ def gen_update_pkg (project, xml_filename, upd_filename,
             xmlindex[name] = p
 
             if not name in instindex:
-                print "package removed: " + name
+                print("package removed: %s" % name)
                 continue
 
             ipkg = instindex[name]
@@ -87,22 +89,22 @@ def gen_update_pkg (project, xml_filename, upd_filename,
             pfname = ipkg.installed_deb
 
             if comp == 0:
-                print "package ok: " + name + "-" + ipkg.installed_version
+                print("package ok: %s-%s" % (name, ipkg.installed_version))
                 if debug:
                     fnamelist.append( pfname )
                 continue
 
             if comp > 0:
-                print "package upgrade: " + pfname
+                print("package upgrade: %s" % pfname)
                 fnamelist.append( pfname )
             else:
-                print "package downgrade: " + name + "-" + ipkg.installed_version
+                print("package downgrade: %s-%s" % (name, ipkg.installed_version))
 
         for p in instpkgs:
             if p.name in xmlindex:
                 continue
 
-            print "package new installed " + p.name
+            print("package %s newly installed" % p.name)
             pfname = p.installed_deb
             fnamelist.append( pfname )
 
diff --git a/elbepack/virtapt.py b/elbepack/virtapt.py
index fafa8c85..808505df 100644
--- a/elbepack/virtapt.py
+++ b/elbepack/virtapt.py
@@ -16,6 +16,8 @@
 # You should have received a copy of the GNU General Public License
 # along with ELBE.  If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import print_function
+
 import apt_pkg
 import os
 import sys
@@ -82,7 +84,6 @@ class VirtApt:
         pass
 
     def pulse (self, obj):
-        #print "updating in progress", obj
         return True
 
     def mkdir_p (self, newdir, mode=0o755):
@@ -120,8 +121,8 @@ class VirtApt:
     def setup_gpg (self):
         ring_path = self.projectpath + "/etc/apt/trusted.gpg"
         if not os.path.isdir ("/etc/apt/trusted.gpg.d"):
-            print ("/etc/apt/trusted.gpg.d doesn't exist")
-            print ("apt-get install debian-archive-keyring may fix this problem")
+            print("/etc/apt/trusted.gpg.d doesn't exist")
+            print("apt-get install debian-archive-keyring may fix this problem")
             sys.exit (20)
 
         system ('cp /etc/apt/trusted.gpg "%s"' % ring_path )
@@ -136,13 +137,13 @@ class VirtApt:
 
         trustkeys = os.listdir("/etc/apt/trusted.gpg.d")
         for key in trustkeys:
-            print "Import %s: " % key
+            print("Import %s: " % key)
             try:
                 system ('gpg %s --import "%s"' % (
                     gpg_options,
                     os.path.join ("/etc/apt/trusted.gpg.d", key)))
             except CommandError as e:
-                print "adding elbe-pubkey to keyring failed"
+                print("adding elbe-pubkey to keyring failed")
 
     def add_pubkey_url (self, url):
         ring_path = self.projectpath + "/etc/apt/trusted.gpg"
diff --git a/elbepack/xmldefaults.py b/elbepack/xmldefaults.py
index 966798d6..48a1a19b 100644
--- a/elbepack/xmldefaults.py
+++ b/elbepack/xmldefaults.py
@@ -1,4 +1,6 @@
 
+from __future__ import print_function
+
 import random
 import string
 import sys
@@ -186,9 +188,12 @@ class ElbeDefaults(object):
     def __init__(self, build_type):
 
         if build_type not in defaults:
-            print "Please specify a valid buildtype."
-            print "Valid buildtypes:"
-            print defaults.keys()
+            print("Please specify a valid buildtype.")
+            print("Valid buildtypes:")
+            print(defaults.keys())
+            print("Please specify a valid buildtype.")
+            print("Valid buildtypes:")
+            print(list(defaults.keys()))
             sys.exit(20)
 
         self.defaults = defaults[build_type]
diff --git a/test/modify_rfs.py b/test/modify_rfs.py
index a1934863..d94121d3 100644
--- a/test/modify_rfs.py
+++ b/test/modify_rfs.py
@@ -1,3 +1,5 @@
+from __future__ import print_function
+
 from elbepack import rfs
 from elbepack import elbexml
 from elbepack import filesystem
@@ -10,7 +12,7 @@ class AsyncStatus:
     def __init__ (self):
         pass
     def status (self, msg):
-        print "current status: " + msg
+        print("current status: " + msg)
 
 xml = elbexml.ElbeXML('source.xml')
 log = asciidoclog.ASCIIDocLog( "update.log" )
@@ -22,11 +24,11 @@ from elbepack.rpcaptcache import get_rpcaptcache
 # Use "with br" to mount the necessary bind mounts
 with br:
     cc = get_rpcaptcache(br.rfs, "aptcache.log", "armel", notifier=status)
-    print "SECTIONS: ", cc.get_sections()
+    print("SECTIONS: ", cc.get_sections())
     time.sleep (2)
-    print "SHELLS: ", cc.get_pkglist('shells')
+    print("SHELLS: ", cc.get_pkglist('shells'))
     time.sleep (2)
-    print "QUICKPLOT: ", cc.get_dependencies('quickplot')
+    print("QUICKPLOT: ", cc.get_dependencies('quickplot'))
     time.sleep (2)
     cc.mark_install('quickplot','2')
     cc.commit()
diff --git a/test/updated.py b/test/updated.py
index 2a132182..692b1cc9 100755
--- a/test/updated.py
+++ b/test/updated.py
@@ -1,5 +1,7 @@
 #!/usr/bin/env python2
 
+from __future__ import print_function
+
 import soaplib
 import sys
 import threading
@@ -16,7 +18,7 @@ from wsgiref.simple_server import make_server
 class MonitorService (ServiceBase):
     @rpc (String)
     def msg (self, m):
-        print m
+        print(m)
 
 class MonitorThread (threading.Thread):
     def __init__ (self, port):
@@ -25,7 +27,7 @@ class MonitorThread (threading.Thread):
         self.server = None
 
     def run (self):
-        print "monitor ready :%s" % (self.port)
+        print("monitor ready :%s" % (self.port))
         application = Application([MonitorService], 'monitor',
                                   in_protocol=Soap11(validator='lxml'),
                                   out_protocol=Soap11())
@@ -89,7 +91,7 @@ wsdl = "http://" + target + ":" + port + "/?wsdl"
 try:
     control = Client (wsdl)
 except:
-    print wsdl, "not reachable"
+    print(wsdl, "not reachable")
     sys.exit (1)
 
 monitor = MonitorThread (monitorport)
@@ -101,7 +103,7 @@ try:
     monitor_wsdl = "http://" + host + ":" + monitorport + "/?wsdl"
     control.service.register_monitor (monitor_wsdl)
 except:
-    print "monitor couldn't be registered (port already in use?)"
+    print("monitor couldn't be registered (port already in use?)")
     shutdown (monitor)
 
 while 1:
@@ -110,20 +112,20 @@ while 1:
     try:
         snapshots = s.split (',')
 
-        print "select snapshot:"
+        print("select snapshot:")
         i = 0
         for s in snapshots:
             if s:
-                print "  [%d] %s" % (i, s)
+                print("  [%d] %s" % (i, s))
             i = i + 1
     except:
-        print "no snapshots available"
+        print("no snapshots available")
 
     sys.stdout.write ("% ")
     sys.stdout.flush ()
 
     try:
         n = int (input ())
-        print control.service.apply_snapshot (snapshots [n])
+        print(control.service.apply_snapshot (snapshots [n]))
     except:
         shutdown (monitor)
-- 
2.15.1




More information about the elbe-devel mailing list