diff --git a/examples/exe_specific.py b/examples/exe_specific.py index dbc790d..e391add 100644 --- a/examples/exe_specific.py +++ b/examples/exe_specific.py @@ -7,6 +7,7 @@ it will generate a new vivenv. It may be important to require a exe specificty if you are frequently running different version of pythons and rely on c extension modules as in numpy. """ + __import__("viv").use("numpy", "plotext", track_exe=True) # noqa import numpy as np diff --git a/examples/frozen_import.py b/examples/frozen_import.py index b863ea7..de97c06 100644 --- a/examples/frozen_import.py +++ b/examples/frozen_import.py @@ -6,6 +6,7 @@ This import statement was generated using Using viv freeze ensures future runs of this script will use the same essential environment """ + __import__("viv").use( "numpy==1.24.0", "pandas==1.5.2", diff --git a/examples/sys_path.py b/examples/sys_path.py index 5622282..1eb0a6f 100644 --- a/examples/sys_path.py +++ b/examples/sys_path.py @@ -2,6 +2,7 @@ """ Embed the viv.py on the sys.path at runtime rather than using PYTHONPATH """ + import sys old_sys_path = sys.path.copy() # noqa diff --git a/pyproject.toml b/pyproject.toml index dc18dc4..04085cd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,7 +42,7 @@ test = [ "sampleproject" ] -[tool.ruff] +[tool.ruff.lint] select = ["E","F","I"] ignore = ["E402"] diff --git a/src/viv/viv.py b/src/viv/viv.py index bbfc816..14cff17 100755 --- a/src/viv/viv.py +++ b/src/viv/viv.py @@ -1,9 +1,9 @@ #!/usr/bin/env python3 """viv isn't venv! - viv -h - OR - __import__("viv").use("requests", "bs4") +viv -h + OR +__import__("viv").use("requests", "bs4") """ from __future__ import annotations @@ -3877,6 +3877,20 @@ class Cli: ) +def _pip_check(): + pip_version_requirement = ">=22.2" + if not shutil.which("pip"): + err_quit("viv requires pip to be installed") + + # importing viv may have side effects I'm not aware of... + if Version((pip_version := __import__("pip").__version__)) not in SpecifierSet( + pip_version_requirement + ): + err_quit( + f"viv requires pip version {pip_version_requirement} but got {pip_version}" + ) + + def _no_traceback_excepthook( exc_type: type[BaseException], exc_val: BaseException, @@ -3888,6 +3902,7 @@ def _no_traceback_excepthook( def main() -> None: try: + _pip_check() viv = Viv() Cli(viv).run() except KeyboardInterrupt: