为什么我不能将一个模块命名为'array'?

3
给定以下目录结构:
app/
└── array/
    ├── test/
    │   ├── __init__.py
    │   └── test_array.py
    ├── __init__.py
    └── functions.py

当我从app目录中运行pytest时,我会得到以下错误:
ERROR collecting array/test/test_array.py _______________________________________
ImportError while importing test module '/path/to/app/array/test/test_array.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/opt/homebrew/Cellar/python@3.11/3.11.3/Frameworks/Python.framework/Versions/3.11/lib/python3.11/importlib/__init__.py:126: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
E   ModuleNotFoundError: No module named 'array.test'; 'array' is not a package

将模块简单地重命名为arrays是可以的,但我不明白array有什么问题。


因为数组是一种内置类型。 - Thomas Weller
因为数组是一种内置类型。 - Thomas Weller
因为数组是一种内置类型。 - undefined
2
根据您运行的方式,import array... 可能会看到内置的 array,而不是您的 array 模块。 - deceze
2
根据您的运行方式,import array... 可能会看到内置的 array,而不是您的 array 模块。 - deceze
2
根据你的运行方式,import array... 可能会看到内置的 array,而不是你的 array 模块。 - undefined
3个回答

4

1
有没有办法保留名称并限制范围,这样pytest就知道我所说的是一个本地包? - Abhijit Sarkar
1
有没有办法保留名称并限制范围,以便pytest知道我所说的是一个本地包? - Abhijit Sarkar
1
有没有办法保留名称并限制范围,以便pytest知道我所说的是一个本地包? - undefined
在某种程度上取决于你的PYTHONPATH设置,但在你的情况下,import app.array可能会有所帮助,只要你将app作为一个包进行创建,即在其中创建一个空的__init__.py文件。 - guidot
@AbhijitSarkar 是的,你需要在 sys.path 前面加上,并在已经导入了 "array" 的情况下从 sys.modules 中删除它,然后再次导入 array。这是不建议的,因为你包的任何用户都会遇到与标准库名称冲突的问题。只需重命名该包即可。 - wim
显示剩余3条评论

2

标准库中已经有一个 array 库:https://docs.python.org/3/library/array.html。 所以当 pytest 尝试从你的 array 模块加载时,它可能首先在标准库的 array 中进行搜索,因此出现了错误。


-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接