Είναι δυνατή η εγκατάσταση πακέτων με τη χρήση pip από το τοπικό σύστημα αρχείων;
Έχω εκτελέσει το python setup.py sdist
για το πακέτο μου, το οποίο δημιούργησε το κατάλληλο αρχείο tar.gz. Το αρχείο αυτό είναι αποθηκευμένο στο σύστημά μου στη διεύθυνση /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
Τώρα σε ένα εικονικό περιβάλλον θα ήθελα να εγκαταστήσω πακέτα που προέρχονται είτε από το pypi είτε από τη συγκεκριμένη τοπική τοποθεσία /srv/pkg
.
Είναι αυτό δυνατό;
PS
Γνωρίζω ότι μπορώ να καθορίσω pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
. Αυτό θα λειτουργήσει, αλλά μιλάω για τη χρήση της τοποθεσίας /srv/pkg
ως ένα άλλο μέρος για να ψάξει η pip αν πληκτρολογήσω pip install mypackage
.
Τι γίνεται με::
pip install --help
...
-e, --editable <path/url> Install a project in editable mode (i.e. setuptools
"develop mode") from a local project path or a VCS url.
π.χ., pip install -e /srv/pkg
όπου /srv/pkg είναι ο κατάλογος ανώτατου επιπέδου όπου μπορεί να βρεθεί το 'setup.py'.
Είμαι αρκετά σίγουρος ότι αυτό που ψάχνετε ονομάζεται επιλογή --find-links
.
Αν και μπορεί να χρειαστεί να δημιουργήσετε ένα εικονικό index.html
για το τοπικό σας ευρετήριο πακέτων, το οποίο θα παραθέτει τους συνδέσμους προς όλα τα πακέτα. Αυτό το εργαλείο βοηθάει:
Αυτή είναι η λύση που κατέληξα να χρησιμοποιήσω:
import pip
def install(package):
# Debugging
# pip.main(["install", "--pre", "--upgrade", "--no-index",
# "--find-links=.", package, "--log-file", "log.txt", "-vv"])
pip.main(["install", "--upgrade", "--no-index", "--find-links=.", package])
if __name__ == "__main__":
install("mypackagename")
raw_input("Press Enter to Exit...\n")
Το συνέθεσα από pip install examples καθώς και από Rikard's answer σε another question. Το όρισμα "--pre" σας επιτρέπει να εγκαταστήσετε μη παραγωγικές εκδόσεις. Το όρισμα "--no-index" αποφεύγει την αναζήτηση στα ευρετήρια του PyPI. Το όρισμα "--find-links=." αναζητά στον τοπικό φάκελο (αυτό μπορεί να είναι σχετικό ή απόλυτο). Χρησιμοποίησα τα επιχειρήματα "--log-file", "log.txt", και "-vv" για αποσφαλμάτωση. Το όρισμα "--upgrade" σας επιτρέπει να εγκαταστήσετε νεότερες εκδόσεις αντί για παλαιότερες.
Βρήκα επίσης έναν καλό τρόπο για να τις απεγκαταστήσετε. Αυτό είναι χρήσιμο όταν έχετε πολλά διαφορετικά περιβάλλοντα Python. Είναι η ίδια βασική μορφή, απλά χρησιμοποιώντας το "uninstall" αντί του "install", με ένα μέτρο ασφαλείας για την αποφυγή ακούσιων απεγκαταστάσεων:
import pip
def uninstall(package):
response = raw_input("Uninstall '%s'? [y/n]:\n" % package)
if "y" in response.lower():
# Debugging
# pip.main(["uninstall", package, "-vv"])
pip.main(["uninstall", package])
pass
if __name__ == "__main__":
uninstall("mypackagename")
raw_input("Press Enter to Exit...\n")
Ο τοπικός φάκελος περιέχει αυτά τα αρχεία: install.py, uninstall.py, mypackagename-1.0.zip