Импортировать пользовательские модули в pydev
Я новичок в Eclipse Neon + Pydev Combo. Попытка использовать модули Python, которые я создал, в другие модули, которые я буду создавать. Для начала я собирался использовать учебную программу TKinter, изложенную здесь: http://effbot.org/tkinterbook/tkinter-hello-again.htm
В дополнение к печати заявления в ответ на щелчок мышью, я хочу запустить небольшой модуль, fibo.py
Вот мой код:
import the library
from tkinter import *
import fibo
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.button = Button(
frame, text="QUIT", fg="red", command=frame.quit
)
self.button.pack(side=LEFT)
self.hi_there = Button(frame, text="Hello",command=self.say_hi)
self.hi_there.pack(side=LEFT)
def say_hi(self):
fib(100)
print ("hi there, everyone!")
root = Tk()
app = App(root)
root.mainloop()
root.destroy() # optional; see description below
Вот fibo.py
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while b < n:
print (b, end=" ")
a, b = b, a+b
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a+b
return result
Оба модуля находятся в одном проекте и рабочей области. Редактор говорит: "неразрешенный импорт fibo" Почему модуль fibo не распознается в pydev/eclipse?
Моя конечная цель - запустить модуль при нажатии кнопки. Если есть более прямой способ сделать это, я хотел бы знать.
1 ответ
Итак, исходя из вашего скриншота, структура, которую вы имеете, на самом деле:
/project (this is the PYTHONPATH root and marked as source folder)
/project/root
/project/root/__init__.py
/project/root/nested
/project/root/nested/__init__.py
/project/root/nested/example.py
/project/root/nested/fibo.py
В этом случае ваш импорт должен быть: from root.nested import fibo
, Ваш код может работать в командной строке, но это потому, что вы добавили запись в sys.path
только во время выполнения (так что PyDev не может следить за этим).
Другой вариант будет перемещать и example.py и fibo.py в /project
,
Вы также можете использовать относительный импорт как from . import fibo
, но затем, чтобы запустить модуль как __main__
модуль, вам придется запускать модули по имени модуля (с -m
флаг) - вы можете настроить PyDev, чтобы сделать это на preferences > PyDev > Run > Launch modules with "python -m mod.name"
,
Как примечание, если вы просто напишите:
fibo
в вашем случае и дождитесь отображения ошибки неопределенной переменной, вы можете использовать Ctrl+1 в той же строке, чтобы получить предложение, которое напишет импорт для вас (или вы можете выполнить завершение кода, которое также напишет импортировать для вас автоматически).