python - 为什么文件名 struct.py 会报错?
问题描述
我正在尝试在 python 中进行图像处理,两天来我遇到了一个问题。
我意识到在尝试以下简单脚本时,将文件命名为 struct.py 会出现错误“numpy.core.multiarray failed to import”:
import numpy as np
k = np.ones((9,9))
print(k)
当我创建另一个名称的文件时,相同的代码起作用。
现在我正在寻找为什么会发生这种情况的答案。
我创建了一个测试文件“struct.py”来尝试不同的结构元素进行形态学操作。在我的所有其他测试文件中,numpy 工作正常,但由于某种原因,在那个“struct.py”脚本中,我收到一条错误消息,说“numpy.core.multiarray 无法导入”。我非常投入到解决这个问题上,以至于在解决过程中我没有想过要测试 numpy 是否在我的其他脚本中工作(他们以前工作过的地方)
我重新安装了 python 几次,切换了 IDE,尝试在本地编码而不是使用版本控制器,但所有这些事情对我来说似乎都是不必要的,因为我没有看到这可能是 numpy 不工作的原因。
今天我看到有一个名为 struct 的 python 模块,并且我在脚本中使用该名称一定是问题的原因,但我仍然不明白为什么 numpy 会因此而停止工作。numpy 是否依赖于 struct 模块?这怎么可能发生?
这也是我第一次在 stackoverflow 上实际发布问题,如果我应该更改帖子内容或删除不必要的信息或添加更多内容,请告诉我。
解决方案
您不能命名您的模块struct.py
,因为struct
模块作为内置存在(这用于序列化/反序列化数据到/从内存/磁盘,具有数字类型的字节序和大小管理)
>>> import struct
>>> struct.__file__
'C:\\Users\\xxxx\\AppData\\Local\\Programs\\Python\\Python37\\lib\\struct.py'
如果您创建一个以相同方式命名的文件,如果另一个模块尝试导入内置struct
模块,它可能会导入您的,并且可能会出现难以理解的错误。
如果我在当前目录中创建一个struct.py
文件,其中仅包含:
print("hellooooo bug")
当我导入时会发生什么numpy
:
>>> import numpy
hellooooo bug
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\jotd6\AppData\Local\Programs\Python\Python37\lib\site-packages\numpy\__init__.py", line 140, in <module>
from . import _distributor_init
File "C:\Users\jotd6\AppData\Local\Programs\Python\Python37\lib\site-packages\numpy\_distributor_init.py", line 9, in <module>
from ctypes import WinDLL
File "C:\Users\jotd6\AppData\Local\Programs\Python\Python37\lib\ctypes\__init__.py", line 14, in <module>
from struct import calcsize as _calcsize
如您所见numpy
。struct
只是不要使用该名称(或任何通用名称,而不先检查它是否作为内置名称存在)。Python csv 导入的间接变体失败
推荐阅读
- reactjs - Pinterest 动态 Pin 图更新
- wolfram-mathematica - 如何使用带下标的变量?
- flutter - 我如何设计一个带有破碎边界的正方形?
- google-apps-script - 我的 Google App 脚本中有一个奇怪的错误。它一直在删除信息?
- python-3.x - 有没有办法将动态 Cypher 查询存储到 python 变量中?
- excel - 如何设置“自定义”敏感度标签?
- mysql - 如何在mysql中创建程序
- maven - ojdbc 版本和 ucp 版本不同
- python - 如何从视图中创建的函数向字段添加信息?
- python - Python - itertools.groupby