My python code won't run outside of my IDE
The following code runs fine in my IDE (PyScripter), however it won't run outside of it. When I go into computer then python26 and double click the file (a .pyw in this case) it fails to run. I have no idea why it's doing this, can anyone please shed some light?
This is in windows 7 BTW.
My code:
#!/usr/bin/env python
import matplotlib
from mpl_toolkits.mplot3d import axes3d,Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
from numpy import arange, sin, pi
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter
import Tkinter
import sys
class E(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.protocol("WM_DELETE_WINDOW", self.dest)
self.main()
def main(self):
self.fig = plt.figure()
self.fig = plt.figure(figsize=(4,4))
ax = Axes3D(self.fig)
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = 10 * np.outer(np.cos(u), np.sin(v))
y = 10 * np.outer(np.sin(u), np.sin(v))
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))
t = ax.plot_surface(x, y, z, rstride=4, cstride=4,color='lightgreen',linewidth=1)
self.frame = Tkinter.Frame(self)
self.frame.pack(padx=15,pady=15)
self.canvas = FigureCanvasTkAgg(self.fig, master=self.frame)
self.canvas.get_tk_widget().pack(side='top', fill='both')
self.canvas._tkcanvas.pack(side='top', fill='both', expand=1)
self.btn = Tkinter.Button(self,text='button',command=self.alt)
self.btn.pack()
def alt (self):
print 9
def dest(self):
self.destroy()
sys.exit()
if __name__ == "__main__":
app = E(None)
app.title('Embedding in TK')
app.mainloop()
EDIT:
I tried to import the module in the command line and got the following warning.
Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python开发者_Python百科26\lib\site-packages\matplotlib\__init__.py", line 129, in <module>
from rcsetup import defaultParams, validate_backend, validate_toolbar
File "C:\Python26\lib\site-packages\matplotlib\rcsetup.py", line 19, in <module>
from matplotlib.colors import is_color_like
File "C:\Python26\lib\site-packages\matplotlib\colors.py", line 54, in <module>
import matplotlib.cbook as cbook
File "C:\Python26\lib\site-packages\matplotlib\cbook.py", line 168, in <module>
class Scheduler(threading.Thread):
AttributeError: 'module' object has no attribute 'Thread'
>>>
EDIT(2)
I tried what McSmooth said and got the following output.
Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import threading
>>> print threading.__file__
threading.pyc
>>> threading.Thread
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'Thread'
>>>
unless you've been messing around with your standard library, it seems that you have a file named threading.py
somewhere on your python path that is replacing the standard one. Try:
>>>import threading
>>>print threading.__file__
and make sure that it's the one in your python lib directory (it should beC:\python26\lib
). If it's not the right file that's getting imported, then you'll have to rename the fake one to something else. If it is the right file, then try:
>>>threading.Thread
and see if that throws an exception in the REPL.
update
That's weird. on my system, it gives the name of the source file. either save as a file or run at the command line the following code to find it.
import os.path as op
import sys
files = (op.join(path, 'threading.py') for path in sys.path)
print filter(op.exists, files)
You most likely need to adjust your PYTHONPATH; this is a list of directories Python uses to find modules. See also How to add to the pythonpath in windows 7? .
From Windows command shell get into python shell by typing python binary (you should get something like '>>>'). Here type import matplotlib (your package name which you are trying to import), if you get an error like ImportError: No module named matplotlib that means as Matthew F suggested you need to update your PYTHONPATH (either in User specific env or in Windows System env) otherwise post the error message that you are getting while running the script.
精彩评论