20

I have python 3.5 on my google cloud shell and want 3.7 so I can do command line debugging of code I am going to deploy via google cloud functions (and use 3.7 features such as f-strings).

I have tried various forms of the following:

sudo apt-get install python37

and always get back

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package python37
Christopher Peisert
  • 21,862
  • 3
  • 86
  • 117
Richard
  • 229
  • 1
  • 2
  • 5

5 Answers5

21

# install pyenv to install python on persistent home directory
curl https://pyenv.run | bash

# add to path
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc

# updating bashrc
source ~/.bashrc

# install python 3.7.4 and make default
pyenv install 3.7.4
pyenv global 3.7.4

# execute
python

This is based on @yungchin answer.

Alen Paul Varghese
  • 1,278
  • 14
  • 27
Ali Khosro
  • 1,580
  • 18
  • 25
15

This worked for me on the GCP shell.

# Install requirements
sudo apt-get install -y build-essential checkinstall libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev zlib1g-dev openssl libffi-dev python3-dev python3-setuptools wget 

# Prepare to build
mkdir /tmp/Python37
cd /tmp/Python37

# Pull down Python 3.7, build, and install
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
tar xvf Python-3.7.0.tar.xz
cd /tmp/Python37/Python-3.7.0
./configure
sudo make altinstall

Then you would just call Python like so:

python3.7 ./yourScript.py

Src: https://serverfault.com/questions/918335/best-way-to-run-python-3-7-on-ubuntu-16-04-which-comes-with-python-3-5

Eponymous
  • 6,143
  • 4
  • 43
  • 43
harmanw
  • 147
  • 1
  • 4
11

Even if the packages were available through apt, the downside of using apt would be that you'd have to install all over again whenever you'd been disconnected from Cloud Shell: it always discards your runtime container.

I'd recommend using https://github.com/pyenv/pyenv for convenience. If you follow the installation guide (and note the bash profile additions should go into .bashrc in our case) you end up with a python build in your home directory, which is persisted across Cloud Shell sessions. This involves just a few steps:

  1. clone the repo into ~/.pyenv
  2. append three lines (see the README) to .bashrc to adjust your $PATH
  3. pyenv install 3.7.3 # this takes a while to build
  4. pyenv global 3.7.3 # sets this version as the default
yungchin
  • 1,519
  • 2
  • 15
  • 17
1

Python 3 can be installed in Cloud Shell as a side-effect of installing Conda/Anaconda. Copy the link to the desired installer shell script available here: Installing on Linux.

Example

Welcome to Cloud Shell! Type "help" to get started.
$ wget https://repo.anaconda.com/miniconda/Miniconda3-py39_4.10.3-Linux-x86_64.sh
$ bash Miniconda3-py39_4.10.3-Linux-x86_64.sh

After following the instructions, close Cloud Shell and open a new session. Python is now updated.

With Conda installed, you can now create environments for additional Python versions as follows:

$ conda create -n "py37" python=3.7.0
$ conda activate py37
$ python --version
Python 3.7.0
Christopher Peisert
  • 21,862
  • 3
  • 86
  • 117
0

Another simple approach is

sudo `which conda` install python=3.7 -y
Christopher Peisert
  • 21,862
  • 3
  • 86
  • 117
abalter
  • 9,663
  • 17
  • 90
  • 145