Ist es möglich, festzustellen, ob das aktuelle Skript in einer Virtualenv-Umgebung ausgeführt wird?
Antworten
Zu viele Anzeigen?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
.
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")}')
- 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]
- Der Einfachheit halber gefällt mir die Antwort von Matt ( https://stackoverflow.com/a/51245168/1904943 ).
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! :-)
>>>