gpt4 book ai didi

python - 如何从同一目录中的模块导入?

转载 作者:行者123 更新时间:2023-11-30 22:08:37 25 4
gpt4 key购买 nike

我正在尝试制作 Python3.6 包,但从包内导入时遇到了 ModuleNotFound 错误。该包具有以下结构:

project/
project/
cache/
default.py
interface.py
__init__.py
handler.py
test.py

__init__.py文件包含以下内容:

from .handler import Handler

def getHandler(access_token=None, **kwargs):
return Handler(access_token, **kwargs)

然后在handler.py内,我正在尝试从 cache 导入具有以下内容:

from .cache.default import DefaultCache

目标是允许客户端代码执行以下操作:

import project

handler = project.getHandler()

最后一次导入失败,我不清楚原因。有任何想法吗? TIA。

不确定它有多相关,但我正在通过在外部 project 中运行以下命令来测试这一点目录:

> pip install .
> python3 ../test.py

这将返回以下回溯
(venv) Jamess-MacBook-Pro-2:project james$ python3 ../test.py
Traceback (most recent call last):
File "../test.py", line 1, in <module>
import project
File "/Users/james/Work/Project/project/venv/lib/python3.6/site-packages/project/__init__.py", line 1, in <module>
from .handler import Handler
File "/Users/james/Work/Project/project/venv/lib/python3.6/site-packages/project/handler.py", line 7, in <module>
from .cache.default import DefaultCache
ModuleNotFoundError: No module named 'project.cache'

最佳答案

从你的回溯中:

  File "/Users/james/Work/Project/project/venv/lib/python3.6/site-packages/project/handler.py", line 7, in <module>
from cache.default import DefaultCache

这与您在此处向我们展示的代码不同:

from .cache.default import DefaultCache

.cache.default 是正确的 - 这是 project 内的相对路径,因此它将在以下位置找到 project.cache.default project/cache/default.py

实际代码中不带前导点的 cache.default 是绝对路径,来自 sys.path 中的任何目录。由于这些目录中没有名为 cache 的文件或目录,因此失败。

<小时/>

同时,您的项目目录结构似乎也与您向我们展示的不同。否则,导入项目不应找到已安装的版本。默认情况下(我认为您没有做任何更改),sys.path 中的第一个条目“是包含用于调用Python解释器的脚本的目录”。考虑到您在此处发布的结构,这意味着 import project 应该在与 test.py 相同的目录中找到 project 子目录,而不是您的 venv 的 site-packages 中的一个。

关于python - 如何从同一目录中的模块导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52120006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com