一行代码实现Python动态加载依赖

 更新时间:2021年12月26日 14:05:01   作者:louisyoungx  
本文主要介绍了Python动态加载依赖,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

前几天在一个开源项目里遇到好多用户反馈,不会安装依赖,或者执行 pip install -r requirements.txt 没有反应。

可能造成的原因有很多种,一一排查起来也很麻烦。

想一劳永逸解决这个问题,一般大家都是到 site-packages 里面把所需要的包导出来,放到项目根目录。

但这样终究太过粗糙,不符合Python优雅的个性。

所以我就想,能不能动态引入包,如果没有的话,再调用 pip 下载。最后也差不多实现了我的设想。

我大概查了一下,现在好像没有人用过这个方案,我自己使用感觉还是很方便的,分享给大家。

虽然想打成library给大家下载的,后来想到这又要依赖pip,违背了做动态依赖的本意
所以我推荐是使用 快速开始 - 注入代码运行 中的方式

快速开始

跪求star GitHub - louisyoungx/dypend

通过 pip 安装运行

在 PyPI 下载 dypend依赖包

pip install dypend

在本地生成 requirements.txt 依赖文件

pip freeze > requirements.txt

在项目的入口文件的最上层引入 dypend ,不用更改任何其他代码

import dypend

这时 dypend会检查你的Python环境中是否都有 requirements.txt 中的包,如果没有, dypend会调用 pip下载。

注入代码运行

在本地生成 requirements.txt 依赖文件

pip freeze > requirements.txt

在项目的入口文件的最上层添加如下代码,不用更改任何其他代码

import os
import re
REQUIREMENTS = os.getcwd() + '/requirements.txt'
def getDepends():
   requirements = open(REQUIREMENTS, 'r')
   libs = requirements.readlines()
   libList = []
   for lib in libs:
       try:
           name = re.search("^.+(?===)", lib).group(0)
           version = re.search("(?<===).+$", lib).group(0)
           libDict = {
               "name": name,
               "version": version
          }
           libList.append(libDict)
       except:
           continue
   return libList
def importLib():
   """Load python dependent libraries dynamically"""
​
   libList = getDepends()
​
   from pip._internal import main as pip_main
   import importlib
​
   def install(package):
       pip_main(['install', package])
​
   createVar = locals()
​
   for lib in libList:
       print(lib)
       try:
           createVar[lib["name"]] = importlib.import_module(lib["name"])
       except Exception as e:
           try:
               install(f'{lib["name"]}=={lib["version"]}')
               createVar[lib["name"]] = importlib.import_module(lib["name"])
           except Exception as e:
               print(e)
importLib()

这时dypend会检查你的Python环境中是否都有 requirements.txt 中的包,如果没有,dypend会自动下载。

到此这篇关于一行代码实现Python动态加载依赖的文章就介绍到这了,更多相关Python动态加载依赖内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python GUI之tkinter窗口视窗教程大集合(推荐)

    Python GUI之tkinter窗口视窗教程大集合(推荐)

    这篇文章主要介绍了Python GUI之tkinter窗口视窗教程大集合,看这一篇教程足了,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Python线程threading(Thread类)

    Python线程threading(Thread类)

    这篇文章主要介绍了Python线程threading(Thread类),线程是进程的组成部分,一个进程可以拥有多个线程,更多详细内容需要的朋友可以参考一下下面文章详细内容
    2022-07-07
  • Keras SGD 随机梯度下降优化器参数设置方式

    Keras SGD 随机梯度下降优化器参数设置方式

    这篇文章主要介绍了Keras SGD 随机梯度下降优化器参数设置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python3 写一个WAV音频文件播放器的代码

    python3 写一个WAV音频文件播放器的代码

    本文通过实例代码给大家介绍了python3 写一个WAV音频文件播放器,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • django实现悲观锁乐观锁的项目实践

    django实现悲观锁乐观锁的项目实践

    在Django中,我们可以通过实现悲观锁和乐观锁来保证数据的安全性,本文就来介绍一下django实现悲观锁乐观锁的项目实践,感兴趣的可以了解一下
    2023-08-08
  • python实现图片九宫格分割

    python实现图片九宫格分割

    一张图片分成的九宫图,大家知道是怎么做到吗?这篇文章就为大家详细介绍了python实现图片九宫格分割功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • python数据分析之将爬取的数据保存为csv格式

    python数据分析之将爬取的数据保存为csv格式

    Python内置了CSV模块,可直接通过该模块实现csv文件的读写操作,在web应用中导出数据是比较常见操作,下面这篇文章主要给大家介绍了关于python数据分析之将爬取的数据保存为csv格式的相关资料,需要的朋友可以参考下
    2022-06-06
  • python轻松办公将100个Excel中符合条件的数据汇总到1个Excel里

    python轻松办公将100个Excel中符合条件的数据汇总到1个Excel里

    这篇文章主要为大家介绍了python轻松办公将100个Excel中符合条件的数据汇总到1个Excel里示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • python简单利用字典破解zip文件口令

    python简单利用字典破解zip文件口令

    这篇文章主要给大家介绍了关于python简单利用字典破解zip文件口令的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Python入门教程(七)Python数字类型

    Python入门教程(七)Python数字类型

    这篇文章主要介绍了Python入门教程(七)Python数字类型,Python是一门非常强大好用的语言,也有着易上手的特性,本文为入门教程,需要的朋友可以参考下
    2023-04-04

最新评论