Ich bin mir nicht sicher, ob dies ein erwartetes Verhalten ist, aber aus Sicht der Nutzung scheint dies ein Fehler zu sein:
pipenv install <package_name>
erstellt eine neue virtuelle Umgebung, obwohl die virtuelle Umgebung mit pipenv shell
aktiviert wurde.
wenn wir uns nicht im selben Verzeichnis befinden, in dem sich Pipfile
befindet.
$ python -V
== 3.6.3$ pipenv --version
== Version 8.3.1Wenn wir uns in einer aktivierten virtualenv-Shell befinden (unabhängig von pwd
) sollte pipenv install
respektieren und die Pipfile
korrekt aktualisieren und sollte kein neues Pipfile
erstellen.
Es wird ein neues Pipfile erstellt, auch wenn in derselben aktivierten virtualenv, aber in einem anderen Verzeichnis.
$ mkdir -p testproject/app
$ cd testproject/app
$ pipenv install flask
$ pipenv shell # environment gets activated here
$ <my_new_environment>$ cd .. # Now we are inside testproject
$ pipenv install requests
$ New Pipfile gets created here
Hallo @ansrivas! Dies ist nicht der beabsichtigte Fluss von Pipenv. Pipenv verwendet eine virtuelle Umgebung, wenn es sich anfangs in einer befindet, jedoch nicht bei allen nachfolgenden Aufrufen. Sie hätten ein ziemlich haariges Nest von Virtualenvs! Wenn Sie zu einem Ordner navigieren, der sich außerhalb des Projekts befindet, erstellt pipenv eine neue Pipdatei. Wenn Sie nur einige Pakete außerhalb des Ordners installieren möchten, aber innerhalb der Virutalen-Umgebung, die Sie in der Subshell aktiviert haben, können Sie pipenv shell
und dann pip install requests
ausführen. Pipenv kann verwendet werden, um eine Virtualenv für Ihr Projekt zu erstellen, aber es ist an sich kein Virtualenv-Manager, sondern ein Projektmanager.
@erinxocon Und hier liegt das Problem: Benutzer erwarten, dass pipenv ein Ersatz für pip ist.
@kennethreitz hat es selbst auf der pipenv-Homepage gesagt:
Sie müssen pip und virtualenv nicht mehr separat verwenden. Sie arbeiten zusammen.
pipenv soll die virtualenv nicht nur erstellen, wie Sie sagten, sondern auch verwalten . Auch hier wird es explizit auf der Homepage erwähnt (Hervorhebung von mir):
Es erstellt und verwaltet automatisch eine virtuelle Umgebung für Ihre Projekte und fügt Pakete zu Ihrem Pipfile hinzu/entfernt sie, während Sie Pakete installieren/deinstallieren.
Früher, als wir virtualenv und pip getrennt verwendeten, konnten wir zu jedem Verzeichnis und pip install
navigieren, und das Paket wurde korrekt in virtualenv installiert -Managed Virtualenv ist aktiviert_ bricht die Erwartungen des Benutzers.
Da stimme ich
Es wird erwartet, dass pipenv
die aktive virtuelle Umgebung verwalten sollte.
In ähnlicher Weise ... Ich sollte in der Lage sein, -r
zu verwenden, um eine externe Pipfile oder Pipenv.lock in die aktuelle Virtualenv zu installieren und keine andere zu erstellen.
Hilfreichster Kommentar
@erinxocon Und hier liegt das Problem: Benutzer erwarten, dass pipenv ein Ersatz für pip ist.
@kennethreitz hat es selbst auf der pipenv-Homepage gesagt:
pipenv soll die virtualenv nicht nur erstellen, wie Sie sagten, sondern auch verwalten . Auch hier wird es explizit auf der Homepage erwähnt (Hervorhebung von mir):
Früher, als wir virtualenv und pip getrennt verwendeten, konnten wir zu jedem Verzeichnis und
pip install
navigieren, und das Paket wurde korrekt in virtualenv installiert -Managed Virtualenv ist aktiviert_ bricht die Erwartungen des Benutzers.