Source code for dffml.util.packaging

import os
import sys
import venv
import pathlib
import tempfile
import contextlib
from typing import Union


[docs]def is_develop(package_name: str) -> Union[bool, pathlib.Path]: """ Returns True if the package is installed in development mode. """ alt_package_name = package_name.replace("-", "_") for syspath in map(pathlib.Path, sys.path): # Check if egg-link is present egg_link = syspath / f"{package_name}.egg-link" alt_egg_link = syspath / f"{alt_package_name}.egg-link" if egg_link.is_file(): return pathlib.Path(egg_link.read_text().split("\n")[0]) elif alt_egg_link.is_file(): return pathlib.Path(alt_egg_link.read_text().split("\n")[0]) # Check if path entry is parent of module directory itself module_dir = syspath / f"{alt_package_name}" if module_dir.is_dir(): return syspath return False
[docs]@contextlib.contextmanager def mkvenv(): """ Create a new virtual environment in a temporary directory, and set the ``VIRTUAL_ENV`` environment variable appropriately. The newly created temporary directory which will be the parent of the new virtual environment, which will be in the ``.venv`` directory. Examples -------- >>> import sys >>> import subprocess >>> from dffml import chdir, mkvenv >>> >>> with mkvenv() as tempdir: ... with chdir(tempdir): ... subprocess.check_call([ ... sys.executable, ... "-m", ... "pip", ... "install", ... "pip", ... ]) 0 """ with tempfile.TemporaryDirectory() as tempdir: # Create virtualenv venv_dir = os.path.join(tempdir, ".venv") venv.create(venv_dir, with_pip=True) # Set VIRTUAL_ENV environment variable old_venv = os.getenv("VIRTUAL_ENV", None) os.environ["VIRTUAL_ENV"] = venv_dir yield tempdir # Remove and or reset VIRTUAL_ENV environment variable del os.environ["VIRTUAL_ENV"] if old_venv: os.environ["VIRTUAL_ENV"] = old_venv