无法在 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/onemorePYTHONPATH 中,但还是会发生这种情况:

> 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

无法在 SPM 中导入 dicom 图像

无法在python中导入beautifulsoup

无法在python中导入dlib

无法在 Python 3.5.2 中导入 itertools

无法在 Python3 中导入 gi.repository