28. August 2021
Python | Virtuelle Umgebung mit pipenv
Pipenv: Python-Entwicklungsworkflow für Menschen
Pipenv ist ein Tool, das darauf abzielt, das Beste aller Verpackungswelten (Bündel, Composer, NPM, Cargo, Garn usw.) in die Python-Welt zu bringen. Windows ist in unserer Welt ein erstklassiger Bürger.
Es erstellt und verwaltet automatisch eine virtuelle Umgebung für Ihre Projekte und fügt Pakete zu Ihrer Pipfile
hinzu/entfernt sie, während Sie Pakete installieren/deinstallieren. Es generiert auch das immer wichtige Pipfile.lock
, das verwendet wird, um deterministische Builds zu erstellen.
Die Probleme, die Pipenv zu lösen versucht, sind vielschichtig:
- Sie müssen
pip
undvirtualenv
nicht mehr separat verwenden. Sie arbeiten zusammen. - Die Verwaltung einer Requirements.txt-Datei kann problematisch sein, daher verwendet
Pipenv Pipfile
undPipfile.lock
, um abstrakte Abhängigkeitsdeklarationen von der zuletzt getesteten Kombination zu trennen. - Hashes werden immer und überall verwendet. Sicherheit. Sicherheitslücken automatisch aufdecken.
- Empfehlen Sie dringend die Verwendung der neuesten Versionen von Abhängigkeiten, um Sicherheitsrisiken durch veraltete Komponenten zu minimieren.
- Geben Sie Einblick in Ihr Abhängigkeitsdiagramm (z. B.
pipenv graph
). - Optimieren Sie den Entwicklungsworkflow durch Laden von
.env
-Dateien.
Installation
Installieren Sie pipenv
über das Kommando pip
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">pip install pipenv
Beispiele
Virtuelle Umgebungmit Python 3.9 erstellen
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> pipenv --python 3.9
E:\> type .\Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
[dev-packages]
[requires]
python_version = "3.9"
Verzeichnisse der virtuellen Umgebung anzeigen
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> pipenv --where
E:\
E:\> pipenv --venv
C:\Users\workshop.virtualenvs\pipenv-python39-FzfGexFj
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="1" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> get-command python
CommandType Name Version Source
----------- ---- ------- ------
Application python.exe 3.9.6150.… C:\Users\workshop\.virtualenvs\pipenv-python39-FzfGexFj\Scripts\python.exe
Die virtuelle Umgebung wird im Verzeichnis des Benutzer erstellt, im Unterordner .virtualenv
.
Sollte ihr Projekt die Anforderung haben, das die virtuelle Umgebung im Projektordner erstellt wird, dann gibt es hierfür zwei Möglichkeiten:
- Erstellen Sie im Projektordner einen Unterordner
.venv
- Verwenden Sie die Umgebungsvariable
PIPENV_VENV_IN_PROJECT
.
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title=""> E:\> $ENV:PIPENV_VENV_IN_PROJECT=1 && pipenv --python 3.9
Creating a virtualenv for this project...
Pipfile: E:\Pipfile
Using D:/Python/3.9.6/python.exe (3.9.6) to create virtualenv...
[=== ] Creating virtual environment...created virtual environment CPython3.9.6.final.0-64 in 262969ms
creator CPython3Windows(dest=E:\.venv, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\rg\AppData\Local\pypa\virtualenv)
added seed packages: pip==21.1.3, setuptools==57.1.0, wheel==0.36.2
activators BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
Successfully created virtual environment!
Um für alle zu Erstellenden virtuellen Umgebungen das Verzeichnis anzupassen, kann die Umgebungsvariable WORKON_HOME
verwendet werden.
Wechseln in die virtuelle Umgebung
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> pipenv shell
Launching subshell in virtual environment...
PowerShell 7.2.0-preview.6
Copyright (c) Microsoft Corporation.
Virtuelle Umgebung verlassen
Verlassen Sie die virtuelle Umgebung einfach, indem sie die neu gestartete Subshell beenden
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> exit
Prüfen, ob man in einer virtuellen Umgebung arbeitet
Prüfen Sie, welches Python Version verwendet wird
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> Get-Command python
CommandType Name Version Source
----------- ---- ------- ------
Application python.exe 3.9.6150.… E:\.venv\Scripts\python.exe
Prüfen sie, welche PIP Version verwendet wird:
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> pip -V
pip 21.1.3 from E:\.venv\lib\site-packages\pip (python 3.9)
Prüfen Sie die Umgebungsvariable PIPENV_ACTIVE
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\>$ENV:PIPENV_ACTIVE
1
Löschen einer virtuellen Umgebung im aktuellen Verzeichnis
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> pipenv --rm
Removing virtualenv (C:\Users\workshop\.virtualenvs\pipenv-python39-FzfGexFj)...
Installieren eines Paketes
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="1" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> pipenv install fastapi
Installing fastapi...
Adding fastapi to Pipfile's [packages]...
Installation Succeeded
Pipfile.lock (16c839) out of date, updating to (4f56a0)...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
Success!
Updated Pipfile.lock (4f56a0)!
Installing dependencies from Pipfile.lock (4f56a0)...
================================ 0/0 - 00:00:00
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
Der neue Inhalt der Konfigurationsdatei Pipfile
:
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="8" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> type Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
fastapi = "*"
[dev-packages]
[requires]
python_version = "3.9"
Install all dependencies for a project (including dev)
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="1" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> pipenv install --dev
Pipfile.lock not found, creating...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Updated Pipfile.lock (16c839)!
Installing dependencies from Pipfile.lock (16c839)...
================================ 0/0 - 00:00:00
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
Erstellen einer Lockdatei Pipenv.lock mit den aktuell installierten Releases
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> pipenv lock --pre
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Updated Pipfile.lock (16c839)!
Show a graph of your installed dependencies:
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="1" data-enlighter-language="shell" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> pipenv graph
fastapi==0.68.0
- pydantic [required: >=1.6.2,<2.0.0,!=1.8.1,!=1.8,!=1.7.3,!=1.7.2,!=1.7.1,!=1.7, installed: 1.8.2]
- typing-extensions [required: >=3.7.4.3, installed: 3.10.0.0]
- starlette [required: ==0.14.2, installed: 0.14.2]
Oder mit dem Ausgabeformat JSON
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title=""> E:\> pipenv graph --json-tree
Überprüfen der installierten Abhängigkeiten auf Sicherheitslücken
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> pipenv check
Checking PEP 508 requirements...
Passed!
Checking installed package safety...
All good!
Ausführen eines Kommandos in der virtuellen Umgebung
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> pipenv run pip -V
pip 21.1.3 from C:\Users\rg.virtualenvs\app-pipenv-tgP0nh4t\lib\site-packages\pip (python 3.9)
Ausführen eines Pip-Kommandos
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">E:\> pipenv run pip freeze
fastapi==0.68.0
pydantic==1.8.2
starlette==0.14.2
typing-extensions==3.10.0.0
Kommandozeile
Optionen
<pre class="EnlighterJSRAW" data-enlighter-group="" data-enlighter-highlight="" data-enlighter-language="generic" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-theme="" data-enlighter-title="">--where Output project home information.
--venv Output virtualenv information.
--py Output Python interpreter information.
--envs Output Environment Variable options.
--rm Remove the virtualenv.
--bare Minimal output.
--completion Output completion (to be executed by the shell).
--man Display manpage.
--support Output diagnostic information for use in GitHub issues.
--site-packages / --no-site-packages
Enable site-packages for the virtualenv.
env var: PIPENV_SITE_PACKAGES]
--python TEXT Specify which version of Python virtualenv should use.
--three / --two Use Python 3/2 when creating virtualenv.
--clear Clears caches (pipenv, pip, and pip-tools).
env var: PIPENV_CLEAR]
-v, --verbose Verbose mode.
--pypi-mirror TEXT Specify a PyPI mirror.
--version Show the version and exit.
-h, --help Show this message and exit.