Stellen Sie fest, ob Python in virtualenv ausgeführt wird


272

Kann festgestellt werden, ob das aktuelle Skript in einer virtuellen Umgebung ausgeführt wird?


2
Warum sollten Sie das aus Neugier wissen wollen?
Jorge Leitao

1
Das heißt, Sie können ein benutzerdefiniertes Skript schreiben, das eine Eingabeaufforderung für Ihre Shell generiert, und Sie möchten, dass diese Eingabeaufforderung angibt, ob Sie sich in venv befinden oder nicht. Sie möchten dies also in diesem Code erkennen können, am besten ohne externe Tools aufzurufen .
Marcin Orlowski

Antworten:


227

AFAIK Der zuverlässigste Weg, dies zu überprüfen (und der Weg, der intern in virtualenv und in pip verwendet wird), besteht darin, zu überprüfen, ob sys.real_prefix:

import sys

if hasattr(sys, 'real_prefix'):
    #...

Zeigt in einem virtualenv sys.prefixauf das Verzeichnis virtualenv und sys.real_prefixauf das "echte" Präfix des Python-Systems (häufig /usroder in ähnlicher Form /usr/local).

Außerhalb einer virtuellen Umgebung sys.real_prefixsollte nicht existieren.

Die Verwendung der VIRTUAL_ENVUmgebungsvariablen ist nicht zuverlässig. Es wird vom activateShell-Skript virtualenv festgelegt , eine virtualenv kann jedoch ohne Aktivierung verwendet werden, indem eine ausführbare Datei direkt aus dem Verzeichnis bin/(oder Scripts) der virtualenv ausgeführt wird. In diesem Fall $VIRTUAL_ENVwird sie nicht festgelegt.


11
Dies scheint in Python 3 nicht mehr gültig zu sein.
Dan P.

48
Wenn Sie virtualenv (github.com/pypa/virtualenv) verwenden, ist diese Antwort für Python 2 oder Python 3 gleichermaßen korrekt. Wenn Sie pyvenv ( Legacy.python.org/dev/peps/pep-0405 ), ein virtuelles Env , verwenden -äquivalent in Python 3.3+ integriert (aber nicht dasselbe wie virtualenv), dann wird sys.base_prefix anstelle von sys.real_prefix verwendet und sys.base_prefix ist immer vorhanden. außerhalb eines pyvenv ist es gleich sys.prefix.
Carl Meyer

2
@Kounavi Ich glaube nicht, dass die Windows-Version Auswirkungen haben würde. Diese Antwort ist ein zentraler Bestandteil der Funktionsweise von virtualenv auf jeder Plattform. Ist es möglich, dass Sie Python 3 pyvenv und nicht virtualenv auf dem Windows 2012-Computer verwenden? Oder dass mit dem PFAD etwas los ist und Sie tatsächlich nicht in der virtuellen Umgebung laufen, wenn Sie glauben, dass Sie es sind?
Carl Meyer

3
Einzeiler für Bash-SkriptePYTHON_ENV=$(python -c "import sys; sys.stdout.write('1') if hasattr(sys, 'real_prefix') else sys.stdout.write('0')")
Sam Myers

2
Diese Antwort ist nicht überraschend veraltet . Insbesondere gibt diese Antwort für häufig verwendete Anwendungsfälle falsch negative Ergebnisse zurück. Das ist schlecht. Stattdessen sehen entweder: hroncok ‚s maßgebliche Update korrekt alle Nicht-Anaconda Erkennung VENVS oder Victoria Stuart ‘ s verbindliche Antwort richtig alle Anaconda Erkennung VENVS . ( Alle meine Upvotes für jeden, der diese beiden Antworten kombiniert. )
Cecil Curry

97

Versuchen Sie es mit pip -V(Notizkapital V)

Wenn Sie die virtuelle Umgebung ausführen. Es wird der Pfad zum Standort der Umgebung angezeigt.


Wenn Sie sich virtualenvviel bewegt haben , ist es möglich, dass dies fehlschlägt oder Sie anlügt. Wenn es lügt, kannst du es tun find /path/to/venv/ -type f -exec sed -ie "s:/old/path/to/venv:/path/to/venv:g" {} \+. Wenn es fehlschlägt (ich habe "schlechte Marschalldaten"), müssen Sie die .pyc-Dateien mit löschen find /path/to/venv -type f -name "*.pyc" -exec rm {} \+(keine Sorge, sie werden automatisch neu erstellt).
Jeremysprofile

