Ich habe eine requirements.txt
Datei mit einer Liste von Paketen, die für meine virtuelle Umgebung benötigt werden. Ist es möglich herauszufinden, ob alle in der Datei genannten Pakete vorhanden sind? Wenn einige Pakete fehlen, wie finde ich heraus, welche Pakete fehlen?Wie überprüfe ich, ob mein Python alle benötigten Pakete hat?
Antwort
Die pythonic Art und Weise es zu tun ist über die pkg_resources
API. Die Anforderungen sind in einem Format verfasst, das von setsetools verstanden wird. Z. B:
Werkzeug>=0.6.1
Flask
Django>=1.3
Der Beispielcode:
import pkg_resources
from pkg_resources import DistributionNotFound, VersionConflict
# dependencies can be any iterable with strings,
# e.g. file line-by-line iterator
dependencies = [
'Werkzeug>=0.6.1',
'Flask>=0.9',
]
# here, if a dependency is not met, a DistributionNotFound or VersionConflict
# exception is thrown.
pkg_resources.require(dependencies)
Sie können pip freeze
ausführen, um zu sehen, was Sie installiert haben und vergleichen Sie es mit Ihrer requirements.txt
Datei.
Wenn Sie fehlende Module installieren möchten, können Sie pip install -r requirements.txt
ausführen, und das wird fehlende Module installieren und Ihnen am Ende sagen, welche fehlten und installiert wurden.
Wenn requirements.txt ist wie:
django
oursql
sys
notexistingmodule
Dann wird das folgende Skript wird Ihnen sagen, welche Module fehlen:
#!/usr/bin/python3
fname = 'requirements.txt'
with open(fname, 'r', encoding='utf-8') as fhd:
for line in fhd:
try:
exec("import " + line)
except:
print("[ERROR] Missing module:", line)
Dies würde drucken:
[ERROR] Missing module: notexistingmodule
Dies würde fehlschlagen, wenn die requirements.txt Versionsinformationen enthält, z. 'django == 1.5.1' –
Tatsächlich. Und es wird fehlschlagen, wenn Module auch in einer Zeile aufgeführt sind. Es wird, wie gesagt, funktionieren, wenn die requirements.txt ein Modul pro Zeile auflistet. –
Sind Sie sicher, dass der Paketname mit dem Modulnamen übereinstimmt? – warvariuc
Sie einen virtualenv mit Zugriff auf die System Website-Pakete erstellen und testen, prüfen, ob das Paket (oder eine andere Abhängigkeiten) installiert ist oder nicht. Auf diese Weise werden die Pakete nicht wirklich installiert (wenn Sie nur überprüfen möchten). Ein Beispiel virtualenv wrapper Verwendung wäre:
$ cat requirements.txt
requests
simplejson
$ mkvirtualenv --system-site-packages test
Running virtualenv with interpreter /usr/bin/python2
New python executable in test/bin/python2
Also creating executable in test/bin/python
Installing setuptools, pip...done.
$ pip install -r requirements.txt
Downloading/unpacking requests (from -r requirements.txt (line 1))
Downloading requests-2.10.0-py2.py3-none-any.whl (506kB): 506kB downloaded
Requirement already satisfied (use --upgrade to upgrade): simplejson in /usr/lib/python2.7/dist-packages (from -r requirements.txt (line 2))
Installing collected packages: requests
Successfully installed requests
Cleaning up...
$ pip install -r requirements.txt
Requirement already satisfied (use --upgrade to upgrade): requests in /home/yucer/.virtualenvs/test/lib/python2.7/site-packages (from -r requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): simplejson in /usr/lib/python2.7/dist-packages (from -r requirements.txt (line 2))
Cleaning up...
$ deactivate
$ rmvirtualenv test
Removing test...
Basierend auf der answer by Zaur, vorausgesetzt, Sie sind in der Tat eine requirements.txt
-Datei verwenden, können Sie ein Gerät zu testen möchten, vielleicht in tests/test_requirements.py
, dass bestätigt die Verfügbarkeit von Paketen.
Der allgemeine Ansatz ist:
import pathlib
import unittest
import pip
import pkg_resources
class TestRequirements(unittest.TestCase):
def test_requirements(self): # pylint: disable=no-self-use
"""Recursively confirm that requirements are available.
This implementation is tested to be compatible with pip 9.0.1.
"""
requirements_path = pathlib.Path(__file__).parents[1]/'requirements.txt'
requirements = pip.req.parse_requirements(str(requirements_path), session=pip.download.PipSession())
requirements = [str(r.req) for r in requirements]
pkg_resources.require(requirements)
Beachten Sie, dass diese Antwort pathlib
verwendet, die in Python 3, aber nicht in Python 2. Bei der Verwendung von Python 2, installieren Sie zunächst die Rückportierung für sie die pathlib2
ist verfügbar.
Das ist wirklich eine großartige Idee! –
- 1. Python: Wie kann ich feststellen, ob mein Python SSL hat?
- 2. C | Wie überprüfe ich, ob mein Eingabepuffer (Stdin) leer ist?
- 3. Wie überprüfe ich, ob mein Array ein Objekt enthält?
- 4. Wie überprüfe ich, ob ContactsContract ein Foto hat oder nicht?
- 5. Wie überprüfe ich, ob mein ISP Port 25 blockiert?
- 6. Wie überprüfe ich, ob mein Programm Daten in es piped hat
- 7. Wie überprüfe ich, ob mein shared hosting Provider mod_gzip installiert hat?
- 8. Wie überprüfe ich, ob meine Lösung nicht verwalteten Code hat?
- 9. Wie überprüfe ich, ob eine SqlDataSource Daten zurückgegeben hat?
- 10. iphone - Wie überprüfe ich, ob NSMutableArray ObjectAtIndex keinen Wert hat
- 11. Wie überprüfe ich, ob EditText einen Wert hat?
- 12. Wie überprüfe ich mein Byte Flag?
- 13. Wie überprüfe ich, ob ich in Python unter Windows laufe?
- 14. Wie überprüfe ich, ob alle Codepfade einen Wert zurückgeben
- 15. rvm installieren Rubin 1.9.3: Fehlende benötigten Pakete
- 16. Wie überprüfe ich, ob ein couchdb Dokument existiert mit Python
- 17. Wie überprüfe ich in Python, ob eine Variable existiert?
- 18. Wie überprüfe ich, ob ein NSTimer läuft?
- 19. Wie überprüfe ich, ob eine Zeichenfolge ALLE Buchstaben des Alphabets in Python enthält?
- 20. Wie überprüfe ich, ob session_start eingegeben wurde?
- 21. iOS Wie überprüfe ich, ob gerade telefoniert
- 22. Wie überprüfe ich, ob Bitmaske Bit enthält?
- 23. Wie überprüfe ich, ob Server.GetLastError() = System.Web.UI.ViewStateException?
- 24. Wie überprüfe ich, ob eine IsolatedStorageFile existiert?
- 25. Wie überprüfe ich, ob ich VCRedist installieren muss?
- 26. Wie überprüfe ich am besten, ob ein Cookie existiert?
- 27. Wie überprüfe ich, wann mein ListView fertig gezeichnet wurde?
- 28. Wie überprüfe ich, ob eine Liste sortiert ist?
- 29. Ich habe ein Rechteck erstellt, wie überprüfe ich, ob die Maus darauf geklickt hat?
- 30. Wie überprüfe ich, ob ein Feld eine Anmerkung hat, wenn ich Reflektion verwende?
Als ein Bonus erkennt dies automatisch rekursiv widersprüchliche Versionsanforderungen - diese wären unerfüllbar. –