将用户定义的模块导入 pydev
import user defined modules into pydev
我是 Eclipse neon + Pydev 组合的初学者。
尝试将我创建的 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
两个模块都在同一个项目和工作区中。
小编说,"unresolved import fibo"
为什么在 pydev/eclipse 中无法识别模块 fibo?
我的最终目标是 运行 单击按钮后的模块。如果有更直接的方法可以做到这一点,我想知道。
好的,所以,根据您的屏幕截图,您的结构实际上是:
/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 在同一行中获得将为您编写导入的建议(或者您可以执行代码完成,这也会自动为您编写导入)。
我是 Eclipse neon + Pydev 组合的初学者。 尝试将我创建的 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
两个模块都在同一个项目和工作区中。 小编说,"unresolved import fibo" 为什么在 pydev/eclipse 中无法识别模块 fibo?
我的最终目标是 运行 单击按钮后的模块。如果有更直接的方法可以做到这一点,我想知道。
好的,所以,根据您的屏幕截图,您的结构实际上是:
/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 在同一行中获得将为您编写导入的建议(或者您可以执行代码完成,这也会自动为您编写导入)。