DedSec Project

Περιβάλλοντα και αναπαραγώγιμη δημιουργία — DedSec Project

Αναπαραγώγιμα περιβάλλοντα Python σε Linux, Windows και Termux Όταν ένα πρόγραμμα βρίσκει ένα πακέτο και άλλο εμφανίζει ModuleNotFoundError, δεν είναι σωστό να εγκαθιστούμε αμέσως την ίδια…

Αναπαραγώγιμα περιβάλλοντα Python σε Linux, Windows και Termux

Όταν ένα πρόγραμμα βρίσκει ένα πακέτο και άλλο εμφανίζει ModuleNotFoundError, δεν είναι σωστό να εγκαθιστούμε αμέσως την ίδια βιβλιοθήκη ξανά. Πρέπει πρώτα να διαπιστώσουμε ποια Python χρησιμοποιεί κάθε διεργασία. Το virtual environment απομονώνει εξαρτήσεις, αλλά δεν εξασφαλίζει από μόνο του συμβατότητα με λειτουργικό, επεξεργαστή ή native libraries.

Δες την πραγματική Python

import sys
import platform
from pathlib import Path

print(sys.executable)
print(sys.version.split()[0])
print(platform.system(), platform.machine())
print(Path.cwd())

Αποθήκευσε το παράδειγμα σε inspect_env.py και εκτέλεσέ το με ακριβώς τον interpreter της προβληματικής εφαρμογής. Το sys.executable αποκαλύπτει το πραγματικό εκτελέσιμο, ενώ η ένδειξη του τερματικού δεν αρκεί για να αποδείξει ενεργοποιημένο venv. Το Path.cwd() δείχνει τον τρέχοντα φάκελο της διεργασίας, όχι υποχρεωτικά τον φάκελο του script.

Χώρισε τις εξαρτήσεις ανά project

Σε desktop Linux μπορείς να δημιουργήσεις .venv με python3 -m venv .venv και να χρησιμοποιήσεις το .venv/bin/python -m pip. Στα Windows το αντίστοιχο εκτελέσιμο βρίσκεται συνήθως στο .venv\Scripts\python.exe. Η σύνταξη -m pip είναι χρήσιμη επειδή εκκινεί το pip μέσω της επιλεγμένης Python. Ορισμένες διανομές χρειάζονται ξεχωριστό πακέτο venv. Στο Termux η Python παρέχεται από το δικό του pkg· επιβεβαίωσε πρώτα τι υποστηρίζει η πραγματική εγκατάσταση.

Διαφορετική αιτία, διαφορετική λύση

Το «pip λέει installed αλλά το import αποτυγχάνει» δείχνει συχνά διαφορετικό interpreter. Το «το import επιτυγχάνει αλλά λείπει native library» δείχνει διαφορετική εξάρτηση του runtime. Σε compiled πακέτα πρέπει επίσης να ταιριάζουν η έκδοση Python, το ABI και η πλατφόρμα: ένα Linux wheel δεν είναι αυτόματα κατάλληλο για Android/Termux.

Πρακτική απόδειξη

Δημιούργησε προσωρινό project και σύγκρινε τα αποτελέσματα του inspect_env.py από δύο interpreters. Στη συνέχεια κράτα λίστα εξαρτήσεων και προσπάθησε ανακατασκευή του περιβάλλοντος χωρίς αντιγραφή του παλιού site-packages. Κατάγραψε εκδόσεις, λειτουργικό, αρχιτεκτονική, προσδοκώμενες και πραγματικές τιμές. Μην συμπεραίνεις ότι ολόκληρη εφαρμογή λειτουργεί επειδή μία εγκατάσταση επέστρεψε επιτυχία.

Φορητότητα και προσβασιμότητα

Μην υποθέτεις ότι εργαλεία Android υπάρχουν σε Ubuntu ή διαδρομές Windows σε Termux. Δοκίμασε πραγματικό πληκτρολόγιο και συσκευές εισόδου. Στα μενού κονσόλας κράτησε σωστή πλοήγηση και έξοδο.

Λυμένο παράδειγμα

import sys
from pathlib import Path
print(sys.platform)
print(Path.home())

Άσκηση

Πες γιατί η σταθερή διαδρομή /storage/emulated/0 αποτυγχάνει σε Linux.

Λύση / υπόδειξη

Η διαδρομή Android δεν υπάρχει σε συνηθισμένο Linux.