Ich habe dies gerade unter Windows 10 mit Python 3.7 getestet. Es druckt den Speicherort von pip aus der Standardinstallation ...\lib\site-packagesin der %PATH%. In diesem Fall wird also ein falsches Positiv zurückgegeben.
JamesThomasMoon1979

71

Dies ist eine Verbesserung der akzeptierten Antwort von Carl Meyer . Es funktioniert mit virtualenv für Python 3 und 2 sowie für das venv- Modul in Python 3:

import sys


def is_venv():
    return (hasattr(sys, 'real_prefix') or
            (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix))

Die Prüfung auf sys.real_prefixCover Virtualenv, die Gleichheit von Nicht-Leer sys.base_prefixmit sys.prefixCover Venv.

Stellen Sie sich ein Skript vor, das die folgende Funktion verwendet:

if is_venv():
    print('inside virtualenv or venv')
else:
    print('outside virtualenv or venv')

Und der folgende Aufruf:

$ python2 test.py 
outside virtualenv or venv

$ python3 test.py 
outside virtualenv or venv

$ python2 -m virtualenv virtualenv2
...
$ . virtualenv2/bin/activate
(virtualenv2) $ python test.py 
inside virtualenv or venv
(virtualenv2) $ deactivate

$ python3 -m virtualenv virtualenv3
...
$ . virtualenv3/bin/activate
(virtualenv3) $ python test.py 
inside virtualenv or venv
(virtualenv3) $ deactivate 

$ python3 -m venv venv3
$ . venv3/bin/activate
(venv3) $ python test.py 
inside virtualenv or venv
(venv3) $ deactivate 

4
Da Python 3.3 von den meisten Python 3-Frameworks und -Anwendungen nicht mehr gewartet oder unterstützt wird, reduziert sich diese Funktion jetzt auf einen trivialen Einzeiler : def is_venv(): return hasattr(sys, 'real_prefix') or sys.base_prefix != sys.prefix. Ich sag bloß'.
Cecil Curry

Leider scheint dies mit pipenverstellten virtuellen Umgebungen nicht zu funktionieren .
dragon788

46

Überprüfen Sie die $VIRTUAL_ENVUmgebungsvariable.

Die $VIRTUAL_ENVUmgebungsvariable enthält das Verzeichnis der virtuellen Umgebung in einer aktiven virtuellen Umgebung.

>>> import os
>>> os.environ['VIRTUAL_ENV']
'/some/path/project/venv'

Sobald Sie deactivatedie virtuelle Umgebung ausführen / verlassen, wird die $VIRTUAL_ENVVariable gelöscht / leer. Python löst a aus, KeyErrorweil die Umgebungsvariable nicht gesetzt wurde.

>>> import os
>>> os.environ['VIRTUAL_ENV']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 678, in __getitem__
    raise KeyError(key) from None
KeyError: 'VIRTUAL_ENV'

Dieselben Überprüfungen von Umgebungsvariablen können natürlich auch außerhalb des Python-Skripts in der Shell durchgeführt werden.


1
Dies funktioniert sowohl für eine virtualenvvirtuelle als auch für eine virtuelle venvUmgebung.
Florida

@verboze: wie es sein soll, oder? Eine deaktivierte virtuelle Umgebung bedeutet, dass das Benutzerskript nicht auf einem ausgeführt wird.
MestreLion

Dies prüft, ob eine virtuelle Umgebung aktiviert ist. Dies bedeutet jedoch nicht unbedingt, dass der ausgeführte Python-Prozess von dieser virtuellen Umgebung stammt.
erb

20

Laut dem virtualenv pep unter http://www.python.org/dev/peps/pep-0405/#specification können Sie stattdessen einfach sys.prefix os.environ ['VIRTUAL_ENV'] verwenden.

Das sys.real_prefix ist in meiner virtuellen Umgebung nicht vorhanden und das gleiche gilt für sys.base_prefix.


