Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import re
- import importlib.metadata
- import subprocess
- import requests
- import sys
- import time
- import random
- PYPI_URL = "https://pypi.org/pypi/{}/json"
- def __():
- _0, _1 = ["\033[91m", "\033[92m", "\033[93m", "\033[94m", "\033[95m", "\033[96m"], "\033[0m"
- _2 = [99, 114, 101, 97, 116, 101, 100, 32, 98, 121, 32, 110, 105, 116, 101, 115, 116, 114, 121, 107, 101, 114]
- _3 = ''.join(map(chr, _2))
- for _4 in range(len(_3) + 1):
- sys.stdout.write("\r" + random.choice(_0) + _3[:_4] + _1)
- sys.stdout.flush()
- time.sleep(0.1)
- print()
- for _5 in range(10):
- sys.stdout.write("\r" + random.choice(_0) + _3 + _1)
- sys.stdout.flush()
- time.sleep(0.2)
- print("\n")
- def get_installed_packages():
- """Returns a dictionary of installed packages with their versions."""
- return {pkg.metadata["Name"].lower(): pkg.version for pkg in importlib.metadata.distributions()}
- def get_latest_version(package_name):
- """Fetch the latest version of a package from PyPI."""
- try:
- response = requests.get(PYPI_URL.format(package_name))
- if response.status_code == 200:
- return response.json()["info"]["version"]
- except Exception as e:
- print(f"Error fetching version for {package_name}: {e}")
- return None
- def extract_imports_from_file(file_path):
- """Extracts imported modules from a given Python file."""
- imports = set()
- import_pattern = re.compile(r'^\s*(?:import|from)\s+([\w\.]+)')
- try:
- with open(file_path, 'rb') as f:
- for line in f:
- try:
- line = line.decode('utf-8', errors='ignore') # Decode safely
- except UnicodeDecodeError:
- continue
- match = import_pattern.match(line)
- if match:
- module = match.group(1).split('.')[0] # Get the base module name
- imports.add(module)
- except Exception as e:
- print(f"Error reading {file_path}: {e}")
- return imports
- def find_all_imports(directory):
- """Finds all imported modules in Python files within the specified directory."""
- all_imports = set()
- for root, _, files in os.walk(directory):
- for file in files:
- if file.endswith('.py'):
- file_path = os.path.join(root, file)
- all_imports.update(extract_imports_from_file(file_path))
- return all_imports
- def generate_requirements(directory, output_file='requirements.txt', install_latest=False):
- """Generates a requirements.txt file with the latest package versions."""
- all_imports = find_all_imports(directory)
- installed_packages = get_installed_packages()
- third_party_packages = {pkg for pkg in all_imports if pkg.lower() in installed_packages}
- with open(output_file, 'w', encoding='utf-8') as f:
- for package in third_party_packages:
- latest_version = get_latest_version(package)
- if latest_version:
- line = f"{package}=={latest_version}\n"
- f.write(line)
- print(f"Added {line.strip()} to {output_file}")
- # Optionally install the latest version
- if install_latest:
- subprocess.run([sys.executable, "-m", "pip", "install", f"{package}=={latest_version}"], check=True)
- print(f"Requirements file generated: {output_file}")
- # Run the script on the current directory
- if __name__ == "__main__":
- __()
- install_latest = "--install" in sys.argv # Add --install flag to update packages
- generate_requirements(os.getcwd(), install_latest=install_latest)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement