Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
venv.upgrade_package(
package,
package_or_url,
pip_args,
include_dependencies=include_dependencies,
include_apps=include_apps,
is_main_package=True,
)
# TODO 20191026: upgrade injected packages also (Issue #79)
package_metadata = venv.package_metadata[package]
new_version = package_metadata.package_version
expose_apps_globally(
constants.LOCAL_BIN_DIR, package_metadata.app_paths, package, force=force
)
if include_dependencies:
for _, app_paths in package_metadata.app_paths_of_dependencies.items():
expose_apps_globally(
constants.LOCAL_BIN_DIR, app_paths, package, force=force
)
if old_version == new_version:
if upgrading_all:
pass
else:
print(
f"{package} is already at latest version {old_version} (location: {str(venv_dir)})"
)
return 0
package=package,
package_or_url=package_or_url,
pip_args=pip_args,
include_dependencies=include_dependencies,
include_apps=include_apps,
is_main_package=False,
)
except PackageInstallFailureError:
raise PipxError(
f"Could not inject package {package}. Is the name or spec correct?"
)
if include_apps:
_run_post_install_actions(
venv,
package,
constants.LOCAL_BIN_DIR,
venv_dir,
include_dependencies,
force=force,
)
print(f" injected package {bold(package)} into venv {bold(venv_dir.name)}")
print(f"done! {stars}", file=sys.stderr)
venv = Venv(path)
python_path = venv.python_path.resolve()
if package is None:
package = path.name
if not python_path.is_file():
return f" package {red(bold(package))} has invalid interpreter {str(python_path)}"
package_metadata = venv.package_metadata[package]
if package_metadata.package_version is None:
not_installed = red("is not installed")
return f" package {bold(package)} {not_installed} in the venv {str(path)}"
apps = package_metadata.apps + package_metadata.apps_of_dependencies
exposed_app_paths = _get_exposed_app_paths_for_package(
venv.bin_path, apps, constants.LOCAL_BIN_DIR
)
exposed_binary_names = sorted(p.name for p in exposed_app_paths)
unavailable_binary_names = sorted(
set(package_metadata.apps) - set(exposed_binary_names)
)
# The following is to satisfy mypy that python_version is str and not
# Optional[str]
python_version = (
venv.pipx_metadata.python_version
if venv.pipx_metadata.python_version is not None
else ""
)
return _get_list_output(
python_version,
python_path,
package_metadata.package_version,
include_apps=include_apps,
is_main_package=True,
)
# TODO 20191026: upgrade injected packages also (Issue #79)
package_metadata = venv.package_metadata[package]
new_version = package_metadata.package_version
expose_apps_globally(
constants.LOCAL_BIN_DIR, package_metadata.app_paths, package, force=force
)
if include_dependencies:
for _, app_paths in package_metadata.app_paths_of_dependencies.items():
expose_apps_globally(
constants.LOCAL_BIN_DIR, app_paths, package, force=force
)
if old_version == new_version:
if upgrading_all:
pass
else:
print(
f"{package} is already at latest version {old_version} (location: {str(venv_dir)})"
)
return 0
else:
print(
f"upgraded package {package} from {old_version} to {new_version} (location: {str(venv_dir)})"
)
return 1