[debug]-vscode-python-导入自定义包/模块报错ModuleNotFoundError: No module named ‘xxx‘

1.问题描述

项目整理构成如下图所示在这里插入图片描述

1.1 根目录下py文件引用

在项目的根目录比如 aaaa.py文件中引用自定义模块,如下图所示,可以成功。
在这里插入图片描述
在这里插入图片描述

1.2项目的子文件夹下py文件引用

如下图所示,在项目的子文件夹models下,有yolo.py文件。在其中引用。
在这里插入图片描述
如下引用,同文件夹中的 experimental 模块/包
在这里插入图片描述
出现报错
在这里插入图片描述

2.解决方案

2.1原理

1、因为默认的路径不在根目录了,而以当前运行的程序文件夹为根目录

2、如果在当前文件目录底下可以找到导入的包,那么可以直接使用from … import …

3、如果在当前文件目录底下找不到导入的包,则需要向sys.path添加包的所在的绝对位置。

2.2 解决

在py文件的开头加入如下代码。

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  
# __file__获取执行文件相对路径,整行为取上一级的上一级目录
sys.path.append(BASE_DIR)

加入后为
在这里插入图片描述
再次运行即可成功,问题完美解决。
在这里插入图片描述
感到对你有帮助就点个赞吧!

<think>好的,我现在需要解决用户在使用PyInstaller打时遇到的ModuleNotFoundError: No module named 'serial'的问题。首先,我应该回忆一下常见的PyInstaller打问题以及解决方法。根据用户提供的引用资料,特别是引用[3]到[5],里面提到了几种解决模块找不到的方法,比如添加路径、使用隐藏导入参数等。 首先,用户的问题是关于找不到'serial'模块,这可能是因为PyInstaller在打时没有正确识别到依赖项。serial模块通常指的是pyserial,用于串口通信。我需要先确认用户是否已经正确安装了pyserial库。如果安装了,但PyInstaller没有自动检测到,可能需要手动指定。 接下来,根据引用[2]和[4],使用-p参数添加模块路径或者使用--hidden-import来隐藏导入可能有效。用户可能需要检查他们的打命令是否含这些参数。例如,添加--hidden-import serial或者在打命令中指定模块所在的路径。 另外,引用[5]提到PyQt5项目中类似的问题,可能需要检查是否有动态导入的情况,或者是否需要将数据文件含进去。不过serial模块可能不需要额外的数据文件,但动态导入的可能性也存在,比如在代码中有条件导入的情况,这可能导致PyInstaller无法检测到。 可能的解决步骤括: 1. 确保pyserial已安装。 2. 在打命令中使用--hidden-import=serial。 3. 使用-p参数添加site-packages的路径。 4. 检查代码中是否存在动态导入,如果有的话,可能需要修改代码或使用hook文件。 5. 生成spec文件并手动配置,确保含serial模块。 同时,用户可能需要更新PyInstaller到最新版本,以确保兼容性和更好的依赖检测。另外,清理之前的构建缓存也是一个好习惯,避免旧配置的影响。 现在需要将这些步骤整理成用户容易理解的解决方案,分点说明,并参考提供的引用资料中的方法。比如引用[3]提到使用命令法,可能对应隐藏导入或路径添加。引用[4]提到使用分号分隔路径,适用于-p参数。引用[5]的五步法可能涉及生成spec文件。 最后,要确保回答结构清晰,步骤详细,并给出具体的命令示例,方便用户直接使用。同时,生成相关问题,帮助用户进一步解决可能遇到的问题。</think>### 解决PyInstaller打ModuleNotFoundError: No module named 'serial'的步骤 **问题原因**:PyInstaller未正确识别代码中使用的`serial`模块(通常为`pyserial`库),可能因动态导入、路径缺失或依赖未显式声明导致[^3][^4]。 --- ### 解决方案 #### 1. 确认模块安装 确保已通过pip安装`pyserial`: ```bash pip install pyserial ``` --- #### 2. 添加隐藏导入参数 在打命令中明确指定隐藏导入: ```bash pyinstaller -F --hidden-import=serial your_script.py ``` 若需隐藏多个模块,可叠加使用`--hidden-import`[^5]。 --- #### 3. 指定模块搜索路径 若PyInstaller未自动找到`serial`模块路径,手动添加Python的`site-packages`路径(替换为实际路径): ```bash pyinstaller -F -p /usr/local/lib/python3.8/site-packages your_script.py # Linux/macOS示例 pyinstaller -F -p C:\Python38\Lib\site-packages your_script.py # Windows示例 ``` 多个路径用分号分隔。 --- #### 4. 生成并修改.spec文件 对于复杂项目,生成`.spec`文件并手动配置: ```bash pyinstaller --debug=imports your_script.py ``` 在生成的`your_script.spec`中修改以下部分: ```python a = Analysis( ... hiddenimports=['serial'], # 添加此参数 pathex=['C:\\Python38\\Lib\\site-packages'], # 添加模块路径 ... ) ``` 重新打: ```bash pyinstaller your_script.spec ``` --- #### 5. 清理缓存并更新工具 - 清理旧构建缓存: ```bash pyinstaller --clean your_script.py ``` - 升级PyInstaller: ```bash pip install --upgrade pyinstaller ``` --- ### 验证打结果 运行生成的exe文件,若仍报错,检查是否涉及以下情况: - 代码中动态导入(如`importlib.import_module("serial")`),需显式声明依赖 - 系统级依赖缺失(如串口驱动). ---
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值