8
virtualenv ist das eigenständige Projekt, das auf jeder Python-Version ( github.com/pypa/virtualenv ) funktioniert . Das von Ihnen verknüpfte PEP ist für pyvenv, das auf virtualenv basiert, jedoch anders (besser) implementiert und in Python 3.3+ integriert ist. Diese Frage bezieht sich auf virtualenv, nicht auf pyvenv. Sie haben Recht, dass es in einem Pyvenv keine gibt sys.real_prefix.
Carl Meyer

5
Eine gute Möglichkeit, anhand dieser Antwort anhand von Bash zu erkennen, ist das Ausführen von: env |grep VIRTUAL_ENV |wc -l Wenn in einem Venv eine 1 oder wenn nicht, eine 0 zurückgegeben wird.
LISTERINE

3
Wenn Sie sich in einer Shell befinden, können Sie diese einfach [[ -n $VIRTUAL_ENV ]] && echo virtualenvoder [[ -z $VIRTUAL_ENV ]] && echo not virtualenvje nach Ihren Anforderungen verwenden.
Sechs

9

So überprüfen Sie, ob Sie sich in Virtualenv befinden:

import os

if os.getenv('VIRTUAL_ENV'):
    print('Using Virtualenv')
else:
    print('Not using Virtualenv')

Sie können auch mehr Daten zu Ihrer Umgebung abrufen:

import sys
import os

print(f'Python Executable: {sys.executable}')
print(f'Python Version: {sys.version}')
print(f'Virtualenv: {os.getenv("VIRTUAL_ENV")}')

1
Dies ist der beste plattformübergreifende Ansatz (Windows / Unix).
Adi Unnithan

Bisher ist dies nur plattformübergreifend, Python 2 und Python 3 kompatibel. Vielen Dank.
RJ

8

Sie können tun which pythonund sehen, ob es auf das in der virtuellen Umgebung zeigt.


1
whichist unter Windows standardmäßig nicht verfügbar. Sie können wherestattdessen unter Windows verwenden oder whichcraft verwenden . Oder schau es dir an sys.executable. Trotzdem gibt es bessere Methoden.
Florida

8

Hier gibt es mehrere gute und einige weniger robuste Antworten. Hier ist eine Übersicht.

Wie man es nicht macht

Verlassen Sie sich nicht auf den Speicherort von Python oder den site-packagesOrdner.

Wenn diese auf nicht standardmäßige Speicherorte festgelegt sind, bedeutet dies nicht, dass Sie sich tatsächlich in einer virtuellen Umgebung befinden. Benutzer können mehr als eine Python-Version installiert haben, und diese sind nicht immer dort, wo Sie sie erwarten.

Vermeiden Sie:

  • sys.executable
  • sys.prefix
  • pip -V
  • which python

Überprüfen Sie auch nicht auf das Vorhandensein von venv, .venvoder envsin einem dieser Wege. Dies wird für Umgebungen mit einem eindeutigeren Standort unterbrochen. Zum Beispiel Pipenv verwendet Hash - Werte als Namen für seine Umgebungen.

VIRTUAL_ENV Umgebungsvariable

Beides virtualenvund venvlegen Sie die Umgebungsvariable fest, $VIRTUAL_ENVwenn Sie eine Umgebung aktivieren. Siehe PEP 405 .

Sie können diese Variable in Shell-Skripten auslesen oder diesen Python-Code verwenden, um festzustellen, ob sie festgelegt ist.

import os
running_in_virtualenv = "VIRTUAL_ENV" in os.environ

# alternative ways to write this, also supporting the case where
# the variable is set but contains an empty string to indicate
# 'not in a virtual environment':
running_in_virtualenv = bool(os.environ.get("VIRTUAL_ENV"))
running_in_virtualenv = bool(os.getenv("VIRTUAL_ENV"))

Das Problem ist, dass dies nur funktioniert, wenn die Umgebung von der aktiviert wirdactivate Shell-Skript .

Sie können die Skripts der Umgebung starten, ohne die Umgebung zu aktivieren. Wenn dies ein Problem darstellt, müssen Sie eine andere Methode verwenden.

sys.base_prefix

virtualenv, venvUnd pyvenvPunktsys.prefix auf den Python innerhalb des virtualenv installiert , wie man erwarten würde.

Gleichzeitig wird der ursprüngliche Wert von sys.prefixauch als zur Verfügung gestellt sys.base_prefix.

