def get_environment(self, allow_global=False): # type: (bool) -> Environment is_venv = is_in_virtualenv() if allow_global and not is_venv: prefix = sys.prefix python = sys.executable else: prefix = self.virtualenv_location python = None sources = self.sources if self.sources else [self.default_source] environment = Environment(prefix=prefix, python=python, is_venv=is_venv, sources=sources, pipfile=self.parsed_pipfile, project=self) pipenv_dist = get_pipenv_dist(pkg="pipenv") if pipenv_dist: environment.extend_dists(pipenv_dist) else: environment.add_dist("pipenv") return environment
def cli( ctx, state, where=False, venv=False, py=False, envs=False, rm=False, bare=False, man=False, support=None, help=False, site_packages=None, **kwargs, ): from pipenv.utils.spinner import create_spinner from ..core import ( cleanup_virtualenv, do_clear, do_py, do_where, ensure_project, format_help, system_which, warn_in_virtualenv, ) if man: if system_which("man"): path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "pipenv.1") os.execle(system_which("man"), "man", path, os.environ) return 0 else: secho( "man does not appear to be available on your system.", fg="yellow", bold=True, err=True, ) return 1 if envs: echo( "The following environment variables can be set, to do various things:\n" ) for key in state.project.__dict__: if key.startswith("PIPENV"): echo(f" - {crayons.normal(key, bold=True)}") echo("\nYou can learn more at:\n {}".format( crayons.green( "https://pipenv.pypa.io/en/latest/advanced/#configuration-with-environment-variables" ))) return 0 warn_in_virtualenv(state.project) if ctx.invoked_subcommand is None: # --where was passed... if where: do_where(state.project, bare=True) return 0 elif py: do_py(state.project, ctx=ctx) return 0 # --support was passed... elif support: from ..help import get_pipenv_diagnostics get_pipenv_diagnostics(state.project) return 0 # --clear was passed... elif state.clear: do_clear(state.project) return 0 # --venv was passed... elif venv: # There is no virtualenv yet. if not state.project.virtualenv_exists: echo( "{}({}){}".format( crayons.red( "No virtualenv has been created for this project"), crayons.normal(state.project.project_directory, bold=True), crayons.red(" yet!"), ), err=True, ) ctx.abort() else: echo(state.project.virtualenv_location) return 0 # --rm was passed... elif rm: # Abort if --system (or running in a virtualenv). if state.project.s.PIPENV_USE_SYSTEM or environments.is_in_virtualenv( ): echo( crayons.red( "You are attempting to remove a virtualenv that " "Pipenv did not create. Aborting.")) ctx.abort() if state.project.virtualenv_exists: loc = state.project.virtualenv_location echo( crayons.normal("{} ({})...".format( crayons.normal("Removing virtualenv", bold=True), crayons.green(loc), ))) with create_spinner(text="Running...", setting=state.project.s): # Remove the virtualenv. cleanup_virtualenv(state.project, bare=True) return 0 else: echo( crayons.red( "No virtualenv has been created for this project yet!", bold=True, ), err=True, ) ctx.abort() # --python or --three was passed... if (state.python or state.three is not None) or state.site_packages: ensure_project( state.project, three=state.three, python=state.python, warn=True, site_packages=state.site_packages, pypi_mirror=state.pypi_mirror, clear=state.clear, ) # Check this again before exiting for empty ``pipenv`` command. elif ctx.invoked_subcommand is None: # Display help to user, if no commands were passed. echo(format_help(ctx.get_help()))