(已解决)Exec不适用于函数和变量

时间:2019-07-18 19:18:06

标签: python exec

我正在制作一个可处理.py文件的插件系统。当我使用该插件(.py文件)执行exec()并且它具有函数或变量时,会给出NameError。

  

NameError:名称'editor_nf'未定义

我已经用Google搜索了,但是没有找到任何对我有帮助的东西。

我只做过

plugin = open("plugin.py","r").read()
exec(plugin)

,plugin.py文件为:

import tkinter as tk

def editor_nf():
    enf = tk.Tk()
    enf.title("New file")
    enf.config(bg="white")
    enf.geometry("500x500")

    enf.mainloop()

def editor():
    editor = tk.Tk()
    editor.title("Website Editor")
    editor.config(bg="white")
    editor.geometry("1400x700")

    editor_nf_btn = tk.Button(editor,text="New file",bg="gray",fg="black",font="Arial",command=editor_nf)
    editor_nf_btn.grid(row=0,column=0)

    editor.mainloop()

editor()

所以我希望它可以与函数一起使用,以便人们可以创建WORKING函数。

我不希望它显示:

  

NameError:名称'editor_nf'未定义

dcg回答了,它有所帮助,但是后来我将其转换为exe,我得到了 dcg answered and it helped but then I converted it to exe and I got this

2 个答案:

答案 0 :(得分:0)

让我举一个简单的例子,说明我在评论中告诉您的内容。这是我的文件夹结构:

/sample
   - plugins/
       - __init__.py # not necessary, but maybe you want to apply some logic 
                     # before importing the plugins
       - plugin1.py
       - plugin2.py
       - plugin3.py
   - __init__.py
   - test.py

每个插件都会打印出什么插件(例如print('plugin 1'))。 test.py如下:

import os

if __name__ == '__main__':
    # load plugins
    plugins = [p for p in os.listdir('plugins') if not p.startswith('_')]
    for p in plugins:
        __import__('plugins.'+p[:-3])

输出为:

plugin 1
plugin 2
plugin 3

这意味着我已使用__import__成功导入了所有这些模块(插件)。请注意,__import__返回对导入模块的引用,因此您可以将其存储以备后用。希望对您有帮助!

答案 1 :(得分:0)

我说我用错误和内容编辑了它,但是我自己修复了它。感谢您的帮助!