File size: 1,893 Bytes
53e1da7 | 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 | import subprocess
import sys
from packaging.requirements import Requirement
from packaging.version import Version
def get_installed_packages():
"""Mengembalikan dictionary berisi nama paket dan versinya yang terinstal."""
packages = {}
try:
result = subprocess.run([sys.executable, '-m', 'pip', 'freeze'], capture_output=True, text=True, check=True)
for line in result.stdout.splitlines():
if '==' in line:
name, version = line.split('==')
packages[name.lower()] = Version(version)
except subprocess.CalledProcessError:
return {} # Mengembalikan dictionary kosong jika ada error
def check_requirements(requirements_file="requirements.txt"):
"""
Mengecek apakah semua requirement dalam file sudah terinstal dengan versi yang sesuai.
Mengembalikan True jika semua sesuai, False jika ada yang tidak sesuai atau tidak terinstal.
"""
installed_packages = get_installed_packages()
try:
with open(requirements_file, 'r') as f:
for line in f:
line = line.strip()
if line and not line.startswith('#'):
try:
req = Requirement(line)
package_name = req.name.lower()
required_specifier = req.specifier
if package_name not in installed_packages or not required_specifier.contains(installed_packages[package_name]):
return False # Ada yang tidak sesuai
except:
return False # Gagal memproses baris
except FileNotFoundError:
return False # File tidak ditemukan
return True # Semua sesuai
if __name__ == "__main__":
all_met = check_requirements()
print(all_met) # Untuk keperluan pengujian, Anda bisa mencetak hasilnya di sini
|