将模块导入 Python 的问题
Issues with Importing Modules into Python
Python 编程新手,在导入模块时遇到问题。
我有一个主应用程序 (compare.py),其导入如下:
# import the necessary packages
from skimage.measure import structural_similarity as ssim
import matplotlib.pyplot as plt
import numpy as np
import os
import skimage
from skimage import io
from skimage import color
from epilib import mse
from epilib import compare_images
我在epilib中定义了两个函数,一个叫mse(),一个叫compare_images()。
mse() 中的代码需要 numpy。当我执行 'python compare.py' 时,我收到以下错误消息:
文件 "C:\Users\Dan\epilib.py",第 7 行,mse err = np.sum((imageA.astype("float") - imageB.astype("float" )) ** 2)
NameError: 名称 'np' 未定义
我假设因为 'import numpy as np' 在导入 epilib 之前执行,所以 numpy 库将可用于 epilib?当我在 epilib 的顶部添加 'import numpy as np' 时,问题解决了。
我认为必须将所有导入语句移至 epilib 效率不高。我希望 epilib 只是一个函数库,我可以根据需要导入各种 python 程序。
有没有办法做到这一点?
那不是 python 的工作方式,如果你想在模块中使用 numpy
库(在本例中是在 eplib 模块中),你也需要将它导入到该模块中, eplib
不会在您的 compare.py
中导入 numpy
模块。
您应该将 eplib.py
中的 numpy 导入为 -
import numpy as np
我认为效率上不会有任何问题,因为一旦 python 第一次导入模块,它会将模块缓存在 sys.modules
中,因此无论何时重新导入它(即使它在不同的模块中)只要它是相同的 python 进程,Python 就不会重新导入它,而是 return 来自 [=16= 的模块对象].
Python 编程新手,在导入模块时遇到问题。
我有一个主应用程序 (compare.py),其导入如下:
# import the necessary packages
from skimage.measure import structural_similarity as ssim
import matplotlib.pyplot as plt
import numpy as np
import os
import skimage
from skimage import io
from skimage import color
from epilib import mse
from epilib import compare_images
我在epilib中定义了两个函数,一个叫mse(),一个叫compare_images()。
mse() 中的代码需要 numpy。当我执行 'python compare.py' 时,我收到以下错误消息:
文件 "C:\Users\Dan\epilib.py",第 7 行,mse err = np.sum((imageA.astype("float") - imageB.astype("float" )) ** 2) NameError: 名称 'np' 未定义
我假设因为 'import numpy as np' 在导入 epilib 之前执行,所以 numpy 库将可用于 epilib?当我在 epilib 的顶部添加 'import numpy as np' 时,问题解决了。
我认为必须将所有导入语句移至 epilib 效率不高。我希望 epilib 只是一个函数库,我可以根据需要导入各种 python 程序。
有没有办法做到这一点?
那不是 python 的工作方式,如果你想在模块中使用 numpy
库(在本例中是在 eplib 模块中),你也需要将它导入到该模块中, eplib
不会在您的 compare.py
中导入 numpy
模块。
您应该将 eplib.py
中的 numpy 导入为 -
import numpy as np
我认为效率上不会有任何问题,因为一旦 python 第一次导入模块,它会将模块缓存在 sys.modules
中,因此无论何时重新导入它(即使它在不同的模块中)只要它是相同的 python 进程,Python 就不会重新导入它,而是 return 来自 [=16= 的模块对象].