nutship
nutship

Reputation: 4934

No module named Tkinter

I have a small script in python2.7 that I want to convert into Windows executable. I use pyinstaller for this.

The script:

import sys 
import matplotlib.pyplot as plt
import matplotlib.image as mpimg


def get_inputs():
    coor = raw_input(">>>top x left: ").replace(" ", "")
    top, left = coor.split("x")
    top = int(top.strip())
    left = int(left.strip())
    return top, left 

def plot_location(top, left):
    img= mpimg.imread('nbahalfcourt.jpg')
    plt.imshow(img)
    plt.scatter(left, top)
    plt.grid()
    plt.show()

def main():
    top, left = get_inputs()
    plot_location(top, left)

if __name__ == '__main__':

    print "Input top x left coordinates (no space) eg: 44x232"

    run = True 
    while run:
        main()

Basically, the script just plots a point on a grid.

The converting process finishes successfully. When I run the .exe however I've got the ImportError (see below) even though I have no reference to Tkinter anywhere.

enter image description here

What could went wrong here?

Upvotes: 4

Views: 5320

Answers (2)

Frikster
Frikster

Reputation: 2905

I had the same issue and none of the solutions here worked. I was using Pyinstaller 3.2 (the latest version at the time) and everything was fixed (and no import statements needed) when I upgraded to the latest developer version using

pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip

This seems to indicate that at the times of writing this that all the kinks to this issue are still being worked out

EDIT: As of January 15 2017 Pyinstaller version 3.2.1 was released. I now use this and it solves this issue along with others like this and this that I could previously only solve by using the developer version. So I highly recommend upgrading to the latest version if you haven't already.

Upvotes: 3

Kevin
Kevin

Reputation: 76254

I have a feeling that matplotlib uses the Tkinter module internally, but imports it in a non-standard way. Then pyinstaller doesn't notice Tkinter is needed, and subsequently doesn't bundle it into the executable.

Try explicitly putting import Tkinter at the top of your script.

Upvotes: 5

Related Questions