打包后NameError Python 代码
NameError after packaging Python code
我一直在使用 IPython 一段时间,而无需打包代码。我浏览了以下页面并为我的模块设置了目录结构,现在使用 IPython 启动程序。
https://docs.python.org/3/reference/import.html
https://docs.python.org/3/tutorial/modules.html
http://pythoncentral.io/how-to-create-a-python-package/
这是我的设置要点
根目录
模块(目录)
1.1 external.py
1.2 getdata.py
driver.ipynb
我创建了一个名为 modules 的目录并创建了两个文件。
模块(目录)
-- external.py(包含以下内容)
import glob # and many other import statements
-- getdata.py(包含以下内容)
def funcname():
file_list = glob.glob("Data/")
def other_func():
x = x + 3
现在我 运行 在 IPython notebook
中输入以下代码
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
运行 glob.glob("Data/") 在IPython笔记本中没有给出任何错误。
如何在不重命名任何函数的情况下解决此命名空间问题?我有十几个函数,它们都有同样的问题。
编辑 1:- 我忘了提及 我已经尝试过的东西
在 getdata.py
中导入语句
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
我一直在使用 IPython 一段时间,而无需打包代码。我浏览了以下页面并为我的模块设置了目录结构,现在使用 IPython 启动程序。
https://docs.python.org/3/reference/import.html
https://docs.python.org/3/tutorial/modules.html
http://pythoncentral.io/how-to-create-a-python-package/
这是我的设置要点
根目录
模块(目录)
1.1 external.py
1.2 getdata.py
driver.ipynb
我创建了一个名为 modules 的目录并创建了两个文件。
模块(目录)
-- external.py(包含以下内容)
import glob # and many other import statements
-- getdata.py(包含以下内容)
def funcname():
file_list = glob.glob("Data/")
def other_func():
x = x + 3
现在我 运行 在 IPython notebook
中输入以下代码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
运行 glob.glob("Data/") 在IPython笔记本中没有给出任何错误。
如何在不重命名任何函数的情况下解决此命名空间问题?我有十几个函数,它们都有同样的问题。
编辑 1:- 我忘了提及 我已经尝试过的东西
在 getdata.py
中导入语句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