打包Python代码后出现NameError

打包Python代码后出现NameError,python,python-module,Python,Python Module,我已经使用IPython有一段时间了,而不必打包代码。我浏览了以下几页,为我的模块设置了一个目录结构,现在使用IPython启动程序 以下是我的设置要点 根foder 模块(目录) 1.1外部的.py 1.2 getdata.py import glob def funcname(): file_list = glob.glob("Data/") def other_func(): x = x + 3 driver.ipynb 我创建了一个名为modules的目录,并创

我已经使用IPython有一段时间了,而不必打包代码。我浏览了以下几页,为我的模块设置了一个目录结构,现在使用IPython启动程序

以下是我的设置要点

根foder

  • 模块(目录)

    1.1外部的.py

    1.2 getdata.py

  • import glob
    def funcname():
        file_list = glob.glob("Data/")
    
    def other_func():
        x = x + 3
    
  • driver.ipynb

  • 我创建了一个名为modules的目录,并创建了两个文件

    模块(目录)

    --external.py(包含以下内容)

    --getdata.py(包含以下内容)

    现在,我在IPython笔记本中运行以下代码

    from modules import external
    from modules.getdata import * 
    # so that I can funcname() instead of modules.getdata.funcname()
    
    other_func() # runs as expected
    funcname() # NameError global name 'glob' is not defined
    
    在IPython笔记本中运行glob.glob(“Data/”)不会显示任何错误

    如何在不重命名任何函数的情况下修复此命名空间问题?我有十几个函数,它们都有相同的问题

    编辑1:-我忘了提到我已经试过的东西

    getdata.py中的import语句

    import glob
    def funcname():
        file_list = glob.glob("Data/")
    
    def other_func():
        x = x + 3
    

    我有多个使用glob的文件。除了在每个文件中导入模块,还有其他更好的选择吗?

    getdata.py
    中添加
    import glob
    使用
    glob
    模块的地方),而不是在
    external.py

    import glob  # <--
    
    def funcname():
        file_list = glob.glob("Data/")
    
    def other_func():
        x = x + 3
    

    import glob#我想到了,会不会是慢下来的东西?我有几个文件使用glob,所以我必须在每个文件中导入它。为什么我的方式不起作用?@AbhirathMahipal,
    import
    在其他文件中不会影响其他模块的命名空间。@AbhirathMahipal,如果模块导入到某个模块中,则在另一个模块中再次导入该模块不会重新加载它,而是重用已导入的模块。@AbhirathMahipal,您可以使用打印某些内容的自定义模块进行试验。尝试在模块中导入一次,然后在模块中导入;您将看到该内容只打印一次。@AbhirathMahipal,您可以污染上次搜索的内置模块,但不推荐使用;这将使您的代码难以理解。无论如何,它在这里:
    import glob__builtins_uu.glob=glob
    将此行放入文件中,保证始终执行/导入该行。
    import glob  # <--
    
    def funcname():
        file_list = glob.glob("Data/")
    
    def other_func():
        x = x + 3