ModuleNotFoundError: No module named ‘xxx‘ | 愚笨的解决方法 |

本文记录了一次在运行BasicSR和EDVR代码时遇到的环境问题及解决过程。首先遇到的是`ModuleNotFoundError`,通过添加父目录到Python路径解决了。接着出现`TypeError`,原因是未执行`python setup.py develop`来安装项目依赖。执行该命令后,所有错误消失,代码成功运行并完成测试。整个过程强调了环境配置和依赖管理在代码执行中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这种报错,有时候就是莫名其妙吖吖吖

运行的代码:

https://github.com/xinntao/BasicSR


具体报错如下:

Traceback (most recent call last):
  File "basicsr/test.py", line 12, in <module>
    from basicsr.data import create_dataloader, create_dataset
ModuleNotFoundError: No module named 'basicsr'

其实仔细,观察这个 报错是 不应该有的,所以根本原因推测应该是当前环境依赖项没有完全适配的问题;但是依赖项这个自己一时并不清楚如何下手处理;
0

临时解决方法:

1
添加父目录的代码如下:

import sys
sys.path.append("/home/墨理三生/project/project21/videoSR/EDVR/BasicSR-master/")


第二波报错如下:

2021-01-20 08:08:32,618 INFO: Generate data info for VideoTestDataset - Vid4
2021-01-20 08:08:32,620 INFO: Dataset VideoTestDataset - Vid4 is created.
2021-01-20 08:08:32,621 INFO: Number of test images in Vid4: 171
Traceback (most recent call last):
  File "basicsr/test.py", line 65, in <module>
    main()
  File "basicsr/test.py", line 52, in main
    model = create_model(opt)
  File "/home/zql/project/project21/two/EDVR-master/basicsr/models/__init__.py", line 38, in create_model
    model = model_cls(opt)
  File "/home/zql/project/project21/two/EDVR-master/basicsr/models/edvr_model.py", line 17, in __init__
    super(EDVRModel, self).__init__(opt)
  File "/home/zql/project/project21/two/EDVR-master/basicsr/models/sr_model.py", line 23, in __init__
    self.net_g = define_network(deepcopy(opt['network_g']))
  File "/home/zql/project/project21/two/EDVR-master/basicsr/models/archs/__init__.py", line 45, in define_network
    net = dynamic_instantiation(_arch_modules, network_type, opt)
  File "/home/zql/project/project21/two/EDVR-master/basicsr/models/archs/__init__.py", line 40, in dynamic_instantiation
    return cls_(**opt)
  File "/home/zql/project/project21/two/EDVR-master/basicsr/models/archs/edvr_arch.py", line 336, in __init__
    num_feat=num_feat, deformable_groups=deformable_groups)
  File "/home/zql/project/project21/two/EDVR-master/basicsr/models/archs/edvr_arch.py", line 52, in __init__
    deformable_groups=deformable_groups)
TypeError: object() takes no parameters

这个报错,网上通常查不到具体原因;

也就是说,通常大概率还是 环境问题;

对于我所运行的代码,后来发现自己少执行了一个步骤:

python setup.py develop

执行该命令,等待5分钟左右即可,看到最终输出大致如下:

Searching for oauthlib==3.1.0
Best match: oauthlib 3.1.0
Adding oauthlib 3.1.0 to easy-install.pth file

Using /home/墨理三生/anaconda3/envs/torch14/lib/python3.6/site-packages
Finished processing dependencies for basicsr==1.2.0+unknown

说明这一命令的执行是在梳理项目的环境依赖;

这时,再执行,测试命令,这个错误便消失了;

python basicsr/test.py -opt options/test/EDVR/test_EDVR_L_x4_SR_Vid4.yml

发现可以正常测试,最终输出如下:

