Мой код Python не будет работать за пределами моей IDE - PullRequest
1 голос
/ 04 октября 2010

Следующий код прекрасно работает в моей IDE (PyScripter), однако он не будет работать вне его.Когда я захожу в компьютер, затем python26 и дважды щелкаю файл (в данном случае - .pyw), он не запускается.Я понятия не имею, почему это делает, кто-нибудь может пролить свет?

Это в Windows 7 BTW.

Мой код:

#!/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()

РЕДАКТИРОВАТЬ:

Я попытался импортировать модуль в командной строке и получил следующее предупреждение.

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:\Python26\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'
>>>

РЕДАКТИРОВАТЬ (2)

Я попробовал то, что сказал МакСмут, и получил следующий вывод.

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'
>>>

Ответы [ 3 ]

5 голосов
/ 04 октября 2010

, если вы не возились со своей стандартной библиотекой, кажется, что у вас есть файл с именем threading.py где-то в вашем пути Python, который заменяет стандартный.Попробуйте:

>>>import threading
>>>print threading.__file__

и убедитесь, что он находится в вашем каталоге Python lib (он должен быть C:\python26\lib).Если импортируется не тот файл, вам придется переименовать поддельный файл во что-то другое.Если это правильный файл, попробуйте:

>>>threading.Thread

и посмотрите, не вызывает ли это исключение в REPL.

update

Это странно.в моей системе это дает имя исходного файла.либо сохраните как файл, либо запустите в командной строке следующий код, чтобы найти его.

import os.path as op
import sys

files = (op.join(path, 'threading.py') for path in sys.path)
print filter(op.exists, files)
1 голос
/ 04 октября 2010

Из командной оболочки Windows войдите в оболочку python, набрав двоичный файл python (вы должны получить что-то вроде '>>>').Здесь введите import matplotlib (имя вашего пакета, которое вы пытаетесь импортировать), если вы получаете сообщение об ошибке типа ImportError: нет модуля с именем matplotlib , что означает, что, как сказал Мэтью F, вам нужно обновитьваш PYTHONPATH (либо в env для конкретного пользователя, либо в env системы Windows) в противном случае публикует сообщение об ошибке, которое вы получаете при запуске скрипта.

1 голос
/ 04 октября 2010

Скорее всего, вам нужно настроить PYTHONPATH ;это список каталогов, которые Python использует для поиска модулей.Смотрите также Как добавить в pythonpath в Windows 7?.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...