#!/usr/bin/env python3 import os import sys import shutil import subprocess from pathlib import Path def check_requirements_file(requirements_file="requirements.txt"): """检查 requirements.txt 是否存在""" if not os.path.exists(requirements_file): print(f"❌ 错误:未找到 {requirements_file}!请确保它在当前目录。") print(f"👉 生成 requirements.txt 的方法:`pip freeze > requirements.txt`") sys.exit(1) def install_deps_to_folder( requirements_file="requirements.txt", target_dir="package", upgrade=True, no_deps=False ): """ 安装依赖到目标文件夹 :param requirements_file: 依赖文件路径 :param target_dir: 目标目录(默认 package) :param upgrade: 是否更新已安装的包 :param no_deps: 是否跳过依赖包(仅安装直接依赖) """ target_path = Path(target_dir).resolve() # 1. 如果目标文件夹已存在,提醒用户确认覆盖 if target_path.exists(): print(f"⚠️ 警告:目标文件夹 {target_path} 已存在!") choice = input("是否删除并重建?(y/N) ").strip().lower() if choice != "y": print("⏹ 用户取消操作") return False shutil.rmtree(target_path) target_path.mkdir(parents=True) # 2. 构造 pip 安装命令 pip_cmd = [ sys.executable, "-m", "pip", "install", "-r", requirements_file, "--target", str(target_path), ] if upgrade: pip_cmd.append("--upgrade") if no_deps: pip_cmd.append("--no-deps") # 3. 执行安装 print(f"\n📦 正在安装依赖到 {target_path} ...") result = subprocess.run(pip_cmd, capture_output=True, text=True) if result.returncode != 0: print("\n❌ 安装失败!错误信息:") print(result.stderr) return False # 4. 成功时打印提示 print("\n✅ 安装成功!依赖已保存到:") print(f" → {target_path}\n") # 5. 打印后续使用说明 return True def main(): check_requirements_file() dir = "src" dir = os.path.join(dir,"packages") install_success = install_deps_to_folder( requirements_file="requirements.txt", target_dir=dir, upgrade=True, no_deps=False, # 设为 True 仅安装直接依赖 ) if install_success: # 检查是否安装了 pip 依赖 package_size = sum(f.stat().size for f in Path("package").glob("**/*") if f.is_file()) print(f"📂 安装大小: {package_size / 1024 / 1024:.2f} MB") else: print("\n❌ 安装失败!请检查报错信息。") if __name__ == "__main__": main()