Ich verwende pip mit virtualenv, um einige Python-Bibliotheken zu verpacken und zu installieren.
Ich würde mir vorstellen, dass das, was ich tue, ein ziemlich häufiges Szenario ist. Ich bin der Betreuer mehrerer Bibliotheken, für die ich die Abhängigkeiten explizit angeben kann. Einige meiner Bibliotheken sind von Bibliotheken von Drittanbietern abhängig, die transitive Abhängigkeiten aufweisen, auf die ich keinen Einfluss habe.
Was ich erreichen möchte, ist, dass eine pip install
meiner Bibliotheken alle Upstream-Abhängigkeiten herunterlädt / installiert. In der Pip-Dokumentation habe ich Probleme damit, ob / wie Anforderungsdateien dies alleine tun können oder ob sie wirklich nur eine Ergänzung zur Verwendung sind install_requires
.
Würde ich install_requires
in all meinen Bibliotheken Abhängigkeiten und Versionsbereiche angeben und dann nur eine Anforderungsdatei verwenden, um einen Konflikt zu lösen und / oder sie für einen Produktionsbuild einzufrieren?
Stellen wir uns vor, ich lebe in einer imaginären Welt (ich weiß, ich weiß) und meine Upstream-Abhängigkeiten sind unkompliziert und garantieren niemals Konflikte oder brechen die Abwärtskompatibilität. Wäre ich gezwungen, überhaupt eine Pip-Anforderungsdatei zu verwenden, oder würde ich pip / setuptools / Distribute einfach alles basierend darauf installieren lassen install_requires
?
Es gibt hier viele ähnliche Fragen, aber ich konnte keine finden, die so grundlegend waren, als ob man die eine oder die andere oder beide harmonisch zusammen verwenden sollte.
quelle
Antworten:
Meine Philosophie ist, dass
install_requires
ein Minimum von dem angegeben werden sollte, was Sie brauchen. Es kann Versionsanforderungen enthalten, wenn Sie wissen, dass einige Versionen nicht funktionieren. Es sollte jedoch keine Versionsanforderungen geben, bei denen Sie sich nicht sicher sind (z. B. wenn Sie nicht sicher sind, ob eine zukünftige Version einer Abhängigkeit Ihre Bibliothek beschädigen wird oder nicht).Anforderungsdateien sollten andererseits angeben, was Ihrer Meinung nach funktioniert, und können optionale Abhängigkeiten enthalten, die Sie empfehlen. Zum Beispiel könnten Sie SQLAlchemy verwenden, aber MySQL vorschlagen und MySQLdb in die Anforderungsdatei einfügen.
Zusammenfassend lässt sich sagen
install_requires
, dass Personen von Dingen ferngehalten werden sollen, von denen Sie wissen, dass sie nicht funktionieren, während Anforderungsdateien Personen zu Dingen führen, von denen Sie wissen, dass sie funktionieren. Ein Grund dafür ist, dassinstall_requires
Anforderungen immer überprüft werden und nicht deaktiviert werden können, ohne die Paketmetadaten tatsächlich zu ändern. Sie können also nicht einfach eine neue Kombination ausprobieren. Anforderungsdateien werden nur zur Installationszeit überprüft.quelle
setup.py
install_requires=
Bedeutet dies, dass Sie Deps spiegeln solltenrequirements.txt
?-U
da dies die Abhängigkeiten aus der Anforderungsdatei überschreiben könnte. Wie aktualisierst du?Folgendes habe ich in meine setup.py eingefügt:
quelle
--extra-index-url
in die Anforderungen erforderlich war und dies in meinem Gesicht explodierte. Danke @RomainHardouinDas Python Packaging-Benutzerhandbuch enthält eine Seite zu diesem Thema. Ich empfehle Ihnen dringend, sie zu lesen:
Zusammenfassung:
install_requires
Hier werden die Abhängigkeiten des Pakets aufgelistet, die unbedingt installiert werden müssen, damit das Paket funktioniert. Es ist nicht beabsichtigt, die Abhängigkeiten an bestimmte Versionen zu binden, aber Bereiche werden beispielsweise akzeptiertinstall_requires=['django>=1.8']
.install_requires
wird vonpip install name-on-pypi
und anderen Werkzeugen beobachtet.requirements.txt
ist nur eine Textdatei, gegen die Sie laufen könnenpip install -r requirements.txt
. Versionen aller Abhängigkeiten und Unterabhängigkeiten sollen wie folgt angeheftet sein :django==1.8.1
. Sie können eine mit erstellenpip freeze > requirements.txt
. (Einige Dienste, wie Heroku, werden automatischpip install -r requirements.txt
für Sie ausgeführt.)pip install name-on-pypi
Betrachtet nicht, sondernrequirements.txt
nurinstall_requires
.quelle
Ich benutze immer nur ein
setup.py
undinstall_requires
weil es nur einen Ort zum Anschauen gibt. Es ist genauso leistungsfähig wie eine Anforderungsdatei und es müssen keine Duplikate verwaltet werden.quelle