Damit können wir erkennen, ob wir uns in einer virtuellen Umgebung befinden.

import sys
# note: Python versions before 3.3 don't have sys.base_prefix
# if you're not in virtual environment
running_in_virtualenv = sys.prefix != sys.base_prefix

Zurückfallen: sys.real_prefix

Nun pass auf, virtualenvbevor Version 20 nicht eingestellt wurde, sys.base_prefixsondern sys.real_prefixstattdessen eingestellt wurde.

Um sicher zu gehen, überprüfen Sie beide, wie in der Antwort von hroncok vorgeschlagen :

import sys

real_prefix = getattr(sys, "real_prefix", None)
base_prefix = getattr(sys, "base_prefix", sys.prefix)

running_in_virtualenv = (base_prefix or real_prefix) != sys.prefix

Anakonda

Wenn Sie virtuelle Anaconda-Umgebungen verwenden, überprüfen Sie die Antwort von Victoria Stuart .


Das OP fragt "Wie mache ich?", Nicht "Wie NICHT?". Diese Antwort ist übertrieben. Es geht über den Geist der Frage hinaus und verschleiert die Antwort mit zu vielen Variationen. Bitte halten Sie Ihre Antworten so einfach wie möglich und beantworten Sie die Frage direkt.
Rich Lysakowski PhD

Ich fasse hier die verschiedenen Antworten zusammen und gebe Ratschläge, welche für bestimmte Umstände richtig sein könnten. Die ursprüngliche Frage bietet nicht genügend Kontext, um eine dieser Techniken als die "beste" auszuwählen - es ist einfach nicht so einfach.
Florida

1
Im Abschnitt für sys.base_prefix sollte der Test nicht lauten:running_in_virtualenv = sys.*base_*prefix != sys.prefix
usonianhorizon vor

@usonianhorizon Stimmt, danke!
florisla vor

Vielen Dank, @florisia! Ich bin gerade dabei, von virtualenvwrapper auf das integrierte venv für die Anwendungsbereitstellung umzusteigen, und Ihre Erklärung hat mir die Vorlage dazu gegeben. Ich hatte mich nur auf den if hasattr(sys, 'real_prefix'):Test verlassen, der nicht mehr funktionierte.
usonianhorizon vor

5
  • Aktualisiert im November 2019 (im Anhang).

Ich verwende routinemäßig mehrere von Anaconda installierte virtuelle Umgebungen (venv). Mit diesem Code-Snippet / diesen Beispielen können Sie feststellen, ob Sie sich in einem Venv (oder Ihrer Systemumgebung) befinden oder nicht, und außerdem ein bestimmtes Venv für Ihr Skript benötigen.

Zum Python-Skript hinzufügen (Code-Snippet):

# ----------------------------------------------------------------------------
# Want script to run in Python 3.5 (has required installed OpenCV, imutils, ... packages):
import os

# First, see if we are in a conda venv { py27: Python 2.7 | py35: Python 3.5 | tf: TensorFlow | thee : Theano }
try:
   os.environ["CONDA_DEFAULT_ENV"]
except KeyError:
   print("\tPlease set the py35 { p3 | Python 3.5 } environment!\n")
   exit()

# If we are in a conda venv, require the p3 venv:
if os.environ['CONDA_DEFAULT_ENV'] != "py35":
    print("\tPlease set the py35 { p3 | Python 3.5 } environment!\n")
    exit()

# See also:
# Python: Determine if running inside virtualenv
# http://stackoverflow.com/questions/1871549/python-determine-if-running-inside-virtualenv  
# [ ... SNIP! ... ]

Beispiel:

$ p2
  [Anaconda Python 2.7 venv (source activate py27)]

(py27) $ python  webcam_.py
    Please set the py35 { p3 | Python 3.5 } environment!

(py27) $ p3
  [Anaconda Python 3.5 venv (source activate py35)]

(py35) $ python  webcam.py -n50

    current env: py35
    processing (live): found 2 faces and 4 eyes in this frame
    threaded OpenCV implementation
    num_frames: 50
    webcam -- approx. FPS: 18.59
    Found 2 faces and 4 eyes!
(py35) $

Update 1 - Verwendung in Bash-Skripten:

