Ich habe kürzlich Conda entdeckt nachdem ich Probleme bei der Installation von SciPy hatte, insbesondere auf einer Heroku-App, die ich entwickle.
Mit Conda erstellen Sie Umgebungen, die denen von virtualenv sehr ähnlich sind . Meine Fragen sind:
- Wenn ich Conda verwende, wird es die Notwendigkeit von virtualenv ersetzen? Wenn nicht, wie verwende ich die beiden zusammen? Installiere ich virtualenv in Conda oder Conda in virtualenv?
- Muss ich noch pip verwenden? Wenn ja, kann ich weiterhin Pakete mit pip in einer isolierten Umgebung installieren?
Antworten:
Conda ersetzt virtualenv. Meiner Meinung nach ist es besser. Es ist nicht auf Python beschränkt, sondern kann auch für andere Sprachen verwendet werden. Nach meiner Erfahrung bietet es eine viel reibungslosere Erfahrung, insbesondere für wissenschaftliche Pakete. Das erste Mal, dass ich MayaVi richtig auf dem Mac installiert habe, war mit
conda
.Sie können immer noch verwenden
pip
. In der Tat wird in jeder neuen Umgebungconda
installiertpip
. Es kennt Pip-installierte Pakete.Beispielsweise:
listet alle in Ihrer aktuellen Umgebung installierten Pakete auf. Von Conda installierte Pakete werden folgendermaßen angezeigt:
und diejenigen, die über installiert sind,
pip
haben den<pip>
Marker:quelle
<pip>
zeigt, dass es mit pip installiert wurde, ansonsten wird es mit conda installiert.Kurze Antwort ist, Sie brauchen nur conda.
Conda kombiniert die Funktionen von pip und virtualenv effektiv in einem einzigen Paket, sodass Sie virtualenv nicht benötigen, wenn Sie conda verwenden.
Sie wären überrascht, wie viele Pakete conda unterstützt. Wenn es nicht ausreicht, können Sie pip under conda verwenden.
Hier ist ein Link zur Conda-Seite, auf der Conda, Pip und Virtualenv verglichen werden:
https://docs.conda.io/projects/conda/en/latest/commands.html#conda-vs-pip-vs-virtualenv-commands .
quelle
Virtuelle Umgebungen und
pip
Ich werde das hinzufügen Erstellen und Entfernen von Conda-Umgebungen mit Anaconda einfach ist.
In einem (n Installieren Sie aktivierten Umgebung Pakete über
conda
oderpip
:Diese Umgebungen sind stark an die pip-ähnliche Paketverwaltung von conda gebunden , sodass es einfach ist, Umgebungen zu erstellen und sowohl Python- als auch Nicht-Python-Pakete zu installieren.
Jupyter
Zusätzlich, Installation
ipykernel
in einer Umgebung eine neue Liste im Dropdown-Menü Kernel von Jupyter-Notebooks hinzugefügt, wodurch reproduzierbare Umgebungen auf Notebooks erweitert werden. Ab Anaconda 4.1 wurden Erweiterungen hinzugefügt , mit denen Notebooks einfacher erweitert werden können.Verlässlichkeit
Nach meiner Erfahrung ist conda schneller und zuverlässiger bei der Installation großer Bibliotheken wie
numpy
undpandas
. Wenn Sie den erhaltenen Zustand einer Umgebung übertragen möchten, können Sie dies auch tun, indem Sie eine Umgebung freigeben oder klonen .quelle
Durch die Installation von Conda können Sie Python-Umgebungen nach Ihren Wünschen erstellen und entfernen und erhalten somit die gleichen Funktionen wie virtualenv .
Bei beiden Distributionen können Sie einen isolierten Dateisystembaum erstellen, in dem Sie Python-Pakete (wahrscheinlich mit pip) nach Ihren Wünschen installieren und entfernen können. Dies kann nützlich sein, wenn Sie unterschiedliche Versionen derselben Bibliothek für unterschiedliche Anwendungsfälle haben möchten oder einfach nur eine Distribution ausprobieren und diese anschließend entfernen möchten, um Speicherplatz zu sparen.
Unterschiede:
Lizenzvereinbarung. Während virtualenv unter die liberalste MIT-Lizenz fällt, Conda eine BSD-Lizenz mit drei Klauseln.
Conda bietet Ihnen ein eigenes Paketkontrollsystem. Dieses Paketsteuerungssystem bietet häufig vorkompilierte Versionen (für die meisten gängigen Systeme) gängiger Nicht-Python-Software, mit denen sich einige maschinelle Lernpakete auf einfache Weise zum Laufen bringen lassen. Sie müssen nämlich keinen optimierten C / C ++ - Code für Ihr System kompilieren. Während es für die meisten von uns eine große Erleichterung ist, kann es die Leistung solcher Bibliotheken beeinträchtigen.
Im Gegensatz zu virtualenv dupliziert Conda einige Systembibliotheken zumindest auf Linux-Systemen. Diese Bibliotheken können nicht mehr synchron sein, was zu einem inkonsistenten Verhalten Ihrer Programme führt.
Urteil:
Conda ist großartig und sollte Ihre Standardwahl sein, wenn Sie mit maschinellem Lernen beginnen. Sie sparen Zeit beim Spielen mit gcc und zahlreichen Paketen. Conda ersetzt jedoch nicht virtualenv. Dies führt zu einer zusätzlichen Komplexität, die möglicherweise nicht immer erwünscht ist. Es kommt unter anderer Lizenz. Möglicherweise möchten Sie die Verwendung von conda in verteilten Umgebungen oder auf HPC-Hardware vermeiden.
quelle
conda
installierten Software und Bibliotheken. Und in HPCconda
ist es in vielen Fällen vorzuziehen, tatsächlich wird es von HPC-Administratoren verwendet, um Dinge wiemodule
Systeme zu ersetzen . Es ermöglicht vom Benutzer installierte Software und eine stärkere Software-Isolation, zwei große Probleme bei HPC. Die einzige Einschränkung, die ich erlebe, ist, dass viele HPC-Dateisysteme die Anzahl der Dateien in einem Verzeichnis stark einschränken und conda viele 1000 Dateien erstellt.Ich benutze beide und (Stand: Januar 2020) sie haben einige oberflächliche Unterschiede, die sich für mich für unterschiedliche Verwendungen eignen. Mit dem Standard bevorzugt Conda eine Liste der Umgebungen für Sie in einem zentralen Standort aus zu verwalten, während virtualenv einen Ordner im aktuellen Verzeichnis macht. Ersteres (zentralisiert) ist sinnvoll, wenn Sie z. B. maschinelles Lernen betreiben und nur über ein paar breite Umgebungen verfügen, die Sie in vielen Projekten verwenden und von überall aus darauf zugreifen möchten. Letzteres (pro Projektordner) ist sinnvoll, wenn Sie kleine einmalige Projekte mit völlig unterschiedlichen Lib-Anforderungen durchführen, die wirklich mehr zum Projekt selbst gehören.
Die leere Umgebung, die Conda erstellt, ist ungefähr 122 MB groß, während die virtuelle Umgebung ungefähr 12 MB groß ist. Dies ist ein weiterer Grund, warum Sie Conda-Umgebungen möglicherweise nicht überall verteilen möchten.
Ein weiterer oberflächlicher Hinweis darauf, dass Conda seine zentralisierten Envs bevorzugt, ist, dass (wieder standardmäßig), wenn Sie eine Conda-Env in Ihrem eigenen Projektordner erstellen und aktivieren, das in Ihrer Shell angezeigte Namenspräfix das (viel zu lange) Absolut ist Pfad zum Ordner. Sie können dies beheben, indem Sie ihm einen Namen geben, aber virtualenv macht standardmäßig das Richtige.
Ich gehe davon aus, dass diese Informationen schnell veralten werden, wenn die beiden Paketmanager um die Vorherrschaft kämpfen, aber dies sind die Kompromisse ab heute :)
quelle
pipenv
?Eine weitere neue Option und meine derzeit bevorzugte Methode, um eine Umgebung zum Laufen zu bringen, ist Pipenv
Es ist derzeit das offiziell empfohlene Python-Verpackungstool von Python.org
quelle
pipenv --two
für Python2 und pipenv - drei für Python3Ja,
conda
ist viel einfacher zu installieren alsvirtualenv
und ersetzt letzteres.quelle
virtualenv
durch ein allgemeineres Verwaltungstool für virtuelle Umgebungenconda
. Außerdem ist Anaconda nur eine Python + -Distribution, die das Conda-Tool enthält. Die Frage (und Antwort) betrifft nur Conda.Ich arbeite in Unternehmen, hinter mehreren Firewalls mit Maschinen, auf denen ich keinen Administratorzugriff habe
In meiner begrenzten Erfahrung mit Python (2 Jahre) bin ich auf einige Bibliotheken (JayDeBeApi, sasl) gestoßen, die bei der Installation über Pip einen Fehler mit C ++ - Abhängigkeitsfehlern verursachten: Microsoft Visual C ++ 14.0 ist erforderlich. Holen Sie es sich mit "Microsoft Visual C ++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
diese wurden gut mit conda installiert, daher habe ich seit jenen Tagen angefangen, mit conda env zu arbeiten. Es ist jedoch nicht einfach zu verhindern, dass conda Abhängigkeiten in c.programfiles installiert, auf die ich keinen Schreibzugriff habe.
quelle