pub enum InstallLocation<T: Deref<Target = Path>> {
    Venv {
        venv_base: T,
        python_version: (u8, u8),
    },
    Monotrail {
        monotrail_root: T,
        python: PathBuf,
        python_version: (u8, u8),
    },
}
Expand description

Multiplexing between venv install and monotrail install

For monotrail, we have a structure that is {monotrail}/{normalized(name)}/{version}/tag

We use a lockfile to prevent multiple instance writing stuff on the same time As of pip 22.0, e.g. pip install numpy; pip install numpy; pip install numpy will nondeterministically fail

I was also thinking about making a shared lock on the import side, but monotrail install is supposedly atomic (by directory renaming), while for venv installation there can’t be atomicity (we need to add lots of different file without a top level directory / key-turn file we could rename) and the locking would also need to happen in the import mechanism itself to ensure

Variants§

§

Venv

Fields

§venv_base: T

absolute path

§python_version: (u8, u8)
§

Monotrail

Fields

§monotrail_root: T
§python: PathBuf
§python_version: (u8, u8)

Implementations§

source§

impl<T: Deref<Target = Path>> InstallLocation<T>

source

pub fn get_python(&self) -> PathBuf

Returns the location of the python interpreter

source

pub fn get_python_version(&self) -> (u8, u8)

source

pub fn is_installed(&self, normalized_name: &str, version: &str) -> bool

TODO: This function is unused?

source§

impl InstallLocation<PathBuf>

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for InstallLocation<T>where T: RefUnwindSafe,

§

impl<T> Send for InstallLocation<T>where T: Send,

§

impl<T> Sync for InstallLocation<T>where T: Sync,

§

impl<T> Unpin for InstallLocation<T>where T: Unpin,

§

impl<T> UnwindSafe for InstallLocation<T>where T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more