无法在 Python 中导入位置设置为 PYTHONPATH 的模块
Posted
技术标签:
【中文标题】无法在 Python 中导入位置设置为 PYTHONPATH 的模块【英文标题】:Can't import module with location set to PYTHONPATH in Python 【发布时间】:2022-01-04 11:04:43 【问题描述】:我也检查了关于 SO 的其他答案,但它们似乎不像我的。
所以我在玩导入,我决定将我的模块 custom.py
放入这样的嵌套文件夹中:
/Users/alex/Desktop/Learn/mods/onemore/custom.py
我的主脚本文件位于以下位置:
/Users/alex/Desktop/Learn/main.py
所以当我在main.py
中执行import custom
时,我收到错误ModuleNotFoundError: No module named 'custom'
尽管/Users/alex/Desktop/Learn/mods/onemore
在PYTHONPATH
中,但还是会发生这种情况:
> echo $PYTHONPATH
> /Users/alex/Desktop/Learn/mods/onemore
并且路径在sys.path
(第二个)中可见:
> ['', '/Users/alex/Desktop/Learn/mods/onemore', '/Library/Frameworks/Python.framework/Versions/3.10/lib/python310.zip', '/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10', '/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages']
为什么我仍然不能导入模块?
【问题讨论】:
【参考方案1】:您可以使用文件夹名称导入它
例如:from onemore import custom
【讨论】:
它确实有效,但我试图省略具体的路径和文件夹名称。我只想和import custom
一起去。有没有办法做到这一点?【参考方案2】:
您需要在/Users/alex/Desktop/Learn/mods/onemore
添加一个空的 __init__.py
文件才能以这种方式调用(作为常规包)。
如果它在python路径中,则将其称为命名空间包(不需要init):
from custom import <func-you-need>
目前导入的标准来自PEP420。
【讨论】:
老实说,这并不能解释为什么 Python 没有在我的文件夹中找到我的模块。此外,将__init__.py
文件放在/Users/alex/Desktop/Learn/mods/onemore
并不能解决import custom
的情况。还是看不到模块以上是关于无法在 Python 中导入位置设置为 PYTHONPATH 的模块的主要内容,如果未能解决你的问题,请参考以下文章
ImportError:无法在 python 中导入名称 COMError