Sie können diesen Ansatz auch in Bash-Skripten verwenden (z. B. solche, die in einer bestimmten virtuellen Umgebung ausgeführt werden müssen). Beispiel (zum Bash-Skript hinzugefügt):

if [ $CONDA_DEFAULT_ENV ]        ## << note the spaces (important in BASH)!
    then
        printf 'venv: operating in tf-env, proceed ...'
    else
        printf 'Note: must run this script in tf-env venv'
        exit
fi

Update 2 [November 2019]

Seit meinem ursprünglichen Beitrag bin ich von Anaconda venv weitergezogen (und Python selbst hat sich nämlich weiterentwickelt virtuelle Umgebungen entwickelt).

Wenn Sie dieses Problem erneut untersuchen, finden Sie hier einen aktualisierten Python-Code, den Sie einfügen können, um zu testen, ob Sie in einer bestimmten virtuellen Python-Umgebung (venv) arbeiten.

import os, re
try:
    if re.search('py37', os.environ['VIRTUAL_ENV']):
        pass
except KeyError:
    print("\n\tPlease set the Python3 venv [alias: p3]!\n")
    exit()

Hier ist ein erklärender Code.

[victoria@victoria ~]$ date; python --version
  Thu 14 Nov 2019 11:27:02 AM PST
  Python 3.8.0

[victoria@victoria ~]$ python
  Python 3.8.0 (default, Oct 23 2019, 18:51:26) 
  [GCC 9.2.0] on linux
  Type "help", "copyright", "credits" or "license" for more information.

>>> import os, re

>>> re.search('py37', os.environ['VIRTUAL_ENV'])
<re.Match object; span=(20, 24), match='py37'>

>>> try:
...     if re.search('py37', os.environ['VIRTUAL_ENV']):
...       print('\n\tOperating in Python3 venv, please proceed!  :-)')
... except KeyError:
...     print("\n\tPlease set the Python3 venv [alias: p3]!\n")
... 

    Please set the Python3 venv [alias: p3]!

>>> [Ctrl-d]
  now exiting EditableBufferInteractiveConsole...

[victoria@victoria ~]$ p3
  [Python 3.7 venv (source activate py37)]

(py37) [victoria@victoria ~]$ python --version
  Python 3.8.0

(py37) [victoria@victoria ~]$ env | grep -i virtual
  VIRTUAL_ENV=/home/victoria/venv/py37

(py37) [victoria@victoria ~]$ python
  Python 3.8.0 (default, Oct 23 2019, 18:51:26) 
  [GCC 9.2.0] on linux
  Type "help", "copyright", "credits" or "license" for more information.

>>> import os, re
>>> try:
...     if re.search('py37', os.environ['VIRTUAL_ENV']):
...       print('\n\tOperating in Python3 venv, please proceed!  :-)')
... except KeyError:
...     print("\n\tPlease set the Python3 venv [alias: p3]!\n")
... 

    Operating in Python3 venv, please proceed!  :-)
>>> 

3

Am einfachsten ist es, einfach auszuführen: which pythonWenn Sie sich in einer virtuellen Umgebung befinden, zeigt diese auf ihre Python anstatt auf die globale


1
Ich denke nicht, dass dies tatsächlich die Frage beantwortet (die sich um das "aktuelle Skript" kümmert). Dies beantwortet jedoch meine spezielle Frage: "Wie finde ich über die Befehlszeile heraus, ob ich mich in einer virtuellen Umgebung befinde?"
Ukrutt

1

(bearbeitet) Ich habe so gefunden, was denkst du darüber? (Es gibt auch den venv-Basispfad zurück und funktioniert sogar für Readthedocs, bei denen das Überprüfen der env- Variablen nicht funktioniert.):

import os
import sys
from distutils.sysconfig import get_config_vars


def get_venv_basedir():
    """Returns the base directory of the virtualenv, useful to read configuration and plugins"""

    exec_prefix = get_config_vars()['exec_prefix']

    if hasattr(sys, 'real_prefix') is False or exec_prefix.startswith(sys.real_prefix):
        raise EnvironmentError('You must be in a virtual environment')

    return os.path.abspath(get_config_vars()['exec_prefix'] + '/../')

0

Es gibt hier bereits viele großartige Methoden, aber nur eine weitere:

import site
site.getsitepackages()