2021-01-20 09:13:33,273 INFO: Loading EDVR model from experiments/pretrained_models/EDVR/EDVR_L_x4_SR_Vimeo90K_official-162b54e4.pth.
2021-01-20 09:13:33,430 INFO: Model [EDVRModel] is created.
2021-01-20 09:13:33,430 INFO: Testing Vid4...
2021-01-20 09:13:33,430 WARNING: nondist_validation is not implemented. Run dist_validation.
Test walk:47/47: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 171/171 [01:12<00:00,  2.36frame/s]
2021-01-20 09:14:45,918 INFO: Validation Vid4
	 # psnr: 25.8258	 # calendar: 22.2793	 # city: 26.4529	 # foliage: 24.9289	 # walk: 29.6420



### ModuleNotFoundError 错误分析 当 Python 抛出 `ModuleNotFoundError` 错误时,通常表示解释器无法找到指定的模块。对于当前问题中的错误: ```plaintext Traceback (most recent call last): File "basicsr/test.py", line 12, in <module> from basicsr.data import create_dataloader, create_dataset ModuleNotFoundError: No module named 'basicsr' ``` 这表明 Python 解释器未能定位名为 `basicsr` 的模块。 --- #### 可能的原因及解决方案 以下是可能原因及其对应的解决方法: 1. **未安装或导入路径缺失** 如果 `basicsr` 是一个外部库,则需要确认该库已正确安装。可以通过以下命令检查并安装: ```bash pip install basicsr ``` 若此操作失败,说明 `basicsr` 并不是一个标准 PyPI 库,可能是项目内部自定义模块[^1]。 2. **Python 路径配置不正确** 当前工作目录下的子模块未被加入到 Python 的搜索路径中。可以尝试通过修改环境变量来解决问题。在运行脚本之前执行以下命令: ```bash export PYTHONPATH=$PYTHONPATH:/path/to/your/project/ ``` 或者,在代码开头手动调整路径: ```python import sys import os project_root = '/path/to/your/project/' if project_root not in sys.path: sys.path.append(project_root) ``` 3. **缺少必要的初始化文件** 对于自定义包(如 `basicsr`),如果其所在目录未被识别为合法的 Python 包,需确保该目录下存在 `__init__.py` 文件。即使为空文件也无妨,它用于标记这是一个可导入的包[^3]。 4. **相对导入引发的问题** 假设 `test.py` 和 `data` 子模块位于同一父级目录下,应采用显式的相对导入方式而非绝对路径形式。例如: ```python from .data import create_dataloader, create_dataset ``` 这种写法适用于在同一包内的不同模块之间调用场景。 5. **拼写错误或其他语法问题** 需仔细核对是否有任何字符输入失误或者命名冲突情况发生。比如大小写的区别也可能造成此类异常。 6. **虚拟环境中依赖管理不当** 使用多个隔离开发环境下容易忽略某些特定版本需求。建议重新创建一个新的干净venv实例后再试一次全部必要组件加载过程。 7. **其他相似案例借鉴处理思路** - 类似 timm 模型层找不到的情况可通过单独克隆源码仓库再编译安装解决 [^2]. - FastReID 中 rank cython 扩展部分功能禁用切换纯 python 实现规避兼容性难题 [^4]. --- ### 示例修正后的结构布局 假设整个项目的根目录为 `/project/basicsr`, 则应该有如下基本框架: ``` /project/ ├── basicsr/ │ ├── __init__.py # 添加这一行很重要! │ └── data/ │ ├── __init__.py │ ├── dataset.py │ └── dataloader.py └── test.py # 主测试入口程序位置保持不变 ``` 其中各 py 文件内容大致如下所示: **basicsr/data/dataset.py** ```python def create_dataset(): pass ``` **basicsr/data/dataloader.py** ```python def create_dataloader(): pass ``` **test.py** ```python import sys sys.path.insert(0,'../') from basicsr.data.dataset import create_dataset from basicsr.data.dataloader import create_dataloader if __name__ == "__main__": ds = create_dataset() dl = create_dataloader() ``` --- ### 总结注意事项 上述提到的各种可能性都需要逐一排查验证才能最终锁定确切根源所在。务必按照实际情况灵活运用以上给出的不同角度应对策略直至彻底消除报错现象为止。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

墨理学AI

不必打赏,关注博主公众号即可

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

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

打赏作者

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

抵扣说明:

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

余额充值