Python ModuleNotFoundError: No module named ‘***‘以及 unknown parent package解决方法

本文介绍了如何在Python中通过修改sys.path来导入同一目录或不同目录下的模块。方法一是直接在代码中使用`sys.path.append()`添加当前或父目录;方法二是创建.pth文件,将目录添加到site-packages下的.pth文件中,使得启动时自动加入sys.path。这两种方法都涉及代码的可移植性和路径管理,讨论了硬编码路径的潜在问题以及推荐的解决方案。

目录

方法一

讨论

第二种方法


原因:Python的Import是从sys.path中寻找文件名(或目录)的。

例如,现在要在a中导入一个同目录的文件b,关系就会像这样:

DIR

|-a.py

|-b.py

直接输入import b会报错。

方法一

想要直接引用文件名,需要在前面加入这一段代码:

import sys
sys.path.append(".")

解析:在默认的导入路径里加入父目录,即可导入。

同样的:

DIR

|-b.py

|-DIR2

|    |-a.py

要导入b.py:

import sys
sys.path.append("..")

进阶:

DIR

|-DIR1

|    |-b.py

|-DIR2

|     |-a.py

 要导入b.py:

import sys
sys.path.append("..DIR1")

总之,在append语句中添加上要导入文件的路径。

讨论

比起费力地找文件,你可能会倾向于写一个代码手动调节sys.path的值。例如:

import sys
sys.path.insert(0, '/some/dir')
sys.path.insert(0, '/other/dir')

虽然这能“工作”,但是在实践中极为脆弱,应尽量避免使用。这种方法的问题是,它将目录名硬编码到了你的源代码。如果你的代码被移到一个新的位置,这会导致维护问题。更好的做法是在不修改源代码的情况下,将path配置到其他地方。如果您使用模块级的变量来精心构造一个适当的绝对路径,有时你可以解决硬编码目录的问题,比如__file__。举个例子:

import sys
from os.path import abspath, join, dirname
sys.path.insert(0, join(abspath(dirname(__file__)), 'src'))

这将src目录添加到path里,和执行插入步骤的代码在同一个目录里。

site-packages目录是第三方包和模块安装的目录。如果你手动安装你的代码,它将被安装到site-packages目录。虽然用于配置path的.pth文件必须放置在site-packages里,但它配置的路径可以是系统上任何你希望的目录。因此,你可以把你的代码放在一系列不同的目录,只要那些目录包含在.pth文件里。

                                                        ——选自10.9 将文件夹加入到sys.path — python3-cookbook 3.0.0 文档https://python3-cookbook.readthedocs.io/zh_CN/latest/c10/p09_add_directories_to_sys_path.html

第二种方法

第二种方法是创建一个.pth文件,将目录列举出来,像这样:

.\DIR\
.\DIR\DIR1\

这个.pth文件需要放在某个Python的site-packages目录下,通常会位于/usr/local/lib/python3.3/site-packages 或者 ~/.local/lib/python3.3/sitepackages。当解释器启动时,.pth文件里列举出来的存在于文件系统的目录将被添加到sys.path。安装一个.pth文件可能需要管理员权限,如果它被添加到系统级的Python解释器的话。

注:可以先创建一个txt文件再更改后缀

Microsoft Windows [版本 10.0.22631.2861] (c) Microsoft Corporation。保留所有权利。 C:\Users\Administrator>cd /d E:\AI_System\web_ui E:\AI_System\web_ui>python server.py 2025-08-09 21:02:41,797 - StartupLogger - INFO - 项目根目录: E:\AI_System 2025-08-09 21:02:41,797 - StartupLogger - INFO - 添加路径: E:\AI_System\agent 2025-08-09 21:02:41,797 - StartupLogger - INFO - 添加路径: E:\AI_System\core 2025-08-09 21:02:41,797 - StartupLogger - INFO - 添加路径: E:\AI_System\utils 2025-08-09 21:02:41,797 - StartupLogger - INFO - 添加路径: E:\AI_System\config 2025-08-09 21:02:41,798 - StartupLogger - INFO - 添加路径: E:\AI_System\cognitive_arch 2025-08-09 21:02:41,801 - StartupLogger - ERROR - ❌ 配置模块导入失败: No module named 'config.config_loader'; 'config' is not a package 2025-08-09 21:02:41,801 - StartupLogger - WARNING - ⚠️ 使用临时配置 2025-08-09 21:02:41,801 - StartupLogger - INFO - 请检查以下路径是否存在: 2025-08-09 21:02:41,801 - StartupLogger - INFO - 1. E:\AI_System\config/config_loader.py 2025-08-09 21:02:41,801 - StartupLogger - INFO - 2. E:\AI_System\config/__init__.py 2025-08-09 21:02:41,813 - WebServer - ERROR - ❌ 生活系统初始化失败: LifeScheduler() takes no arguments 2025-08-09 21:02:41,813 - WebServer - WARNING - ⚠️ 生活系统功能将不可用 2025-08-09 21:02:41,813 - WebServer - INFO - ================================================== 2025-08-09 21:02:41,813 - WebServer - INFO - 正在使用统一配置初始化智能体核心模块... 2025-08-09 21:02:41,813 - WebServer - INFO - 智能体路径: E:\AI_System\agent 2025-08-09 21:02:41,813 - WebServer - INFO - 模型缓存目录: E:\AI_System\model_cache 2025-08-09 21:02:41,813 - WebServer - INFO - 默认模型: minimal-model 2025-08-09 21:02:41,813 - WebServer - INFO - 使用GPU: False 2025-08-09 21:02:41,819 - WebServer - ERROR - ❌ 智能体模块导入失败: No module named 'core.environment_interface' 2025-08-09 21:02:41,828 - WebServer - INFO - ⏳ 2秒后重试... 2025-08-09 21:02:43,843 - WebServer - ERROR - ❌ 智能体模块导入失败: No module named 'core.environment_interface' 2025-08-09 21:02:43,844 - WebServer - INFO - ⏳ 2秒后重试... 2025-08-09 21:02:45,847 - WebServer - ERROR - ❌ 智能体模块导入失败: No module named 'core.environment_interface' 2025-08-09 21:02:45,848 - WebServer - CRITICAL - ‼️ 智能体模块导入彻底失败 2025-08-09 21:02:45,857 - WebServer - INFO - ================================================== 2025-08-09 21:02:45,858 - WebServer - INFO - 🚀 启动Web服务: http://0.0.0.0:8000 2025-08-09 21:02:45,858 - WebServer - INFO - 环境: development 2025-08-09 21:02:45,858 - WebServer - INFO - 日志级别: INFO 2025-08-09 21:02:45,858 - WebServer - INFO - 生活系统: ❌ 未启用 2025-08-09 21:02:45,859 - WebServer - INFO - 智能体: ❌ 未启用 2025-08-09 21:02:45,859 - WebServer - INFO - ================================================== * Serving Flask app 'server' * Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:8000 * Running on http://192.168.10.146:8000 Press CTRL+C to quit
08-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unconquerable p

给点吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值