Hier erfahren Sie, wo pipdie Pakete installiert sind.


Dies sagt nicht aus, ob Python in einer virtuellen Umgebung ausgeführt wird oder nicht.
Florida

@florisla Könnten Sie näher darauf eingehen? Wenn site.getsitepackages()ein Verzeichnis ausgegeben wird, das nicht das Systemverzeichnis ist, können Sie daraus schließen, dass Sie sich in einer virtuellen Umgebung befinden.
flow2k

Sie können Python an mehreren Orten installieren. Unter Windows können Sie beispielsweise eine 'System'-Python- und eine WinPython-Distribution sowie eine Conda-basierte Python installieren. Diese haben alle unterschiedliche Site-Package-Ordner, werden jedoch nicht unbedingt von a erstellt (oder in a verwendet) virtualenv.
Florida

@florisla Guter Punkt - Ich habe gerade gesehen, dass dies (venv oder nicht) das ist, was die Frage stellt (ich hatte eine ähnliche Antwort für eine andere Frage geschrieben). Ich bin damit einverstanden, dass dies möglicherweise nicht die todsichere Antwort darauf gibt, ob Sie sich in einem Venv befinden oder nicht, aber es könnte Ihnen helfen, Ihnen zu sagen, welches Python oder welches venvSie verwenden.
flow2k

-1

Es ist nicht kugelsicher, aber für UNIX-Umgebungen einfach zu testen

if run("which python3").find("venv") == -1:
    # something when not executed from venv

funktioniert gut für mich. Es ist einfacher, als vorhandene Attribute zu testen, und trotzdem sollten Sie Ihr venv-Verzeichnis benennen venv.


-1

Unter Windows sehen Sie ungefähr Folgendes:

C:\Users\yourusername\virtualEnvName\Scripts>activate
(virtualEnvName) C:\Users\yourusername\virtualEnvName\Scripts>

Klammern bedeuten, dass Sie sich tatsächlich in der virtuellen Umgebung "virtualEnvName" befinden.


Sie und ich können 'virtualEnvName' gut lesen. Die Frage ist jedoch, wie ein Python-Modul dies lesen kann.
Florida

-1

Eine mögliche Lösung ist:

os.access(sys.executable, os.W_OK)

In meinem Fall wollte ich wirklich nur herausfinden, ob ich Elemente mit Pip so wie sie sind installieren kann. Obwohl dies möglicherweise nicht in allen Fällen die richtige Lösung ist, sollten Sie einfach prüfen, ob Sie über Schreibberechtigungen für den Speicherort der ausführbaren Python-Datei verfügen.

Hinweis: Dies funktioniert in allen Versionen von Python, wird jedoch auch zurückgegeben, Truewenn Sie das System Python mit ausführen sudo. Hier ist ein möglicher Anwendungsfall:

import os, sys
can_install_pip_packages = os.access(sys.executable, os.W_OK)

if can_install_pip_packages:
    import pip
    pip.main(['install', 'mypackage'])

-1

Dies ist eine alte Frage, aber zu viele Beispiele oben sind zu kompliziert.

Halten Sie es einfach: (in Jupyter Notebook oder Python 3.7.1 Terminal unter Windows 10)


import sys
print(sys.executable)```

# example output: >> `C:\Anaconda3\envs\quantecon\python.exe`

OR 
```sys.base_prefix```

# Example output: >> 'C:\\Anaconda3\\envs\\quantecon'

Wenn Sie eine Logik hinzufügen, um das Vorhandensein envsin diesem Pfad zu überprüfen , funktioniert dies nicht mehr, wenn Sie von Anaconda nach virtualenvoder wechseln pipenv.
Florida

Florisla, Sie haben Ihre Antwort "Wie man es nicht macht" fast 3 Monate nachdem ich eine Antwort gegeben habe, die für mich in Grenzen funktioniert (ich bewege mich nicht zwischen virtualenv und pipenv). Es ist ein schlechter Sport, die Antworten anderer Leute herabzustimmen, um das eigene Aussehen zu verbessern.
Rich Lysakowski PhD

Reich, was für Sie funktioniert, funktioniert möglicherweise nicht für andere Menschen. Es funktioniert möglicherweise nicht einmal für das Originalplakat.
Florida
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.