如何使用不同版本的Python运行Jupyter Notebook?

7

我希望能在我的Jupyter Notebook中同时运行Python 3.8(当前版本)和Python 3.7。我知道可以通过在虚拟环境中创建不同的IPython内核来实现。 因此,我下载了Python 3.7并将其本地安装在我的主目录中。使用这个python二进制文件创建了一个虚拟环境:

> virtualenv -p ~/Python3.7/bin/python3 py37
> source py37/bin/activate

这很完美地运行,并通过检查 python --versionsys.version 正确地显示 'Python 3.7'。 然后,为了创建IPython内核,
(py37) > ipython kernel install --user --name py37 --display-name "Python 3.7"
(py37) > jupyter notebook

这也可以无错误运行,可以确认内核已添加到笔记本中。但它不像虚拟环境那样运行Python 3.7,而是像默认内核一样运行Python 3.8(通过 sys.version 确认)。

我检查了 ~/.local/share/jupyter/kernels/py37/kernel.json 的内容,发现其内容如下:

{
 "argv": [
  "/usr/bin/python3",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "Python 3.7",
 "language": "python"

自然而然,我尝试编辑 /usr/bin/python3 ,将其指向我的 Python 3.7 二进制文件路径 ~/Python3.7/bin/python3,但是在笔记本中,甚至内核都无法正常工作。

我该怎么办呢?

NB:我使用的是 Arch Linux,所以我通过 pacman 而不是像 Arch 推荐的那样使用 pip 安装了 jupytervirtualenv 等。

3个回答

8

我通过艰苦的方式找到了答案,仍然与大家分享一下,以防对某些人有所帮助。

我猜问题是由于通过pacman安装的jupyter笔记本在PATH变量中搜索Python二进制文件,而不是在虚拟环境指定的路径中搜索。由于我在我的主目录中本地安装了Python 3.7,Jupyter无法找到它,并且可能已经默认使用了默认的Python版本。

因此,可能的解决方案是:

  1. 通过Python 3.7设置的虚拟环境中的pip(而不是pacman)安装Jupyter Notebook (这对于Arch Linux用户来说根本不推荐,因为通过pip安装软件包可能会在将来引起问题)
 > wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz  
 > tar -xvf Python-3.7.4.tgz    
 > cd Python-3.5.1/     
 > ./configure --prefix=$HOME/Python37     
 > make     
 > make install   

 > virtualenv -p ~/Python3.7/bin/python3 py37   
 > source py37/bin/activate 

 (py37) > pip install notebook   
 (py37) > python -m notebook
  1. 在默认目录下安装Python 3.7(而非指定其他位置)。使用适当的虚拟环境创建一个新的IPython内核,并使用通过pacman安装的jupyter-notebook(推荐给Arch Linux用户)
    注意1:> python指向更新的全局Python 3.8版本,> python3> python3.7指向新安装的Python 3.7。
    注意2:一旦创建所需的内核,您甚至可以在虚拟环境之外使用该python版本。
 > wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz  
 > tar -xvf Python-3.7.4.tgz    
 > cd Python-3.5.1/     
 > ./configure   
 > make     
 > sudo make install   

 > virtualenv -p $(which python3.7) py37   
 > source py37/bin/activate 

 (py37) > ipython kernel install --user --name py37 --display-name "Python 3.7"
 (py37) > jupyter notebook
  1. 将本地安装的新Python版本所在的目录路径添加到$PATH变量中,创建一个IPython内核,并在适当的虚拟环境中运行Jupyter Notebook。(个人还没有尝试过这个方法,只是觉得这应该可以。不能保证一定有效,而且我认为这不是一个好的解决方案)
 > wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz  
 > tar -xvf Python-3.7.4.tgz    
 > cd Python-3.5.1/     
 > ./configure --prefix=$HOME/Python37 
 > make     
 > make install   
 > export PATH="$HOME/Python37/bin:$PATH"          

 > virtualenv -p  py37   
 > source py37/bin/activate 

 (py37) > ipython kernel install --user --name py37 --display-name "Python 3.7"
 (py37) > jupyter notebook

4

另一种方法是直接使用所需版本的Python来运行笔记本应用程序,前提是已为该Python版本安装了该应用程序(例如,在安装有brew的Mac上使用Python3.8版本):

/usr/local/opt/python@3.8/bin/python3 -m notebook

如果您想为该版本安装软件包:

/usr/local/opt/python@3.8/bin/pip3 install that_package

1
在官方的Jupyter文档中,有关于自定义Jupyter容器的说明。我认为mamba命令可以解决这个问题。以RUN开头的命令也可以在Linux系统上执行。请参考此链接了解详情。
# Choose your desired base image
FROM jupyter/minimal-notebook:latest

# name your environment and choose the python version
ARG conda_env=python37
ARG py_ver=3.7

# you can add additional libraries you want mamba to install by listing them below the first line and ending with "&& \"
RUN mamba create --quiet --yes -p "${CONDA_DIR}/envs/${conda_env}" python=${py_ver} ipython ipykernel && \
    mamba clean --all -f -y

# alternatively, you can comment out the lines above and uncomment those below
# if you'd prefer to use a YAML file present in the docker build context

# COPY --chown=${NB_UID}:${NB_GID} environment.yml "/home/${NB_USER}/tmp/"
# RUN cd "/home/${NB_USER}/tmp/" && \
#     mamba env create -p "${CONDA_DIR}/envs/${conda_env}" -f environment.yml && \
#     mamba clean --all -f -y

# create Python kernel and link it to jupyter
RUN "${CONDA_DIR}/envs/${conda_env}/bin/python" -m ipykernel install --user --name="${conda_env}" && \
    fix-permissions "${CONDA_DIR}" && \
    fix-permissions "/home/${NB_USER}"

# any additional pip installs can be added by uncommenting the following line
# RUN "${CONDA_DIR}/envs/${conda_env}/bin/pip" install --quiet --no-cache-dir

# if you want this environment to be the default one, uncomment the following line:
# RUN echo "conda activate ${conda_env}" >> "${HOME}/.bashrc"

希望这能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接