1

I have a python library I need python 3.9 to run. However, the default python that came with my system is 3.11.3 (as found by doing python --version). I need python to be downgraded, but I can't uninstall python 3.11.3: sudo apt-get remove python3 results in:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 mintsources : Depends: python3-apt but it is not going to be installed
               Depends: python3-gi but it is not going to be installed
               Depends: python3-gi-cairo but it is not going to be installed
               Depends: python3-pycurl but it is not going to be installed
               Depends: mint-common (>= 2) but it is not going to be installed
               Depends: gir1.2-xapp-1.0 but it is not going to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.

What can I do to get python 3.11.3 uninstalled and make python 3.9 default for my system (I have already installed python 3.9 with pyenv but the active version of python is still 3.11.3)

Here is what I've done so far, which is confusing to me why pyenv would show it as 3.9.0, but python as 3.11.3:

(base) matteo@masked-hero:~$ pyenv local 3.9.0
(base) matteo@masked-hero:~$ pyenv versions
  system
* 3.9.0 (set by /home/matteo/.python-version)
  3.9.0/envs/pypy
  pypy --> /home/matteo/.pyenv/versions/3.9.0/envs/pypy
(base) matteo@masked-hero:~$ python --version
Python 3.11.3

After doing init --reverse I get:

matteo@masked-hero:~$ python --version
Python 3.11.3
matteo@masked-hero:~$ pyenv local 3.9.0
matteo@masked-hero:~$ python --version
Python 3.11.3
matteo@masked-hero:~$ python3 --version
Python 3.11.3

My bashrc file has:

matteo@masked-hero:~$ cat .bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # We have color support; assume it's compliant with Ecma-48
    # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
    # a case would tend to support setf rather than setaf.)
    color_prompt=yes
    else
    color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
eval "$(pyenv virtualenv-init -)"
export PATH=/home/matteo/anaconda3/bin:/home/matteo/anaconda3/condabin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/path/to/new/directory
export PATH="$HOME/.pyenv/bin:$PATH"
GT-R
  • 69
  • 10
  • 3
    virtual environment: https://docs.python.org/3/library/venv.html – D.L Aug 03 '23 at 17:11
  • 2
    Do you have conda installed as well? – juanpa.arrivillaga Aug 03 '23 at 17:14
  • yes, I do have conda installed – GT-R Aug 03 '23 at 17:15
  • 1
    @GT-R then I'm pretty sure that is what the Python 3.11.3 is ... what does `which python` give you? I'm betting it's the `conda` one because you seem to have the base conda environment activated: `(base) matteo@masked-hero` – juanpa.arrivillaga Aug 03 '23 at 17:17
  • yes, it is: `/home/matteo/anaconda3/bin/python` – GT-R Aug 03 '23 at 17:18
  • how do I deactivate the base conda? – GT-R Aug 03 '23 at 17:19
  • 1
    This is probably because you have run `conda init` at some point, you can try doing `conda init --reverse` then open a new terminal and see what `which python` gives you – juanpa.arrivillaga Aug 03 '23 at 17:19
  • 1
    Well, you can also just do `conda deactivate base` – juanpa.arrivillaga Aug 03 '23 at 17:20
  • `which python` has no output, and `python --version` responds with `Command 'python' not found, did you mean: ` `command 'python3' from deb python3` `command 'python' from deb python-is-python3` – GT-R Aug 03 '23 at 17:23
  • 1
    @GT-R this is after you did `init --reverse`? I think this is because `apt` is or pyenv is sticking to the convention that you should use `python3`. condad uses just `python`. – juanpa.arrivillaga Aug 03 '23 at 17:23
  • no, i did conda deactivate. But now that i did `init --reverse` it says python 3.11.3 – GT-R Aug 03 '23 at 17:24
  • 1
    well, if you do `conda init --reverse` you need to open a new terminal – juanpa.arrivillaga Aug 03 '23 at 17:25
  • I did do that, and it says python 3.11.3 – GT-R Aug 03 '23 at 17:26
  • 1
    But basiclaly, if you are relying on apt installations, it will use either `python2` or `python3` with no `python` automatically, as far as I remember (I'm usually on MacOS nowadays) – juanpa.arrivillaga Aug 03 '23 at 17:26
  • 1
    can you show the output of these commands in the actual question? It really is your job to provide this information there. Also, what is in your `.bashrc`? – juanpa.arrivillaga Aug 03 '23 at 17:27
  • 1
    But perhaps, to cut the gordian knot here, you can just remove the `conda` installation completely if you don't want it. – juanpa.arrivillaga Aug 03 '23 at 17:31
  • But i use conda for a virtual environment for another project, but what I'm confused about is why pyenv does not seem to be working – GT-R Aug 03 '23 at 17:33
  • 1
    **because you also have conda, which is trying to act like pyenv** – juanpa.arrivillaga Aug 03 '23 at 17:34
  • 1
    again, please show the output of `which python`, not `python --version` – juanpa.arrivillaga Aug 03 '23 at 17:35
  • 1
    Ok, did *in your `.bashrc`* you did: `export PATH=/home/matteo/anaconda3/bin:/home/matteo/anaconda3/condabin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/path/to/new/directory`? Because you just added the `anaconda3/bin` directory to the head of your PATH, that is it is always finding the conda python first. – juanpa.arrivillaga Aug 03 '23 at 17:37
  • I just removed conda, now which python3 has `/usr/bin/python3` still has no output and python3 --version has 3.10.12 – GT-R Aug 03 '23 at 17:38
  • 1
    dude, if you are using the command `python3` then we need to see `which python3`. – juanpa.arrivillaga Aug 03 '23 at 17:38
  • The problem is that I still have python 3.10.12 showing as active python while running 3.9.0 in pyenv – GT-R Aug 03 '23 at 17:44
  • @GT-R **what python is that*? What does `which python3` show you? Why do you refuse to provide any necessary information when you encounter a new problem? This isn't your personal IT support – juanpa.arrivillaga Aug 03 '23 at 21:41

2 Answers2

1

Using brew you can install pyenv and then specify which version of python you want to run in a given environment while you are making it. Your output says that you are in an environment called base, so you are asking the default python installed on your OS what version it is.

steve8094
  • 29
  • 3
0

Well , depends what OS you are using.

If you are using Mac you will use Brew to install Pyenv and choose your version . This is the same with linux but the command in prompt is different , you should follow this steps here https://itslinuxfoss.com/install-use-pyenv-ubuntu/. But if you are using Windows, you can install other version directly, delete your enviroment and choose another script to start the Python in IDE