mirror of https://github.com/astral-sh/uv
Compare commits
5 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
0a83bf7dd5 | |
|
|
e603761862 | |
|
|
4f6f56b070 | |
|
|
66f7093ad2 | |
|
|
60df92f9aa |
|
|
@ -0,0 +1,125 @@
|
||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
- [Our Pledge](#our-pledge)
|
||||||
|
- [Our Standards](#our-standards)
|
||||||
|
- [Enforcement Responsibilities](#enforcement-responsibilities)
|
||||||
|
- [Scope](#scope)
|
||||||
|
- [Enforcement](#enforcement)
|
||||||
|
- [Enforcement Guidelines](#enforcement-guidelines)
|
||||||
|
- [1. Correction](#1-correction)
|
||||||
|
- [2. Warning](#2-warning)
|
||||||
|
- [3. Temporary Ban](#3-temporary-ban)
|
||||||
|
- [4. Permanent Ban](#4-permanent-ban)
|
||||||
|
- [Attribution](#attribution)
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our community a
|
||||||
|
harassment-free experience for everyone, regardless of age, body size, visible or invisible
|
||||||
|
disability, ethnicity, sex characteristics, gender identity and expression, level of experience,
|
||||||
|
education, socio-economic status, nationality, personal appearance, race, religion, or sexual
|
||||||
|
identity and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and
|
||||||
|
healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our community include:
|
||||||
|
|
||||||
|
- Demonstrating empathy and kindness toward other people
|
||||||
|
- Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
- Giving and gracefully accepting constructive feedback
|
||||||
|
- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the
|
||||||
|
experience
|
||||||
|
- Focusing on what is best not just for us as individuals, but for the overall community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
- The use of sexualized language or imagery, and sexual attention or advances of any kind
|
||||||
|
- Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
- Public or private harassment
|
||||||
|
- Publishing others' private information, such as a physical or email address, without their
|
||||||
|
explicit permission
|
||||||
|
- Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior
|
||||||
|
and will take appropriate and fair corrective action in response to any behavior that they deem
|
||||||
|
inappropriate, threatening, offensive, or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject comments, commits,
|
||||||
|
code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and
|
||||||
|
will communicate reasons for moderation decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when an individual is
|
||||||
|
officially representing the community in public spaces. Examples of representing our community
|
||||||
|
include using an official e-mail address, posting via an official social media account, or acting as
|
||||||
|
an appointed representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community
|
||||||
|
leaders responsible for enforcement at <hey@astral.sh>. All complaints will be reviewed and
|
||||||
|
investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the reporter of any
|
||||||
|
incident.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining the consequences for
|
||||||
|
any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or
|
||||||
|
unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing clarity around the
|
||||||
|
nature of the violation and an explanation of why the behavior was inappropriate. A public apology
|
||||||
|
may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series of actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No interaction with the people
|
||||||
|
involved, including unsolicited interaction with those enforcing the Code of Conduct, for a
|
||||||
|
specified period of time. This includes avoiding interactions in community spaces as well as
|
||||||
|
external channels like social media. Violating these terms may lead to a temporary or permanent ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including sustained inappropriate
|
||||||
|
behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public communication with the
|
||||||
|
community for a specified period of time. No public or private interaction with the people involved,
|
||||||
|
including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this
|
||||||
|
period. Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community standards, including
|
||||||
|
sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement
|
||||||
|
of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within the community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available
|
||||||
|
[here](https://www.contributor-covenant.org/version/2/0/code_of_conduct.html).
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by
|
||||||
|
[Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the
|
||||||
|
[FAQ](https://www.contributor-covenant.org/faq). Translations are available
|
||||||
|
[here](https://www.contributor-covenant.org/translations).
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
19
README.md
19
README.md
|
|
@ -42,7 +42,7 @@ An extremely fast Python package and project manager, written in Rust.
|
||||||
- 🖥️ Supports macOS, Linux, and Windows.
|
- 🖥️ Supports macOS, Linux, and Windows.
|
||||||
|
|
||||||
uv is backed by [Astral](https://astral.sh), the creators of
|
uv is backed by [Astral](https://astral.sh), the creators of
|
||||||
[Ruff](https://github.com/astral-sh/ruff).
|
[Ruff](https://github.com/astral-sh/ruff) and [ty](https://github.com/astral-sh/ty).
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
|
@ -268,14 +268,6 @@ Installed 43 packages in 208ms
|
||||||
|
|
||||||
See the [pip interface documentation](https://docs.astral.sh/uv/pip/index/) to get started.
|
See the [pip interface documentation](https://docs.astral.sh/uv/pip/index/) to get started.
|
||||||
|
|
||||||
## Platform support
|
|
||||||
|
|
||||||
See uv's [platform support](https://docs.astral.sh/uv/reference/platforms/) document.
|
|
||||||
|
|
||||||
## Versioning policy
|
|
||||||
|
|
||||||
See uv's [versioning policy](https://docs.astral.sh/uv/reference/versioning/) document.
|
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
We are passionate about supporting contributors of all levels of experience and would love to see
|
We are passionate about supporting contributors of all levels of experience and would love to see
|
||||||
|
|
@ -292,6 +284,15 @@ It's pronounced as "you - vee" ([`/juː viː/`](https://en.wikipedia.org/wiki/He
|
||||||
|
|
||||||
Just "uv", please. See the [style guide](./STYLE.md#styling-uv) for details.
|
Just "uv", please. See the [style guide](./STYLE.md#styling-uv) for details.
|
||||||
|
|
||||||
|
#### What platforms does uv support?
|
||||||
|
|
||||||
|
See uv's [platform support](https://docs.astral.sh/uv/reference/platforms/) document.
|
||||||
|
|
||||||
|
#### Is uv ready for production?
|
||||||
|
|
||||||
|
Yes, uv is stable and widely used in production. See uv's
|
||||||
|
[versioning policy](https://docs.astral.sh/uv/reference/versioning/) document for details.
|
||||||
|
|
||||||
## Acknowledgements
|
## Acknowledgements
|
||||||
|
|
||||||
uv's dependency resolver uses [PubGrub](https://github.com/pubgrub-rs/pubgrub) under the hood. We're
|
uv's dependency resolver uses [PubGrub](https://github.com/pubgrub-rs/pubgrub) under the hood. We're
|
||||||
|
|
|
||||||
|
|
@ -5371,6 +5371,21 @@ pub struct ToolRunArgs {
|
||||||
#[arg(long)]
|
#[arg(long)]
|
||||||
pub python_platform: Option<TargetTriple>,
|
pub python_platform: Option<TargetTriple>,
|
||||||
|
|
||||||
|
/// The backend to use when fetching packages in the PyTorch ecosystem (e.g., `cpu`, `cu126`, or `auto`)
|
||||||
|
///
|
||||||
|
/// When set, uv will ignore the configured index URLs for packages in the PyTorch ecosystem,
|
||||||
|
/// and will instead use the defined backend.
|
||||||
|
///
|
||||||
|
/// For example, when set to `cpu`, uv will use the CPU-only PyTorch index; when set to `cu126`,
|
||||||
|
/// uv will use the PyTorch index for CUDA 12.6.
|
||||||
|
///
|
||||||
|
/// The `auto` mode will attempt to detect the appropriate PyTorch index based on the currently
|
||||||
|
/// installed CUDA drivers.
|
||||||
|
///
|
||||||
|
/// This option is in preview and may change in any future release.
|
||||||
|
#[arg(long, value_enum, env = EnvVars::UV_TORCH_BACKEND)]
|
||||||
|
pub torch_backend: Option<TorchMode>,
|
||||||
|
|
||||||
#[arg(long, hide = true)]
|
#[arg(long, hide = true)]
|
||||||
pub generate_shell_completion: Option<clap_complete_command::Shell>,
|
pub generate_shell_completion: Option<clap_complete_command::Shell>,
|
||||||
}
|
}
|
||||||
|
|
@ -5547,6 +5562,21 @@ pub struct ToolInstallArgs {
|
||||||
/// `--python-platform` option is intended for advanced use cases.
|
/// `--python-platform` option is intended for advanced use cases.
|
||||||
#[arg(long)]
|
#[arg(long)]
|
||||||
pub python_platform: Option<TargetTriple>,
|
pub python_platform: Option<TargetTriple>,
|
||||||
|
|
||||||
|
/// The backend to use when fetching packages in the PyTorch ecosystem (e.g., `cpu`, `cu126`, or `auto`)
|
||||||
|
///
|
||||||
|
/// When set, uv will ignore the configured index URLs for packages in the PyTorch ecosystem,
|
||||||
|
/// and will instead use the defined backend.
|
||||||
|
///
|
||||||
|
/// For example, when set to `cpu`, uv will use the CPU-only PyTorch index; when set to `cu126`,
|
||||||
|
/// uv will use the PyTorch index for CUDA 12.6.
|
||||||
|
///
|
||||||
|
/// The `auto` mode will attempt to detect the appropriate PyTorch index based on the currently
|
||||||
|
/// installed CUDA drivers.
|
||||||
|
///
|
||||||
|
/// This option is in preview and may change in any future release.
|
||||||
|
#[arg(long, value_enum, env = EnvVars::UV_TORCH_BACKEND)]
|
||||||
|
pub torch_backend: Option<TorchMode>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Args)]
|
#[derive(Args)]
|
||||||
|
|
|
||||||
|
|
@ -366,6 +366,7 @@ pub fn resolver_options(
|
||||||
exclude_newer_package.unwrap_or_default(),
|
exclude_newer_package.unwrap_or_default(),
|
||||||
),
|
),
|
||||||
link_mode,
|
link_mode,
|
||||||
|
torch_backend: None,
|
||||||
no_build: flag(no_build, build, "build"),
|
no_build: flag(no_build, build, "build"),
|
||||||
no_build_package: Some(no_build_package),
|
no_build_package: Some(no_build_package),
|
||||||
no_binary: flag(no_binary, binary, "binary"),
|
no_binary: flag(no_binary, binary, "binary"),
|
||||||
|
|
|
||||||
|
|
@ -335,7 +335,7 @@ impl RequirementsSpecification {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RequirementsSource::PylockToml(path) => {
|
RequirementsSource::PylockToml(path) => {
|
||||||
if !path.is_file() {
|
if !(path.starts_with("http://") || path.starts_with("https://") || path.exists()) {
|
||||||
return Err(anyhow::anyhow!("File not found: `{}`", path.user_display()));
|
return Err(anyhow::anyhow!("File not found: `{}`", path.user_display()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -370,6 +370,7 @@ pub struct ResolverOptions {
|
||||||
pub config_settings_package: Option<PackageConfigSettings>,
|
pub config_settings_package: Option<PackageConfigSettings>,
|
||||||
pub exclude_newer: ExcludeNewer,
|
pub exclude_newer: ExcludeNewer,
|
||||||
pub link_mode: Option<LinkMode>,
|
pub link_mode: Option<LinkMode>,
|
||||||
|
pub torch_backend: Option<TorchMode>,
|
||||||
pub upgrade: Option<Upgrade>,
|
pub upgrade: Option<Upgrade>,
|
||||||
pub build_isolation: Option<BuildIsolation>,
|
pub build_isolation: Option<BuildIsolation>,
|
||||||
pub no_build: Option<bool>,
|
pub no_build: Option<bool>,
|
||||||
|
|
@ -404,6 +405,7 @@ pub struct ResolverInstallerOptions {
|
||||||
pub exclude_newer: Option<ExcludeNewerValue>,
|
pub exclude_newer: Option<ExcludeNewerValue>,
|
||||||
pub exclude_newer_package: Option<ExcludeNewerPackage>,
|
pub exclude_newer_package: Option<ExcludeNewerPackage>,
|
||||||
pub link_mode: Option<LinkMode>,
|
pub link_mode: Option<LinkMode>,
|
||||||
|
pub torch_backend: Option<TorchMode>,
|
||||||
pub compile_bytecode: Option<bool>,
|
pub compile_bytecode: Option<bool>,
|
||||||
pub no_sources: Option<bool>,
|
pub no_sources: Option<bool>,
|
||||||
pub upgrade: Option<Upgrade>,
|
pub upgrade: Option<Upgrade>,
|
||||||
|
|
@ -412,7 +414,6 @@ pub struct ResolverInstallerOptions {
|
||||||
pub no_build_package: Option<Vec<PackageName>>,
|
pub no_build_package: Option<Vec<PackageName>>,
|
||||||
pub no_binary: Option<bool>,
|
pub no_binary: Option<bool>,
|
||||||
pub no_binary_package: Option<Vec<PackageName>>,
|
pub no_binary_package: Option<Vec<PackageName>>,
|
||||||
pub torch_backend: Option<TorchMode>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<ResolverInstallerSchema> for ResolverInstallerOptions {
|
impl From<ResolverInstallerSchema> for ResolverInstallerOptions {
|
||||||
|
|
@ -438,6 +439,7 @@ impl From<ResolverInstallerSchema> for ResolverInstallerOptions {
|
||||||
exclude_newer,
|
exclude_newer,
|
||||||
exclude_newer_package,
|
exclude_newer_package,
|
||||||
link_mode,
|
link_mode,
|
||||||
|
torch_backend,
|
||||||
compile_bytecode,
|
compile_bytecode,
|
||||||
no_sources,
|
no_sources,
|
||||||
upgrade,
|
upgrade,
|
||||||
|
|
@ -448,7 +450,6 @@ impl From<ResolverInstallerSchema> for ResolverInstallerOptions {
|
||||||
no_build_package,
|
no_build_package,
|
||||||
no_binary,
|
no_binary,
|
||||||
no_binary_package,
|
no_binary_package,
|
||||||
torch_backend,
|
|
||||||
} = value;
|
} = value;
|
||||||
Self {
|
Self {
|
||||||
index,
|
index,
|
||||||
|
|
@ -473,6 +474,7 @@ impl From<ResolverInstallerSchema> for ResolverInstallerOptions {
|
||||||
exclude_newer,
|
exclude_newer,
|
||||||
exclude_newer_package,
|
exclude_newer_package,
|
||||||
link_mode,
|
link_mode,
|
||||||
|
torch_backend,
|
||||||
compile_bytecode,
|
compile_bytecode,
|
||||||
no_sources,
|
no_sources,
|
||||||
upgrade: Upgrade::from_args(
|
upgrade: Upgrade::from_args(
|
||||||
|
|
@ -488,7 +490,6 @@ impl From<ResolverInstallerSchema> for ResolverInstallerOptions {
|
||||||
no_build_package,
|
no_build_package,
|
||||||
no_binary,
|
no_binary,
|
||||||
no_binary_package,
|
no_binary_package,
|
||||||
torch_backend,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1925,6 +1926,7 @@ impl From<ResolverInstallerSchema> for ResolverOptions {
|
||||||
extra_build_dependencies: value.extra_build_dependencies,
|
extra_build_dependencies: value.extra_build_dependencies,
|
||||||
extra_build_variables: value.extra_build_variables,
|
extra_build_variables: value.extra_build_variables,
|
||||||
no_sources: value.no_sources,
|
no_sources: value.no_sources,
|
||||||
|
torch_backend: value.torch_backend,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2004,6 +2006,7 @@ pub struct ToolOptions {
|
||||||
pub no_build_package: Option<Vec<PackageName>>,
|
pub no_build_package: Option<Vec<PackageName>>,
|
||||||
pub no_binary: Option<bool>,
|
pub no_binary: Option<bool>,
|
||||||
pub no_binary_package: Option<Vec<PackageName>>,
|
pub no_binary_package: Option<Vec<PackageName>>,
|
||||||
|
pub torch_backend: Option<TorchMode>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<ResolverInstallerOptions> for ToolOptions {
|
impl From<ResolverInstallerOptions> for ToolOptions {
|
||||||
|
|
@ -2034,6 +2037,7 @@ impl From<ResolverInstallerOptions> for ToolOptions {
|
||||||
no_build_package: value.no_build_package,
|
no_build_package: value.no_build_package,
|
||||||
no_binary: value.no_binary,
|
no_binary: value.no_binary,
|
||||||
no_binary_package: value.no_binary_package,
|
no_binary_package: value.no_binary_package,
|
||||||
|
torch_backend: value.torch_backend,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2068,7 +2072,7 @@ impl From<ToolOptions> for ResolverInstallerOptions {
|
||||||
no_build_package: value.no_build_package,
|
no_build_package: value.no_build_package,
|
||||||
no_binary: value.no_binary,
|
no_binary: value.no_binary,
|
||||||
no_binary_package: value.no_binary_package,
|
no_binary_package: value.no_binary_package,
|
||||||
torch_backend: None,
|
torch_backend: value.torch_backend,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2150,7 +2154,7 @@ pub struct OptionsWire {
|
||||||
// `crates/uv-workspace/src/pyproject.rs`. The documentation lives on that struct.
|
// `crates/uv-workspace/src/pyproject.rs`. The documentation lives on that struct.
|
||||||
// They're respected in both `pyproject.toml` and `uv.toml` files.
|
// They're respected in both `pyproject.toml` and `uv.toml` files.
|
||||||
override_dependencies: Option<Vec<Requirement<VerbatimParsedUrl>>>,
|
override_dependencies: Option<Vec<Requirement<VerbatimParsedUrl>>>,
|
||||||
exclude_dependencies: Option<Vec<uv_normalize::PackageName>>,
|
exclude_dependencies: Option<Vec<PackageName>>,
|
||||||
constraint_dependencies: Option<Vec<Requirement<VerbatimParsedUrl>>>,
|
constraint_dependencies: Option<Vec<Requirement<VerbatimParsedUrl>>>,
|
||||||
build_constraint_dependencies: Option<Vec<Requirement<VerbatimParsedUrl>>>,
|
build_constraint_dependencies: Option<Vec<Requirement<VerbatimParsedUrl>>>,
|
||||||
environments: Option<SupportedEnvironments>,
|
environments: Option<SupportedEnvironments>,
|
||||||
|
|
|
||||||
|
|
@ -216,6 +216,7 @@ async fn build_impl(
|
||||||
upgrade: _,
|
upgrade: _,
|
||||||
build_options,
|
build_options,
|
||||||
sources,
|
sources,
|
||||||
|
torch_backend: _,
|
||||||
} = settings;
|
} = settings;
|
||||||
|
|
||||||
// Determine the source to build.
|
// Determine the source to build.
|
||||||
|
|
|
||||||
|
|
@ -500,10 +500,28 @@ pub(crate) async fn pip_install(
|
||||||
);
|
);
|
||||||
|
|
||||||
let (resolution, hasher) = if let Some(pylock) = pylock {
|
let (resolution, hasher) = if let Some(pylock) = pylock {
|
||||||
// Read the `pylock.toml` from disk, and deserialize it from TOML.
|
// Read the `pylock.toml` from disk or URL, and deserialize it from TOML.
|
||||||
let install_path = std::path::absolute(&pylock)?;
|
let (install_path, content) =
|
||||||
let install_path = install_path.parent().unwrap();
|
if pylock.starts_with("http://") || pylock.starts_with("https://") {
|
||||||
let content = fs_err::tokio::read_to_string(&pylock).await?;
|
// Fetch the `pylock.toml` over HTTP(S).
|
||||||
|
let url = uv_redacted::DisplaySafeUrl::parse(&pylock.to_string_lossy())?;
|
||||||
|
let client = client_builder.build();
|
||||||
|
let response = client
|
||||||
|
.for_host(&url)
|
||||||
|
.get(url::Url::from(url.clone()))
|
||||||
|
.send()
|
||||||
|
.await?;
|
||||||
|
response.error_for_status_ref()?;
|
||||||
|
let content = response.text().await?;
|
||||||
|
// Use the current working directory as the install path for remote lock files.
|
||||||
|
let install_path = std::env::current_dir()?;
|
||||||
|
(install_path, content)
|
||||||
|
} else {
|
||||||
|
let install_path = std::path::absolute(&pylock)?;
|
||||||
|
let install_path = install_path.parent().unwrap().to_path_buf();
|
||||||
|
let content = fs_err::tokio::read_to_string(&pylock).await?;
|
||||||
|
(install_path, content)
|
||||||
|
};
|
||||||
let lock = toml::from_str::<PylockToml>(&content).with_context(|| {
|
let lock = toml::from_str::<PylockToml>(&content).with_context(|| {
|
||||||
format!("Not a valid `pylock.toml` file: {}", pylock.user_display())
|
format!("Not a valid `pylock.toml` file: {}", pylock.user_display())
|
||||||
})?;
|
})?;
|
||||||
|
|
@ -537,7 +555,7 @@ pub(crate) async fn pip_install(
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
let resolution = lock.to_resolution(
|
let resolution = lock.to_resolution(
|
||||||
install_path,
|
&install_path,
|
||||||
marker_env.markers(),
|
marker_env.markers(),
|
||||||
&extras,
|
&extras,
|
||||||
&groups,
|
&groups,
|
||||||
|
|
|
||||||
|
|
@ -470,6 +470,7 @@ async fn do_lock(
|
||||||
upgrade,
|
upgrade,
|
||||||
build_options,
|
build_options,
|
||||||
sources,
|
sources,
|
||||||
|
torch_backend: _,
|
||||||
} = settings;
|
} = settings;
|
||||||
|
|
||||||
if !preview.is_enabled(PreviewFeatures::EXTRA_BUILD_DEPENDENCIES)
|
if !preview.is_enabled(PreviewFeatures::EXTRA_BUILD_DEPENDENCIES)
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ use uv_resolver::{
|
||||||
use uv_scripts::Pep723ItemRef;
|
use uv_scripts::Pep723ItemRef;
|
||||||
use uv_settings::PythonInstallMirrors;
|
use uv_settings::PythonInstallMirrors;
|
||||||
use uv_static::EnvVars;
|
use uv_static::EnvVars;
|
||||||
|
use uv_torch::{TorchSource, TorchStrategy};
|
||||||
use uv_types::{BuildIsolation, EmptyInstalledPackages, HashStrategy};
|
use uv_types::{BuildIsolation, EmptyInstalledPackages, HashStrategy};
|
||||||
use uv_virtualenv::remove_virtualenv;
|
use uv_virtualenv::remove_virtualenv;
|
||||||
use uv_warnings::{warn_user, warn_user_once};
|
use uv_warnings::{warn_user, warn_user_once};
|
||||||
|
|
@ -278,6 +279,9 @@ pub(crate) enum ProjectError {
|
||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
RetryParsing(#[from] uv_client::RetryParsingError),
|
RetryParsing(#[from] uv_client::RetryParsingError),
|
||||||
|
|
||||||
|
#[error(transparent)]
|
||||||
|
Accelerator(#[from] uv_torch::AcceleratorError),
|
||||||
|
|
||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
Anyhow(#[from] anyhow::Error),
|
Anyhow(#[from] anyhow::Error),
|
||||||
}
|
}
|
||||||
|
|
@ -1723,6 +1727,7 @@ pub(crate) async fn resolve_names(
|
||||||
prerelease: _,
|
prerelease: _,
|
||||||
resolution: _,
|
resolution: _,
|
||||||
sources,
|
sources,
|
||||||
|
torch_backend,
|
||||||
upgrade: _,
|
upgrade: _,
|
||||||
},
|
},
|
||||||
compile_bytecode: _,
|
compile_bytecode: _,
|
||||||
|
|
@ -1731,10 +1736,27 @@ pub(crate) async fn resolve_names(
|
||||||
|
|
||||||
let client_builder = client_builder.clone().keyring(*keyring_provider);
|
let client_builder = client_builder.clone().keyring(*keyring_provider);
|
||||||
|
|
||||||
|
// Determine the PyTorch backend.
|
||||||
|
let torch_backend = torch_backend
|
||||||
|
.map(|mode| {
|
||||||
|
let source = if uv_auth::PyxTokenStore::from_settings()
|
||||||
|
.is_ok_and(|store| store.has_credentials())
|
||||||
|
{
|
||||||
|
TorchSource::Pyx
|
||||||
|
} else {
|
||||||
|
TorchSource::default()
|
||||||
|
};
|
||||||
|
TorchStrategy::from_mode(mode, source, interpreter.platform().os())
|
||||||
|
})
|
||||||
|
.transpose()
|
||||||
|
.ok()
|
||||||
|
.flatten();
|
||||||
|
|
||||||
// Initialize the registry client.
|
// Initialize the registry client.
|
||||||
let client = RegistryClientBuilder::new(client_builder, cache.clone())
|
let client = RegistryClientBuilder::new(client_builder, cache.clone())
|
||||||
.index_locations(index_locations.clone())
|
.index_locations(index_locations.clone())
|
||||||
.index_strategy(*index_strategy)
|
.index_strategy(*index_strategy)
|
||||||
|
.torch_backend(torch_backend.clone())
|
||||||
.markers(interpreter.markers())
|
.markers(interpreter.markers())
|
||||||
.platform(interpreter.platform())
|
.platform(interpreter.platform())
|
||||||
.build();
|
.build();
|
||||||
|
|
@ -1880,6 +1902,7 @@ pub(crate) async fn resolve_environment(
|
||||||
upgrade: _,
|
upgrade: _,
|
||||||
build_options,
|
build_options,
|
||||||
sources,
|
sources,
|
||||||
|
torch_backend,
|
||||||
} = settings;
|
} = settings;
|
||||||
|
|
||||||
// Respect all requirements from the provided sources.
|
// Respect all requirements from the provided sources.
|
||||||
|
|
@ -1900,10 +1923,33 @@ pub(crate) async fn resolve_environment(
|
||||||
let marker_env = pip::resolution_markers(None, python_platform, interpreter);
|
let marker_env = pip::resolution_markers(None, python_platform, interpreter);
|
||||||
let python_requirement = PythonRequirement::from_interpreter(interpreter);
|
let python_requirement = PythonRequirement::from_interpreter(interpreter);
|
||||||
|
|
||||||
|
// Determine the PyTorch backend.
|
||||||
|
let torch_backend = torch_backend
|
||||||
|
.map(|mode| {
|
||||||
|
let source = if uv_auth::PyxTokenStore::from_settings()
|
||||||
|
.is_ok_and(|store| store.has_credentials())
|
||||||
|
{
|
||||||
|
TorchSource::Pyx
|
||||||
|
} else {
|
||||||
|
TorchSource::default()
|
||||||
|
};
|
||||||
|
TorchStrategy::from_mode(
|
||||||
|
mode,
|
||||||
|
source,
|
||||||
|
python_platform
|
||||||
|
.map(|t| t.platform())
|
||||||
|
.as_ref()
|
||||||
|
.unwrap_or(interpreter.platform())
|
||||||
|
.os(),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.transpose()?;
|
||||||
|
|
||||||
// Initialize the registry client.
|
// Initialize the registry client.
|
||||||
let client = RegistryClientBuilder::new(client_builder, cache.clone())
|
let client = RegistryClientBuilder::new(client_builder, cache.clone())
|
||||||
.index_locations(index_locations.clone())
|
.index_locations(index_locations.clone())
|
||||||
.index_strategy(*index_strategy)
|
.index_strategy(*index_strategy)
|
||||||
|
.torch_backend(torch_backend.clone())
|
||||||
.markers(interpreter.markers())
|
.markers(interpreter.markers())
|
||||||
.platform(interpreter.platform())
|
.platform(interpreter.platform())
|
||||||
.build();
|
.build();
|
||||||
|
|
@ -2232,6 +2278,7 @@ pub(crate) async fn update_environment(
|
||||||
prerelease,
|
prerelease,
|
||||||
resolution,
|
resolution,
|
||||||
sources,
|
sources,
|
||||||
|
torch_backend,
|
||||||
upgrade,
|
upgrade,
|
||||||
},
|
},
|
||||||
compile_bytecode,
|
compile_bytecode,
|
||||||
|
|
@ -2302,10 +2349,33 @@ pub(crate) async fn update_environment(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Determine the PyTorch backend.
|
||||||
|
let torch_backend = torch_backend
|
||||||
|
.map(|mode| {
|
||||||
|
let source = if uv_auth::PyxTokenStore::from_settings()
|
||||||
|
.is_ok_and(|store| store.has_credentials())
|
||||||
|
{
|
||||||
|
TorchSource::Pyx
|
||||||
|
} else {
|
||||||
|
TorchSource::default()
|
||||||
|
};
|
||||||
|
TorchStrategy::from_mode(
|
||||||
|
mode,
|
||||||
|
source,
|
||||||
|
python_platform
|
||||||
|
.map(|t| t.platform())
|
||||||
|
.as_ref()
|
||||||
|
.unwrap_or(interpreter.platform())
|
||||||
|
.os(),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.transpose()?;
|
||||||
|
|
||||||
// Initialize the registry client.
|
// Initialize the registry client.
|
||||||
let client = RegistryClientBuilder::new(client_builder, cache.clone())
|
let client = RegistryClientBuilder::new(client_builder, cache.clone())
|
||||||
.index_locations(index_locations.clone())
|
.index_locations(index_locations.clone())
|
||||||
.index_strategy(*index_strategy)
|
.index_strategy(*index_strategy)
|
||||||
|
.torch_backend(torch_backend.clone())
|
||||||
.markers(interpreter.markers())
|
.markers(interpreter.markers())
|
||||||
.platform(interpreter.platform())
|
.platform(interpreter.platform())
|
||||||
.build();
|
.build();
|
||||||
|
|
|
||||||
|
|
@ -676,6 +676,7 @@ pub(super) async fn do_sync(
|
||||||
prerelease: PrereleaseMode::default(),
|
prerelease: PrereleaseMode::default(),
|
||||||
resolution: ResolutionMode::default(),
|
resolution: ResolutionMode::default(),
|
||||||
sources,
|
sources,
|
||||||
|
torch_backend: None,
|
||||||
upgrade: Upgrade::default(),
|
upgrade: Upgrade::default(),
|
||||||
};
|
};
|
||||||
script_extra_build_requires(
|
script_extra_build_requires(
|
||||||
|
|
|
||||||
|
|
@ -212,6 +212,7 @@ pub(crate) async fn tree(
|
||||||
upgrade: _,
|
upgrade: _,
|
||||||
build_options: _,
|
build_options: _,
|
||||||
sources: _,
|
sources: _,
|
||||||
|
torch_backend: _,
|
||||||
} = &settings;
|
} = &settings;
|
||||||
|
|
||||||
let capabilities = IndexCapabilities::default();
|
let capabilities = IndexCapabilities::default();
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ use uv_python::{
|
||||||
use uv_requirements::{RequirementsSource, RequirementsSpecification};
|
use uv_requirements::{RequirementsSource, RequirementsSpecification};
|
||||||
use uv_settings::{PythonInstallMirrors, ResolverInstallerOptions, ToolOptions};
|
use uv_settings::{PythonInstallMirrors, ResolverInstallerOptions, ToolOptions};
|
||||||
use uv_tool::InstalledTools;
|
use uv_tool::InstalledTools;
|
||||||
use uv_warnings::warn_user;
|
use uv_warnings::{warn_user, warn_user_once};
|
||||||
use uv_workspace::WorkspaceCache;
|
use uv_workspace::WorkspaceCache;
|
||||||
|
|
||||||
use crate::commands::ExitStatus;
|
use crate::commands::ExitStatus;
|
||||||
|
|
@ -76,6 +76,12 @@ pub(crate) async fn install(
|
||||||
printer: Printer,
|
printer: Printer,
|
||||||
preview: Preview,
|
preview: Preview,
|
||||||
) -> Result<ExitStatus> {
|
) -> Result<ExitStatus> {
|
||||||
|
if settings.resolver.torch_backend.is_some() {
|
||||||
|
warn_user_once!(
|
||||||
|
"The `--torch-backend` option is experimental and may change without warning."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
let reporter = PythonDownloadReporter::single(printer);
|
let reporter = PythonDownloadReporter::single(printer);
|
||||||
|
|
||||||
let python_request = python.as_deref().map(PythonRequest::parse);
|
let python_request = python.as_deref().map(PythonRequest::parse);
|
||||||
|
|
|
||||||
|
|
@ -129,6 +129,12 @@ pub(crate) async fn run(
|
||||||
.is_some_and(|ext| ext.eq_ignore_ascii_case("py") || ext.eq_ignore_ascii_case("pyw"))
|
.is_some_and(|ext| ext.eq_ignore_ascii_case("py") || ext.eq_ignore_ascii_case("pyw"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if settings.resolver.torch_backend.is_some() {
|
||||||
|
warn_user_once!(
|
||||||
|
"The `--torch-backend` option is experimental and may change without warning."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Read from the `.env` file, if necessary.
|
// Read from the `.env` file, if necessary.
|
||||||
if !no_env_file {
|
if !no_env_file {
|
||||||
for env_file_path in env_file.iter().rev().map(PathBuf::as_path) {
|
for env_file_path in env_file.iter().rev().map(PathBuf::as_path) {
|
||||||
|
|
|
||||||
|
|
@ -840,7 +840,7 @@ async fn run(mut cli: Cli) -> Result<ExitStatus> {
|
||||||
.combine(Refresh::from(args.settings.upgrade.clone())),
|
.combine(Refresh::from(args.settings.upgrade.clone())),
|
||||||
);
|
);
|
||||||
|
|
||||||
commands::pip_install(
|
Box::pin(commands::pip_install(
|
||||||
&requirements,
|
&requirements,
|
||||||
&constraints,
|
&constraints,
|
||||||
&overrides,
|
&overrides,
|
||||||
|
|
@ -892,7 +892,7 @@ async fn run(mut cli: Cli) -> Result<ExitStatus> {
|
||||||
args.dry_run,
|
args.dry_run,
|
||||||
printer,
|
printer,
|
||||||
globals.preview,
|
globals.preview,
|
||||||
)
|
))
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
Commands::Pip(PipNamespace {
|
Commands::Pip(PipNamespace {
|
||||||
|
|
|
||||||
|
|
@ -586,6 +586,7 @@ impl ToolRunSettings {
|
||||||
lfs,
|
lfs,
|
||||||
python,
|
python,
|
||||||
python_platform,
|
python_platform,
|
||||||
|
torch_backend,
|
||||||
generate_shell_completion: _,
|
generate_shell_completion: _,
|
||||||
} = args;
|
} = args;
|
||||||
|
|
||||||
|
|
@ -615,21 +616,24 @@ impl ToolRunSettings {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let filesystem_options = filesystem.map(FilesystemOptions::into_options);
|
||||||
|
|
||||||
let options =
|
let options =
|
||||||
resolver_installer_options(installer, build).combine(ResolverInstallerOptions::from(
|
resolver_installer_options(installer, build).combine(ResolverInstallerOptions::from(
|
||||||
filesystem
|
filesystem_options
|
||||||
.clone()
|
.as_ref()
|
||||||
.map(FilesystemOptions::into_options)
|
.map(|options| options.top_level.clone())
|
||||||
.map(|options| options.top_level)
|
|
||||||
.unwrap_or_default(),
|
.unwrap_or_default(),
|
||||||
));
|
));
|
||||||
|
|
||||||
let filesystem_install_mirrors = filesystem
|
let filesystem_install_mirrors = filesystem_options
|
||||||
.map(FilesystemOptions::into_options)
|
.map(|options| options.install_mirrors.clone())
|
||||||
.map(|options| options.install_mirrors)
|
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
|
|
||||||
let settings = ResolverInstallerSettings::from(options.clone());
|
let mut settings = ResolverInstallerSettings::from(options.clone());
|
||||||
|
if torch_backend.is_some() {
|
||||||
|
settings.resolver.torch_backend = torch_backend;
|
||||||
|
}
|
||||||
let lfs = GitLfsSetting::new(lfs.then_some(true), environment.lfs);
|
let lfs = GitLfsSetting::new(lfs.then_some(true), environment.lfs);
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
|
@ -727,23 +731,27 @@ impl ToolInstallSettings {
|
||||||
refresh,
|
refresh,
|
||||||
python,
|
python,
|
||||||
python_platform,
|
python_platform,
|
||||||
|
torch_backend,
|
||||||
} = args;
|
} = args;
|
||||||
|
|
||||||
|
let filesystem_options = filesystem.map(FilesystemOptions::into_options);
|
||||||
|
|
||||||
let options =
|
let options =
|
||||||
resolver_installer_options(installer, build).combine(ResolverInstallerOptions::from(
|
resolver_installer_options(installer, build).combine(ResolverInstallerOptions::from(
|
||||||
filesystem
|
filesystem_options
|
||||||
.clone()
|
.as_ref()
|
||||||
.map(FilesystemOptions::into_options)
|
.map(|options| options.top_level.clone())
|
||||||
.map(|options| options.top_level)
|
|
||||||
.unwrap_or_default(),
|
.unwrap_or_default(),
|
||||||
));
|
));
|
||||||
|
|
||||||
let filesystem_install_mirrors = filesystem
|
let filesystem_install_mirrors = filesystem_options
|
||||||
.map(FilesystemOptions::into_options)
|
.map(|options| options.install_mirrors.clone())
|
||||||
.map(|options| options.install_mirrors)
|
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
|
|
||||||
let settings = ResolverInstallerSettings::from(options.clone());
|
let mut settings = ResolverInstallerSettings::from(options.clone());
|
||||||
|
if torch_backend.is_some() {
|
||||||
|
settings.resolver.torch_backend = torch_backend;
|
||||||
|
}
|
||||||
let lfs = GitLfsSetting::new(lfs.then_some(true), environment.lfs);
|
let lfs = GitLfsSetting::new(lfs.then_some(true), environment.lfs);
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
|
@ -3199,6 +3207,7 @@ pub(crate) struct ResolverSettings {
|
||||||
pub(crate) prerelease: PrereleaseMode,
|
pub(crate) prerelease: PrereleaseMode,
|
||||||
pub(crate) resolution: ResolutionMode,
|
pub(crate) resolution: ResolutionMode,
|
||||||
pub(crate) sources: SourceStrategy,
|
pub(crate) sources: SourceStrategy,
|
||||||
|
pub(crate) torch_backend: Option<TorchMode>,
|
||||||
pub(crate) upgrade: Upgrade,
|
pub(crate) upgrade: Upgrade,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3253,6 +3262,7 @@ impl From<ResolverOptions> for ResolverSettings {
|
||||||
extra_build_variables: value.extra_build_variables.unwrap_or_default(),
|
extra_build_variables: value.extra_build_variables.unwrap_or_default(),
|
||||||
exclude_newer: value.exclude_newer,
|
exclude_newer: value.exclude_newer,
|
||||||
link_mode: value.link_mode.unwrap_or_default(),
|
link_mode: value.link_mode.unwrap_or_default(),
|
||||||
|
torch_backend: value.torch_backend,
|
||||||
sources: SourceStrategy::from_args(value.no_sources.unwrap_or_default()),
|
sources: SourceStrategy::from_args(value.no_sources.unwrap_or_default()),
|
||||||
upgrade: value.upgrade.unwrap_or_default(),
|
upgrade: value.upgrade.unwrap_or_default(),
|
||||||
build_options: BuildOptions::new(
|
build_options: BuildOptions::new(
|
||||||
|
|
@ -3344,6 +3354,7 @@ impl From<ResolverInstallerOptions> for ResolverInstallerSettings {
|
||||||
prerelease: value.prerelease.unwrap_or_default(),
|
prerelease: value.prerelease.unwrap_or_default(),
|
||||||
resolution: value.resolution.unwrap_or_default(),
|
resolution: value.resolution.unwrap_or_default(),
|
||||||
sources: SourceStrategy::from_args(value.no_sources.unwrap_or_default()),
|
sources: SourceStrategy::from_args(value.no_sources.unwrap_or_default()),
|
||||||
|
torch_backend: value.torch_backend,
|
||||||
upgrade: value.upgrade.unwrap_or_default(),
|
upgrade: value.upgrade.unwrap_or_default(),
|
||||||
},
|
},
|
||||||
compile_bytecode: value.compile_bytecode.unwrap_or_default(),
|
compile_bytecode: value.compile_bytecode.unwrap_or_default(),
|
||||||
|
|
|
||||||
|
|
@ -3565,6 +3565,7 @@ fn resolve_tool() -> anyhow::Result<()> {
|
||||||
link_mode: Some(
|
link_mode: Some(
|
||||||
Clone,
|
Clone,
|
||||||
),
|
),
|
||||||
|
torch_backend: None,
|
||||||
compile_bytecode: None,
|
compile_bytecode: None,
|
||||||
no_sources: None,
|
no_sources: None,
|
||||||
upgrade: None,
|
upgrade: None,
|
||||||
|
|
@ -3573,7 +3574,6 @@ fn resolve_tool() -> anyhow::Result<()> {
|
||||||
no_build_package: None,
|
no_build_package: None,
|
||||||
no_binary: None,
|
no_binary: None,
|
||||||
no_binary_package: None,
|
no_binary_package: None,
|
||||||
torch_backend: None,
|
|
||||||
},
|
},
|
||||||
settings: ResolverInstallerSettings {
|
settings: ResolverInstallerSettings {
|
||||||
resolver: ResolverSettings {
|
resolver: ResolverSettings {
|
||||||
|
|
@ -3615,6 +3615,7 @@ fn resolve_tool() -> anyhow::Result<()> {
|
||||||
prerelease: IfNecessaryOrExplicit,
|
prerelease: IfNecessaryOrExplicit,
|
||||||
resolution: LowestDirect,
|
resolution: LowestDirect,
|
||||||
sources: Enabled,
|
sources: Enabled,
|
||||||
|
torch_backend: None,
|
||||||
upgrade: None,
|
upgrade: None,
|
||||||
},
|
},
|
||||||
compile_bytecode: false,
|
compile_bytecode: false,
|
||||||
|
|
@ -7912,6 +7913,7 @@ fn preview_features() {
|
||||||
prerelease: IfNecessaryOrExplicit,
|
prerelease: IfNecessaryOrExplicit,
|
||||||
resolution: Highest,
|
resolution: Highest,
|
||||||
sources: Enabled,
|
sources: Enabled,
|
||||||
|
torch_backend: None,
|
||||||
upgrade: None,
|
upgrade: None,
|
||||||
},
|
},
|
||||||
compile_bytecode: false,
|
compile_bytecode: false,
|
||||||
|
|
@ -8026,6 +8028,7 @@ fn preview_features() {
|
||||||
prerelease: IfNecessaryOrExplicit,
|
prerelease: IfNecessaryOrExplicit,
|
||||||
resolution: Highest,
|
resolution: Highest,
|
||||||
sources: Enabled,
|
sources: Enabled,
|
||||||
|
torch_backend: None,
|
||||||
upgrade: None,
|
upgrade: None,
|
||||||
},
|
},
|
||||||
compile_bytecode: false,
|
compile_bytecode: false,
|
||||||
|
|
@ -8140,6 +8143,7 @@ fn preview_features() {
|
||||||
prerelease: IfNecessaryOrExplicit,
|
prerelease: IfNecessaryOrExplicit,
|
||||||
resolution: Highest,
|
resolution: Highest,
|
||||||
sources: Enabled,
|
sources: Enabled,
|
||||||
|
torch_backend: None,
|
||||||
upgrade: None,
|
upgrade: None,
|
||||||
},
|
},
|
||||||
compile_bytecode: false,
|
compile_bytecode: false,
|
||||||
|
|
@ -8254,6 +8258,7 @@ fn preview_features() {
|
||||||
prerelease: IfNecessaryOrExplicit,
|
prerelease: IfNecessaryOrExplicit,
|
||||||
resolution: Highest,
|
resolution: Highest,
|
||||||
sources: Enabled,
|
sources: Enabled,
|
||||||
|
torch_backend: None,
|
||||||
upgrade: None,
|
upgrade: None,
|
||||||
},
|
},
|
||||||
compile_bytecode: false,
|
compile_bytecode: false,
|
||||||
|
|
@ -8368,6 +8373,7 @@ fn preview_features() {
|
||||||
prerelease: IfNecessaryOrExplicit,
|
prerelease: IfNecessaryOrExplicit,
|
||||||
resolution: Highest,
|
resolution: Highest,
|
||||||
sources: Enabled,
|
sources: Enabled,
|
||||||
|
torch_backend: None,
|
||||||
upgrade: None,
|
upgrade: None,
|
||||||
},
|
},
|
||||||
compile_bytecode: false,
|
compile_bytecode: false,
|
||||||
|
|
@ -8484,6 +8490,7 @@ fn preview_features() {
|
||||||
prerelease: IfNecessaryOrExplicit,
|
prerelease: IfNecessaryOrExplicit,
|
||||||
resolution: Highest,
|
resolution: Highest,
|
||||||
sources: Enabled,
|
sources: Enabled,
|
||||||
|
torch_backend: None,
|
||||||
upgrade: None,
|
upgrade: None,
|
||||||
},
|
},
|
||||||
compile_bytecode: false,
|
compile_bytecode: false,
|
||||||
|
|
@ -9738,6 +9745,7 @@ fn upgrade_project_cli_config_interaction() -> anyhow::Result<()> {
|
||||||
prerelease: IfNecessaryOrExplicit,
|
prerelease: IfNecessaryOrExplicit,
|
||||||
resolution: Highest,
|
resolution: Highest,
|
||||||
sources: Enabled,
|
sources: Enabled,
|
||||||
|
torch_backend: None,
|
||||||
upgrade: None,
|
upgrade: None,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -9857,6 +9865,7 @@ fn upgrade_project_cli_config_interaction() -> anyhow::Result<()> {
|
||||||
prerelease: IfNecessaryOrExplicit,
|
prerelease: IfNecessaryOrExplicit,
|
||||||
resolution: Highest,
|
resolution: Highest,
|
||||||
sources: Enabled,
|
sources: Enabled,
|
||||||
|
torch_backend: None,
|
||||||
upgrade: Packages(
|
upgrade: Packages(
|
||||||
{
|
{
|
||||||
PackageName(
|
PackageName(
|
||||||
|
|
@ -9999,6 +10008,7 @@ fn upgrade_project_cli_config_interaction() -> anyhow::Result<()> {
|
||||||
prerelease: IfNecessaryOrExplicit,
|
prerelease: IfNecessaryOrExplicit,
|
||||||
resolution: Highest,
|
resolution: Highest,
|
||||||
sources: Enabled,
|
sources: Enabled,
|
||||||
|
torch_backend: None,
|
||||||
upgrade: All,
|
upgrade: All,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -10116,6 +10126,7 @@ fn upgrade_project_cli_config_interaction() -> anyhow::Result<()> {
|
||||||
prerelease: IfNecessaryOrExplicit,
|
prerelease: IfNecessaryOrExplicit,
|
||||||
resolution: Highest,
|
resolution: Highest,
|
||||||
sources: Enabled,
|
sources: Enabled,
|
||||||
|
torch_backend: None,
|
||||||
upgrade: None,
|
upgrade: None,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -10223,6 +10234,7 @@ fn upgrade_project_cli_config_interaction() -> anyhow::Result<()> {
|
||||||
prerelease: IfNecessaryOrExplicit,
|
prerelease: IfNecessaryOrExplicit,
|
||||||
resolution: Highest,
|
resolution: Highest,
|
||||||
sources: Enabled,
|
sources: Enabled,
|
||||||
|
torch_backend: None,
|
||||||
upgrade: All,
|
upgrade: All,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -10331,6 +10343,7 @@ fn upgrade_project_cli_config_interaction() -> anyhow::Result<()> {
|
||||||
prerelease: IfNecessaryOrExplicit,
|
prerelease: IfNecessaryOrExplicit,
|
||||||
resolution: Highest,
|
resolution: Highest,
|
||||||
sources: Enabled,
|
sources: Enabled,
|
||||||
|
torch_backend: None,
|
||||||
upgrade: Packages(
|
upgrade: Packages(
|
||||||
{
|
{
|
||||||
PackageName(
|
PackageName(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue