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 und virtualenv nicht mehr separat verwenden. Sie arbeiten zusammen.
  • Die Verwaltung einer Requirements.txt-Datei kann problematisch sein, daher verwendet Pipenv Pipfile und Pipfile.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.
The Latest