Site Map - skip to main content

Hacker Public Radio

Your ideas, projects, opinions - podcasted.

New episodes every weekday Monday through Friday.
This page was generated by The HPR Robot at


hpr3067 :: Getting my Python3 code working in Python2

What I had to do to get my raspberry Pi PifaceCAD board working after a Debian upgrade.

<< First, < Previous, , Latest >>

Hosted by MrX on Tuesday, 2020-05-05 is flagged as Explicit and is released under a CC-BY-SA license.
Python, Programming, Linux, Raspberry Pi. (Be the first).
The show is available on the Internet Archive at: https://archive.org/details/hpr3067

Listen in ogg, spx, or mp3 format. Play now:

Duration: 00:25:26

A Little Bit of Python.

Initially based on the podcast "A Little Bit of Python", by Michael Foord, Andrew Kuchling, Steve Holden, Dr. Brett Cannon and Jesse Noller. https://www.voidspace.org.uk/python/weblog/arch_d7_2009_12_19.shtml#e1138

Now the series is open to all.

I have a raspberry Pi model B with the original Pifacecad add on board

I recently upgraded the operating system on my raspberry pi from Wheezy (Debian 7) to Jessie (Debian 8), all seemed fine till I tried to run my Python3 project. It reported that the pifacecad module wasn’t present. I tried to install the module using the standard apt-get command given in the Pifacecad documentation. It installed OK for python 2 but It would not install for python 3 as there was a dependency issue with the python-lirc library. I’m guessing the upgrade broke something.

I installed a fresh minimal installation of raspbian Stretch (Debian 9) onto a new SD card and ran the standard installation command in the Pifacecad documentation. It all installed but there was a warning about Spi which I had forgotten to enable. I enabled this using the raspi-config util and rebooted the pi.

I then tested the installation by running the sys-info.py example that is mentioned in the installation documentation that comes with the pifacecad board.

Running this example gave a warning saying that the pifacecad hardware could not be found at this point I gave up and decided instead to run my project in python 2.

Of course at first the code wouldn’t run using python 2 and I had to do a bit of digging around to find out what was going wrong.

You may find this useful in the unlikely event that you have a project written in python 3 that you want to run in python 2, it might also be useful if you’re going in the other direction.

One other thing that I briefly stumbled upon was that I believe there is a tool available that attempts to convert python 2 code to python 3 I don’t know anything about it and didn’t bother looking to see if there is a tool to go in the opposite direction which is what I needed. I’ve included a link to the tool below https://docs.python.org/2/library/2to3.html

I’ve got the two versions of code loaded into the excellent graphical diff tool meld and I’ll just briefly cover the things that I had to change.

Link to meld diff tool: https://meldmerge.org/

After some mucking about I got it partially working by installing Piface module for Python 2.7

Had to do the following changes to get the code working in Python 2.7:

    urllib.request.urlopen(url).read()

https://docs.python.org/3/library/urllib.request.html

  • Python 2 uses the urllib2 command. For Python 2 I used the following
    urllib2.urlopen(url).read()

https://docs.python.org/2/library/urllib2.html

  • hostname --all has different output on this version of Debian, now includes mac address which I did not want.

  • Getting the wifi ESSID information. I used iwconfig to get this information. The path to iwconfig command changed in this version of Debian and I now had to give the full path to get it to work.

  • Python 2 and 3 seemed to handle strings differently when converting from an array to a plain string.

  • Python 3 handles input different from python 2

  • If python 2 comes across a non numeric value it quits with an exception

    • so for python 2 I used the command
          raw_input()
    • for python 3 I used the command
          input()

Two article about incorporating future statements in Python 2
https://docs.python.org/3/library/__future__.html

https://simeonvisser.com/posts/how-does-from-future-import-work-in-python.html

Related shows about my PiFaceCAD add on board for the raspberry pi


Comments

Subscribe to the comments RSS feed.

Leave Comment

Note to Verbose Commenters
If you can't fit everything you want to say in the comment below then you really should record a response show instead.

Note to Spammers
All comments are moderated. All links are checked by humans. We strip out all html. Feel free to record a show about yourself, or your industry, or any other topic we may find interesting. We also check shows for spam :).

Provide feedback
Your Name/Handle:
Title:
Comment:
Anti Spam Question: What does the letter P in HPR stand for?
Are you a spammer?
Who is the host of this show?
What does HPR mean to you?