Spaces:
Sleeping
Sleeping
File size: 3,747 Bytes
7b2266c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
"""
Generate clean requirements.txt from conda environment for Hugging Face deployment
"""
import subprocess
import sys
import re
def get_conda_packages():
"""Get packages from conda environment"""
print("Getting packages from conda environment 'momask'...")
try:
result = subprocess.run(
['conda', 'list', '-n', 'momask', '--export'],
capture_output=True,
text=True,
check=True
)
return result.stdout
except subprocess.CalledProcessError as e:
print(f"Error getting conda packages: {e}")
return None
def convert_to_pip_format(conda_output):
"""Convert conda export to pip requirements format"""
requirements = []
for line in conda_output.split('\n'):
line = line.strip()
# Skip comments and empty lines
if not line or line.startswith('#'):
continue
# Parse conda format: package=version=build
parts = line.split('=')
if len(parts) >= 2:
package = parts[0]
version = parts[1]
# Skip pip itself and conda-specific packages
if package in ['pip', 'conda', 'python']:
continue
# Handle special cases
if package == 'pytorch':
package = 'torch'
elif package == 'pytorch-cuda':
continue # Skip CUDA packages
requirements.append(f"{package}=={version}")
return requirements
def create_minimal_requirements():
"""Create minimal requirements.txt with essential packages"""
print("\nCreating minimal requirements.txt with essential packages...")
essential_packages = [
"torch>=2.0.0",
"torchvision>=0.15.0",
"torchaudio>=2.0.0",
"numpy==1.23.5",
"gradio>=4.0.0",
"einops>=0.6.1",
"scipy>=1.13.0",
"matplotlib>=3.5.0",
"trimesh>=4.0.0",
"chumpy>=0.70",
"scikit-learn>=1.6.0",
"tqdm>=4.67.0",
"pandas>=2.0.0",
"Pillow>=9.0.0",
"ffmpeg-python>=0.2.0",
"vector-quantize-pytorch>=1.6.0",
"huggingface-hub>=1.0.0",
"git+https://github.com/openai/CLIP.git",
]
return essential_packages
def main():
print("=" * 70)
print(" " * 20 + "Requirements Generator")
print("=" * 70)
# Try to get packages from conda
conda_output = get_conda_packages()
if conda_output:
print("✓ Successfully retrieved conda packages")
requirements = convert_to_pip_format(conda_output)
print(f"✓ Found {len(requirements)} packages")
else:
print("⚠ Could not retrieve conda packages, using minimal requirements")
requirements = create_minimal_requirements()
# Always ensure essential packages are included
essential_packages = create_minimal_requirements()
# Write requirements.txt
output_file = 'requirements_clean.txt'
print(f"\nWriting to {output_file}...")
with open(output_file, 'w', encoding='utf-8') as f:
# Write header
f.write("# Requirements for Hugging Face Spaces deployment\n")
f.write("# Generated for MoMask Text-to-Motion Generator\n\n")
# Write essential packages
f.write("# Essential packages\n")
for pkg in essential_packages:
f.write(f"{pkg}\n")
print(f"✓ Requirements written to {output_file}")
print("\nNext steps:")
print("1. Review requirements_clean.txt")
print("2. Rename it to requirements.txt")
print("3. Test locally: pip install -r requirements.txt")
print("4. Run pre_deploy_check.py before deploying")
print("\n" + "=" * 70)
if __name__ == "__main__":
main()
|