2023-python-import耗时是为什么?

文章讲述了在树莓派4B上离线安装了torch和sklearn等机器学习库后,import时间过长的问题。作者介绍了三种导入机制,包括import表达式、importlib.import_module以及__import__函数,并强调了使用缓存字节码来提高效率的重要性。

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

场景

场景:
树莓派4B
离线安装【arch64架构】
了 torch,sklearn等机器学习库
运行程序文件时候
import的时间总共花了
10s,无法忍受。

查阅下网站:
import官方说辞
看蒙了,太多了;

反正就看看大概,有个数,碰到具体了再去补完背景。

总结:

1.导入机制三种方式:

  • (1) import xxx 表达式【其实绕不过__import__函数】
  • (2)importlib.import_module()的第三方库方法【可能绕过__import__()函数】
  • (3 )__import__ python内置函数

在这里插入图片描述

在这里插入图片描述

5.缓存字节码

在这里插入图片描述

### 加速 OpenCV-Python 下载的方法 为了提高 `opencv-python` 及其相关库的下载速度,可以从以下几个方面入手: #### 1. 使用国内镜像源 许多开发者遇到国外 PyPI 官方仓库访问缓慢的问题时,可以通过配置国内镜像源来解决。常用的国内 Python 镜像站点有阿里云、清华大学 TUNA 和中国科学技术大学等。 以下是设置临时镜像源的方式(以清华为例): ```bash pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple ``` 如果希望永久使用某个镜像源,则可以在用户的 pip 配置文件中修改默认索引地址[^1]。对于 Windows 用户,默认路径通常位于 `%APPDATA%\pip\pip.ini` 或者全局路径 `C:\ProgramData\pip\pip.ini` 中。编辑该文件并添加如下内容即可: ```ini [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple ``` #### 2. 并行安装多个包减少总耗时 当项目需要同时引入基础版本(`opencv-python`)以及扩展贡献模块(`opencv-contrib-python`)的时候,分开多次执行命令会增加网络交互次数从而延长整体时间。因此建议一次性完成所有依赖项加载操作,这样能够有效降低延迟累积效应。 ```bash pip install opencv-python opencv-contrib-python --upgrade -i https://pypi.douban.com/simple/ ``` 上述例子采用了豆瓣提供的公共镜像服务作为替代方案之一[^2]。 #### 3. 缓存机制利用 Pip 工具内置支持离线模式与本地缓存功能,在首次成功获取目标软件包之后再次请求相同资源就不会重复联网拉取数据而是直接读取已存储副本。确保开启了此项特性可以帮助节省带宽消耗同时也间接提升了后续同类任务的速度表现。 启用方法很简单只需加上参数选项即可实现强制开启或关闭行为控制: ```bash # 启用缓存 (默认情况下已经打开) pip install --cache-dir=<path> opencv-python # 如果想完全禁掉则设为空字符串 "" pip install --no-cache-dir opencv-python ``` #### 4. 考虑轻量化变体的选择 根据实际应用场景需求决定是否真的需要用到完整的图形界面处理能力。如果是服务器端部署或者只需要核心算法计算而不涉及可视化展示部分的话那么完全可以选用更加精简高效的 headless 版本代替标准发行版进而达到进一步优化的目的: ```bash pip install opencv-python-headless -i http://mirrors.aliyun.com/pypi/simple/ ``` --- ### 提供代码片段验证效果对比 下面给出一段简单的测试脚本来比较不同方式下的性能差异情况: ```python import time import cv2 def measure_time(): start = time.time() # 这里放置具体的业务逻辑比如图片加载转换之类的动作 img = cv2.imread('test.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) end = time.time() return round(end - start, 4) if __name__ == "__main__": elapsed = measure_time() print(f"Operation took {elapsed} seconds.") ``` 通过替换不同的导入语句观察是否存在显著变化以此判断最佳实践组合形式。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

万物琴弦光锥之外

给个0.1,恭喜老板发财

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

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

打赏作者

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

抵扣说明:

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

余额充值