Skip to content

Commit

Permalink
Merge pull request #21 from zhongpei/dev
Browse files Browse the repository at this point in the history
fix bug speed up pip check
  • Loading branch information
zhongpei authored Mar 5, 2024
2 parents e0cdc90 + 1b0646c commit c44a5e8
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 24 deletions.
2 changes: 1 addition & 1 deletion __init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from .install import check_and_install, check_and_install_version


check_and_install_version("Pillow","10.1.0")
check_and_install_version("Pillow","10.1.0",import_name="PIL")

check_and_install_version("huggingface_hub","0.20.1")
check_and_install_version("transformers","4.36.2")
Expand Down
41 changes: 18 additions & 23 deletions install.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import sys
import subprocess
import sys

from importlib import import_module

def install_package(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", "--no-cache-dir", package])
Expand All @@ -13,32 +13,27 @@ def install_package(package):
except:
install_package("packaging")

def check_and_install_version(package_name, required_version, up_version=True):
def check_and_install_version(package_name, required_version, up_version=True, import_name=None):
if import_name is None:
import_name = package_name
try:
# 检查包是否已安装及其版本
result = subprocess.run(['pip', 'show', package_name], stdout=subprocess.PIPE, text=True)
if result.returncode == 0:
# 解析已安装的版本
installed_version = None
for line in result.stdout.split('\n'):
if line.startswith('Version:'):
installed_version = line.split(':')[1].strip()
break

if installed_version == required_version:
print(f"{package_name}已安装,且版本为{required_version}。")
return
elif up_version and installed_version and version.parse(installed_version) >= version.parse(required_version):
print(f"{package_name}的当前版本{installed_version}满足要求,无需安装{required_version}版本。")
return
else:
print(f"{package_name}已安装,但版本{installed_version}不符合要求的{required_version},将尝试安装正确版本。")
# 尝试导入包以检查是否已安装
package = import_module(import_name)
installed_version = package.__version__
if up_version and version.parse(installed_version) >= version.parse(required_version):
print(f"{package_name}的当前版本{installed_version}满足要求,无需安装{required_version}版本。")
return
else:
print(f"{package_name}未安装,将尝试安装。")
print(f"{package_name}的当前版本{installed_version}低于要求的{required_version},将尝试安装。")
except ImportError:
print(f"{package_name}未安装,将尝试安装{required_version}版本。")
except AttributeError:
print(f"无法确定{package_name}的版本,将尝试安装{required_version}版本。")

# 安装或更新至指定版本
# 安装或更新至指定版本
try:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', f'{package_name}=={required_version}'])
print(f"{package_name}已更新至版本{required_version}。")
print(f"{package_name}已安装/更新至版本{required_version}。")
except subprocess.CalledProcessError as e:
print(f"安装{package_name}时出错:{e}")

Expand Down

0 comments on commit c44a5e8

Please sign in to comment.