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?

1voto

(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'] + '/../')

-1voto

getleft Punkte 65

Im Windows-Betriebssystem sehen Sie etwa so aus:

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

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

-1voto

flow2k Punkte 3219

Es gibt bereits viele gute Methoden, die hier gepostet wurden, aber ich möchte nur eine weitere hinzufügen:

import site
site.getsitepackages()

sagt Ihnen, wo pip die Pakete installiert.

-2voto

Matt Punkte 1307

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 .

-2voto

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'])

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