497 Stimmen

Feststellen, ob Python in virtualenv ausgeführt wird

Ist es möglich, festzustellen, ob das aktuelle Skript in einer Virtualenv-Umgebung ausgeführt wird?

28voto

chronossc Punkte 415

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

die sys.real_prefix existiert nicht in meiner Virtualenv und dasselbe gilt für sys.base_prefix .

15voto

Matt Harasymczuk Punkte 1700

Um zu überprüfen, ob Sie innerhalb von Virtualenv:

import os

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

Sie können auch mehr Daten über Ihre Umgebung erhalten:

import sys
import os

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

9voto

Victoria Stuart Punkte 3912
  • Aktualisiert im November 2019 (im Anhang).

Ich verwende routinemäßig mehrere mit Anaconda installierte virtuelle Umgebungen (venv). Mit diesem Codeschnipsel/Beispiel können Sie feststellen, ob Sie sich in einer venv (oder Ihrer Systemumgebung) befinden oder nicht, und Sie können auch eine bestimmte venv für Ihr Skript anfordern.

Zum Python-Skript hinzufügen (Codeschnipsel):

# ----------------------------------------------------------------------------
# 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 [Nov 2019]

Seit meinem ursprünglichen Beitrag bin ich von Anaconda venv weitergezogen (und Python selbst hat sich weiterentwickelt viz-a-viz virtuelle Umgebungen).

Um dieses Problem erneut zu 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 erläuternder 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!  :-)
>>>

9voto

kunrazor Punkte 311

Das können Sie tun which python und sehen Sie nach, ob er auf den in der virtuellen Umgebung verweist.

6voto

Silvio Biasiol Punkte 779

Am einfachsten ist es, einfach zu laufen: which python Wenn Sie sich in einer Virtualenv befinden, verweist sie auf deren Python statt auf die globale

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X