共计 1494 个字符,预计需要花费 4 分钟才能阅读完成。
前几天在一个开源我的项目里遇到好多用户反馈,不会装置依赖,或者执行 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 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 会主动下载。
如果此篇文章对您有帮忙的话,麻烦点个赞再走喔~
正文完