Импортировать пользовательские модули в 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 в той же строке, чтобы получить предложение, которое напишет импорт для вас (или вы можете выполнить завершение кода, которое также напишет импортировать для вас автоматически).

Другие вопросы по тегам