【问题标题】:python does not recognize packages with __init__.pypython 无法识别带有 __init__.py 的包
【发布时间】:2021-12-28 05:21:21
【问题描述】:

我有以下文件夹结构:

我想从 D.py 访问 A.py(3 级以上)。我在这个项目的所有目录中添加了一个 init.py 来将它们初始化为包。当我在 D.py 中尝试以下操作时:

from test1 import A

A.hi()

我收到以下错误:

ModuleNotFoundError: No module named 'test1'

我使用的是 Windows 10、Visual Studio Code 和 python 3.9.6,我什至将所有 test1、test2、test3 文件夹添加到路径变量中。我认为值得一提的是,Visual Studio 似乎确实将这些文件夹识别为包,因为它在导入时键入模块名称时将它们显示在下拉列表中。

编辑: 我已经设法从 test3 D.py 访问了在 test1 中创建的 Z.py:

import sys
import os
sys.path.append(os.path.abspath("C:\\Users\\myusername\\Desktop\\testdbconnection"))

from test1 import Z
Z.hi()

此文件夹已在 Windows 路径中,我自己添加的。为什么以前 Python 不识别?

此外,除了 test1 中的内容之外,我无法访问其他任何内容。

  • 如果我想访问 A.py 和 B.py 我需要附加到路径 C:\用户\我的用户名\桌面,

  • 如果我想访问 test2 C.py 我需要附加到路径 C:\Users\myusername\Desktop\testdbconnection\test1

  • 等等……

【问题讨论】:

标签: python python-packaging


【解决方案1】:

这为我解决了。

from pathlib import Path
desktop = Path(__file__).absolute().parent.parent.parent.parent.parent
sys.path.append(str(desktop))

这会将 testdbconnection 的包含文件夹(在我的例子中是 Desktop)附加到 Path 变量中。第一个.parent 返回文件的目录,其余4 个.parent 返回Desktop 文件夹。我认为最好不要在 Path 变量中包含 Desktop,而是创建另一个父文件夹来包含 testdbconnection。 最后,将Path对象转换为str并追加到sys.path

使用文件的绝对路径可确保路径相同,即使我从 test3 (python D.py) 或 test2 (python test3/D.py) 或其他任何地方运行我的 python 脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 2015-08-19
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多