前几天在一个开源我的项目里遇到好多用户反馈,不会装置依赖,或者执行 pip install -r requirements.txt
没有反馈。
可能造成的起因有很多种,一一排查起来也很麻烦。
想一劳永逸解决这个问题,个别大家都是到 site-packages
外面把所须要的包导出来,放到我的项目根目录。
但这样究竟太过毛糙,不合乎Python优雅的共性。
所以我就想,能不能动静引入包,如果没有的话,再调用 pip
下载。最初也差不多实现了我的构想。
我大略查了一下,当初如同没有人用过这个计划,我本人应用感觉还是很不便的,分享给大家。
尽管想打成library给大家下载的,起初想到这又要依赖pip,违反了做动静依赖的本意
所以我举荐是应用
疾速开始 - 注入代码运行
中的形式
疾速开始
通过 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 osimport reREQUIREMENTS = 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 libListdef 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会主动下载。
如果此篇文章对您有帮忙的话,麻烦点个赞再走喔~