赞
踩
目录
一、bat实现使用pip install 安装最新的.whl文件【弃用】
二、python实现使用pip install 安装最新的1个或多个.whl文件
三、判断requirements.txt文件中的库是否都安装了
我的应用场景
因为电脑本地只能离线安装,在安装三方库的时候比较痛苦,需要先云桌面跳转到外网访问pypi网址下载三方库,然后存储到本地的F:\python\lib文件夹下,然后cmd下使用pip install执行安装,所以我想每次下载存储好文件后,点击.bat文件自动执行最新下载的.whl文件。
下面的脚本未实现我的功能,因为只取到日期,没有对时间进行对比。
- @echo off
- setlocal EnableDelayedExpansion
-
- :: 设置固定的目录路径
- set "dir_path=F:\python\lib"
-
- :: 查找指定目录下日期最新的.whl文件
- set "latest_file="
- set "latest_date="
- for /f "tokens=*" %%i in ('dir /b /a:-d "!dir_path!\\*.*"') do (
- set "file_name=%%i"
- if "!file_name:~-4!"==".whl" (
- set "file_date=%%~td"
- if "!file_date!" geq "!latest_date!" (
- set "latest_file=%%i"
- set "latest_date=!file_date!"
- )
- )
- )
-
- :: 检查是否找到了文件
- if not "!latest_file!"=="" (
- echo 找到最新的.whl文件: !latest_file!,该文件的日期是: !latest_date!
- pip install "!dir_path!\!latest_file!"
- ) else (
- echo 没有找到任何.whl文件
- )
-
- echo.
- endlocal
-
- pause

最后还是用python来实现吧
下面的脚本可以自行修改安装最新的1个还是多个文件。
修改for file in sorted_files[:2]中的数字2位置调整执行的文件个数。
设置成1,则执行最新的那个文件的安装
设置成2,先执行最新的文件,再执行次新的文件,
依此类推
之所以这样,是因为库的离线安装过程中总是发现缺依赖,需要临时下载,最新的需要先安装
- # -*- coding: utf-8 -*-
- # @Author: GraceJiang
- # @Date: 2024/5/21
- # @Description:installThirdlib.py
- import os
- import datetime
- import subprocess
-
- # 设置目录路径
- directory = 'F:\\python\\lib'
-
- # 获取目录下所有.whl文件的列表
- whl_files = [f for f in os.listdir(directory) if f.endswith('.whl')]
-
- # 如果没有.whl文件,则退出
- if not whl_files:
- print("No .whl files found in the directory.")
- exit()
-
-
- # 根据文件的最后修改时间对文件列表进行排序
- sorted_files = sorted(whl_files, key=lambda x: os.path.getmtime(os.path.join(directory, x)), reverse=True)
-
- # 打印最新的10个文件的文件名和日期
- for file in sorted_files[:2]:
- file_path = os.path.join(directory, file)
- modification_time = os.path.getmtime(file_path)
- modification_datetime = datetime.datetime.fromtimestamp(modification_time)
- print(f"File: {file}, Date: {modification_datetime.strftime('%Y-%m-%d %H:%M:%S')}")
-
- # 尝试安装最新的.whl文件
- try:
- subprocess.check_call(['pip', 'install', os.path.join(directory, file)])
- print("Installation successful.\n")
- except subprocess.CalledProcessError as e:
- print(f"Installation failed with error: {e}")
-
-
- # # 找到最新的.whl文件
- # latest_file = max(whl_files, key=lambda x: os.path.getctime(os.path.join(directory, x)))
- #
- # # 打印最新的.whl文件信息
- # print(f"\nThe latest .whl file is: {latest_file}")
-
- # # 获取最新的.whl文件的最后修改时间
- # modification_time = os.path.getmtime(os.path.join(directory, latest_file))
- # # 将时间戳转换为datetime对象
- # modification_datetime = datetime.datetime.fromtimestamp(modification_time)
- #
- # # 打印最新的.whl文件信息和日期
- # print(f"File date: {modification_datetime.strftime('%Y-%m-%d %H:%M:%S')}\n")
-
-

- # -*- coding: utf-8 -*-
- # @Author: GraceJiang
- # @Date: 2024/5/21
- # @Description:get_current_libs_results.py
- import subprocess
-
-
- # 读取txt文件中的包名
- def read_package_names(filename):
- with open(filename, 'r') as file:
- lines = file.readlines()
- return [line.split('==')[0] for line in lines]
-
-
- # 使用pip list命令查找包
- def find_packages(names):
- # 执行pip list命令并捕获输出
- result = subprocess.run(['pip', 'list'], capture_output=True, text=True)
- if result.returncode == 0:
- # 解析输出结果
- output_lines = result.stdout.strip().split('\n')
- for name in names:
- found = False
- for line in output_lines:
- if line.startswith(name):
- found = True
- break
- if not found:
- print('未找到的name:', name)
- else:
- print("Error executing 'pip list' command.")
-
-
- if __name__ == '__main__':
- filename = 'requirements.txt' # 替换为你的txt文件名
- package_names = read_package_names(filename)
- find_packages(package_names)

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。