Ist es möglich, festzustellen, ob das aktuelle Skript in einer Virtualenv-Umgebung ausgeführt wird?
Antworten
Zu viele Anzeigen?(bearbeitet) Ich habe diesen Weg gefunden, was hältst du davon? (es gibt auch den Venv-Basispfad zurück und funktioniert sogar für leseDocs wo die Überprüfung der env Variable nicht):
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'] + '/../')
Es ist nicht kugelsicher, aber für UNIX-Umgebungen sind einfache Tests wie
if run("which python3").find("venv") == -1:
# something when not executed from venv
funktioniert bei mir hervorragend. Es ist einfacher, als das Vorhandensein eines Attributs zu testen, und außerdem sollten Sie Ihr Verzeichnis venv benennen venv
.
A potenziell Lösung ist:
os.access(sys.executable, os.W_OK)
In meinem Fall wollte ich eigentlich nur herausfinden, ob ich Dinge mit pip installieren kann, wie sie sind. Auch wenn es nicht die richtige Lösung für alle Fälle ist, sollten Sie einfach prüfen, ob Sie Schreibrechte für den Ort der ausführbaren Python-Datei haben.
Anmerkung: funktioniert in allen Versionen von Python, liefert aber auch True
wenn Sie das System Python mit 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'])
- See previous answers
- Weitere Antworten anzeigen