Do not fail in a venv when activate_this.py is not found

The standard Python venv module does not have this script, so currently
DIB unconditionally fails. While a real fix will be provided in
https://review.opendev.org/#/c/704478/ this change at least allows
users to try work around the problem.

Change-Id: I45b79d4d283f2b3ea909612e652672dcb6092488
This commit is contained in:
Dmitry Tantsur 2020-05-29 12:22:01 +02:00 committed by Ian Wienand
parent 3477dfad00
commit 1e1e36df64

View File

@ -12,6 +12,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from __future__ import print_function
import os import os
import os.path import os.path
import runpy import runpy
@ -33,9 +35,16 @@ def running_under_virtualenv():
def activate_venv(): def activate_venv():
if running_under_virtualenv(): if running_under_virtualenv():
activate_this = os.path.join(sys.prefix, "bin", "activate_this.py") activate_this = os.path.join(sys.prefix, "bin", "activate_this.py")
globs = runpy.run_path(activate_this, globals()) try:
globals().update(globs) globs = runpy.run_path(activate_this, globals())
del globs globals().update(globs)
del globs
# TODO(dtantsur): replace with FileNotFoundError when Python 2 is no
# longer supported.
except OSError:
print("WARNING: A virtual environment was detected, but the "
"activate_this.py script was not found. You may need to set "
"PATH manually", file=sys.stderr)
def main(): def main():