Termux Python: pip, wheels και σφάλματα native compilation — DedSec Project
Η αποτυχία pip στο Termux μπορεί να αφορά ασύμβατη πλατφόρμα Αναγνώρισε interpreter και αρχιτεκτονική Μία βιβλιοθήκη που διανέμεται ως wheel για desktop Linux δεν είναι απαραίτητα διαθέσιμη…
Η αποτυχία pip στο Termux μπορεί να αφορά ασύμβατη πλατφόρμα
Αναγνώρισε interpreter και αρχιτεκτονική
Μία βιβλιοθήκη που διανέμεται ως wheel για desktop Linux δεν είναι απαραίτητα διαθέσιμη σε Android. Το πρόβλημα μπορεί να εμφανιστεί κατά την επιλογή κατάλληλου wheel ή κατά τη μεταγλώττιση native επέκτασης. Η χρήση sudo δεν μετατρέπει το Termux σε κανονική διανομή Linux. Πριν επαναλάβεις εγκατάσταση βρες τις πραγματικές εκδόσεις και την αρχιτεκτονική.
python -c 'import sys,platform; print(sys.version); print(sys.executable); print(platform.machine())'
python -m pip --version
python -m pip debug --verbose
Τρία διακριτά σφάλματα
Το «No matching distribution» μπορεί να σημαίνει ασυμβατότητα Python, απουσία wheel για το λειτουργικό ή περιορισμούς έκδοσης από dependencies. Σε αποτυχία build χρειάζεσαι το πρώτο μήνυμα compiler ή τα headers που λείπουν. Αν η εγκατάσταση έγινε αλλά το import αποτυγχάνει, έλεγξε μήπως εκκινείται άλλος interpreter ή απουσιάζει κοινόχρηστη native βιβλιοθήκη. Κράτησε ολόκληρο το ουσιαστικό μήνυμα αντί να αλλάζεις τυχαία versions.
Μικρό, απομονωμένο περιβάλλον
Δοκίμασε νέο φάκελο μέσα στο ιδιωτικό $HOME και έλεγξε αν λειτουργεί το python -m venv στη συγκεκριμένη έκδοση Termux. Το venv διαχωρίζει Python packages, αλλά δεν λύνει ασυμβατότητα Android με Linux ABI. Αναζήτησε αν το native dependency υπάρχει από συντηρούμενο Termux repository και απόφυγε τυχαία ανεπιβεβαίωτα binaries.
Πραγματικό κριτήριο επιτυχίας
Η επιτυχής εγκατάσταση πρέπει να ακολουθείται από ελάχιστο import και δοκιμή της απαιτούμενης λειτουργίας. Σημείωσε Python, Android, αρχιτεκτονική, έκδοση πακέτου και παρατηρούμενο αποτέλεσμα. Αν δεν διατίθεται συμβατό build, δήλωσέ το καθαρά αντί να επινοήσεις λύση.
Πηγές: https://docs.python.org/3/library/venv.html
Διαχωρισμός ετικετών διερμηνευτή και συμβατότητας πλατφόρμας
Το όνομα wheel περιέχει ετικέτες διερμηνευτή, ABI και πλατφόρμας. Η ίδια αρχιτεκτονική CPU δεν αρκεί: Android/Termux έχει διαφορετικό περιβάλλον από συνηθισμένο Linux με glibc. Ένα wheel Linux ARM δεν είναι αυτομάτως πακέτο Android. Ο ενεργός Python και οι ρυθμίσεις μεταγλώττισής του αποτελούν στοιχεία.
Πριν κατασκευή πηγής κατάγραψε διερμηνευτή, πλατφόρμα, έκδοση πακέτου και πλήρες σφάλμα compiler. Χώρισε απουσία compiler, headers και υπόθεση desktop API. Η επανάληψη pip install με διοικητικά δικαιώματα δεν διορθώνει ασύμβατο δυαδικό ABI.
import platform, sys, sysconfig
facts = {"python":sys.version.split()[0], "machine":platform.machine(),
"platform":sysconfig.get_platform(),
"extension_suffix":sysconfig.get_config_var("EXT_SUFFIX")}
assert facts["python"] and facts["platform"]
print(facts)
Το διαγνωστικό περιγράφει το τρέχον μηχάνημα χωρίς να το χαρακτηρίζει Android. Σύγκρινε με το κινητό πριν επιλέξεις πακέτα. Κράτησε το πρώτο ουσιαστικό σφάλμα compiler· η τελική γραμμή failed building wheel συνήθως περιγράφει αποτέλεσμα και όχι αιτία.