这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

Learning Python

Python 学习笔记

1 - 安装 Python

Python 在各个平台上的安装

1.1 - windows 安装

在 windows 上安装 python

1.1.1 - [不推荐]直接安装python

使用二进制文件直接在 windows 上安装特定版本的 python

下载

https://www.python.org/ftp/python/

从这个网址可以下载到各个版本的 python 安装文件,比如常见的 3.10/3.11/3.12 版本:

下载对应版本的 python-3.xx.x-amd64.exe 文件即可。

安装

通过下载的 python-3.xx.x-amd64.exe 文件安装。

安装过程选自定义安装,然后记得勾选自动设置windows环境变量。

安装完成后,在 cmd 中验证版本:

$ pip --version
pip 23.0.1 from D:\work\soft\python\lib\site-packages\pip (python 3.10)

$ python --version
Python 3.10.11

问题

直接安装是最简单最直接的方式,但只能安装一个版本,当遇到需要多个 python 版本时就麻烦了。

因此,日常还是用 pyenv 来安装和管理多个 python 版本。

1.1.2 - 使用 pyenv 安装

使用 pyenv 在 windows 上安装多个版本的 python

pyenv

pyenv 介绍

pyenv 是一个简单的 python 版本管理工具,官网地址:

https://github.com/pyenv/pyenv

pyenv 的官网说明:

Pyenv 并不正式支持 Windows,也不能在 Windows 的 Linux 子系统之外的 Windows 环境中运行。此外,即使在 Windows 下,它所安装的 Pythons 也不是原生的 Windows 版本,而是在虚拟机中运行的 Linux 版本,因此你不会获得 Windows 特有的功能。

如果您使用的是 Windows,我们建议您使用 @kirankotari 的 pyenv-win fork,它可以安装原生的 Windows Python 版本。

因此在 windows 平台上,要使用 pyenv-win:

https://github.com/pyenv-win/pyenv-win/

pyenv 安装

参考 pyenv-win 的官方安装文档:

https://github.com/pyenv-win/pyenv-win/blob/master/docs/installation.md

打开 cmd,执行命令:

git clone https://github.com/pyenv-win/pyenv-win.git "%USERPROFILE%\.pyenv"

增加如下环境变量:

  • PYENV=C:\Users\sky\.pyenv\pyenv-win\
  • PYENV_HOME=C:\Users\sky\.pyenv\pyenv-win\
  • PYENV_ROOT=C:\Users\sky\.pyenv\pyenv-win\

修改 PATH 环境变量,增加两个路径:

  • %USERPROFILE%\.pyenv\pyenv-win\bin
  • %USERPROFILE%\.pyenv\pyenv-win\shims

重新打开 cmd 或者 git-bash,验证一下:

$ pyenv --version
pyenv 3.1.1

安装 python

pyenv 命令

通过下面的命令可以看到 pyenv 可以安装的版本列表:

pyenv install -l

内容太多了,按照版本 grep 一下,如看看 3.11.x 版本:

pyenv install -l | grep 3.11

安装 3.11.9 版本

安装 python 3.11.9 版本:

pyenv install 3.11.9

输出为:

:: [Info] ::  Mirror: https://www.python.org/ftp/python
:: [Info] ::  Mirror: https://downloads.python.org/pypy/versions.json
:: [Info] ::  Mirror: https://api.github.com/repos/oracle/graalpython/releases
:: [Downloading] ::  3.11.9 ...
:: [Downloading] ::  From https://www.python.org/ftp/python/3.11.9/python-3.11.9-amd64.exe
:: [Downloading] ::  To   C:\Users\sky\.pyenv\pyenv-win\install_cache\python-3.11.9-amd64.exe
:: [Installing] ::  3.11.9 ...
:: [Info] :: completed! 3.11.9

设置 3.11.9 为全局默认版本:

pyenv global 3.11.9

验证一下 python 版本:

$ python3 --version
Python 3.11.9
$ python --version
Python 3.11.9

此时通过 pyenv versions 命令可以看到系统中只安装了一个 3.11.9 版本:

$ pyenv versions
* 3.11.9 (set by C:\Users\sky\.pyenv\pyenv-win\version)

此时 pip 版本信息如下:

$ pip --version
pip 24.0 from C:\Users\sky\.pyenv\pyenv-win\versions\3.11.9\Lib\site-packages\pip (python 3.11)

安装 3.10.11 版本

安装 python 3.10.11 版本:

pyenv install 3.10.11

安装 3.12.8 版本

安装 python 3.12.8 版本:

pyenv install 3.12.8

切换版本

pyenv 的 shell 命令本来是用来在当前 shell 中临时设置 python 版本,覆盖 global 设置。但是不知道为什么在 windows 下这个命名不能生效:

$ pyenv versions
  3.10.11
* 3.11.9 (set by C:\Users\sky\.pyenv\pyenv-win\version)
  3.12.8

$ python3 --version
Python 3.11.9

$ code pyenv shell 3.12.8

$ pyenv versions
  3.10.11
* 3.11.9 (set by C:\Users\sky\.pyenv\pyenv-win\version)
  3.12.8

$ python3 --version
Python 3.11.9

因此只好通过 pyenv global 命令来修改了,只是这样每次用的时候要注意先确认当前到底设置为哪个版本了。

$ pyenv global 3.12.8

$ pyenv versions
  3.10.11
  3.11.9
* 3.12.8 (set by C:\Users\sky\.pyenv\pyenv-win\version)

$ python3 --version
Python 3.12.8

$ pip --version
pip 24.3.1 from C:\Users\sky\.pyenv\pyenv-win\versions\3.12.8\Lib\site-packages\pip (python 3.12)

1.1.3 - 使用 anaconda 安装

使用 anaconda 在 windows 上安装多个版本的 python

anaconda 介绍

anaconda 是一个免费的 python 发行版本,包含很多常用的 python 库,官网地址:

https://www.anaconda.com/

anaconda 的官网说明:

The Operating System for AI

The world’s most trusted open ecosystem for sourcing, building, and deploying data science and AI initiatives

为 AI 打造的操作系统

全球最值得信赖的开放生态系统,用于 数据科学和 AI 的获取、构建和部署

anaconda 安装

下载地址:

https://www.anaconda.com/download/#windows

下载 Anaconda3 Windows x86_64 安装文件如:

https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Windows-x86_64.exe

安装时选择只为自己安装,然后选择安装路径 D:\sky\work\soft\anaconda\,设置采用默认选项:

安装 python

在 anaconda navigator 界面,点击 Environments 标签,点击 Create 按钮,选择 Python 3.xx 版本,点击 Create 按钮,创建一个名为 xxxx 的环境。

然后点名字后面的绿色三角符号,就可以打开一个 cmd 命令行终端,在这个终端中输入 python --version 就可以看到 python 的版本。

之后就可以在这个环境中使用 python 了。

1.2 - linux 安装

在 linux 上安装 python

1.2.1 - 使用 pyenv 安装

使用 pyenv 在 linux 上安装多个版本的 python

以 debian 12 为例,通过 pyenv 安装多个版本的 python。

安装 pyenv

pyenv 介绍

pyenv 是一个简单的 python 版本管理工具,官网地址:

https://github.com/pyenv/pyenv

pyenv 安装

参考 pyenv 的官方安装文档:

https://github.com/pyenv/pyenv?tab=readme-ov-file#linuxunix

执行安装命令:

curl -fsSL https://pyenv.run | bash

输出为:

Cloning into '/home/sky/.pyenv'...
remote: Enumerating objects: 1363, done.
remote: Counting objects: 100% (1363/1363), done.
remote: Compressing objects: 100% (724/724), done.
remote: Total 1363 (delta 824), reused 806 (delta 506), pack-reused 0 (from 0)
Receiving objects: 100% (1363/1363), 1.14 MiB | 5.63 MiB/s, done.
Resolving deltas: 100% (824/824), done.
Cloning into '/home/sky/.pyenv/plugins/pyenv-doctor'...
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 11 (delta 1), reused 5 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (11/11), 38.72 KiB | 619.00 KiB/s, done.
Resolving deltas: 100% (1/1), done.
Cloning into '/home/sky/.pyenv/plugins/pyenv-update'...
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 10 (delta 1), reused 5 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (10/10), done.
Resolving deltas: 100% (1/1), done.
Cloning into '/home/sky/.pyenv/plugins/pyenv-virtualenv'...
remote: Enumerating objects: 64, done.
remote: Counting objects: 100% (64/64), done.
remote: Compressing objects: 100% (57/57), done.
Receiving objects: 100% (64/64), 43.08 KiB | 1.08 MiB/s, done.
remote: Total 64 (delta 10), reused 23 (delta 0), pack-reused 0 (from 0)
Resolving deltas: 100% (10/10), done.

WARNING: seems you still have not added 'pyenv' to the load path.

# Load pyenv automatically by appending
# the following to
# ~/.bash_profile if it exists, otherwise ~/.profile (for login shells)
# and ~/.bashrc (for interactive shells) :

export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"

# Restart your shell for the changes to take effect.

# Load pyenv-virtualenv automatically by adding
# the following to ~/.bashrc:

eval "$(pyenv virtualenv-init -)"

pyenv 被安装在目录 “$HOME/.pyenv”,遵循上面的提示,

vi ~/.zshrc

增加如下内容:

export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - zsh)"

备注:注意修改 bash 为 zsh,因为我一般默认用 zsh。这里如果没有改过来,后面安装完成后 path 路径会有问题。

执行

source ~/.zshrc

重新装载,然后验证一下:

pyenv --version

输出为:

pyenv 2.5.3

安装 python

准备工作

python 安装时需要使用 zlib,首先安装:

sudo apt install zlib1g-dev libbz2-dev libncurses-dev libffi-dev libreadline-dev libssl-dev libsqlite3-dev liblzma-dev

否则会报错:

ModuleNotFoundError: No module named 'zlib'
ModuleNotFoundError: No module named '_bz2'
ModuleNotFoundError: No module named '_curses'
ModuleNotFoundError: No module named '_ctypes'
ModuleNotFoundError: No module named 'readline'
ModuleNotFoundError: No module named '_ssl'
ModuleNotFoundError: No module named '_sqlite3'
ModuleNotFoundError: No module named '_lzma'

安装完成之后,验证一下:

python3 -c "import bz2; import curses; import ctypes; import readline; import ssl; print('All modules loaded successfully')"

如果没有报错,则输出为:

All modules loaded successfully

pyenv 命令

通过下面的命令可以看到 pyenv 可以安装的版本列表:

pyenv install -l

内容太多了,按照版本 grep 一下,如看看 3.11.x 版本:

pyenv install -l | grep 3.11

安装 3.11 版本

pyenv install -l | grep 3.11

发现 3.11 系列最新的是 3.11.11 版本。

安装 python 3.11.11 版本:

pyenv install 3.11.11

输出为:

Downloading Python-3.11.11.tar.xz...
-> https://www.python.org/ftp/python/3.11.11/Python-3.11.11.tar.xz
Installing Python-3.11.11...
Installed Python-3.11.11 to /home/sky/.pyenv/versions/3.11.11

设置 3.11.1 为全局默认版本:

pyenv global 3.11.11

验证一下 python 版本:

$ python3 --version
Python 3.11.11
$ python --version
Python 3.11.9

此时通过 pyenv versions 命令可以看到系统中只安装了一个 3.11.11 版本和一个系统自带的版本(system):

$ pyenv versions
pyenv versions
  system
* 3.11.11 (set by /home/sky/.pyenv/version)

此时 pip 版本信息如下:

$ pip --version
pip 24.0 from /home/sky/.pyenv/versions/3.11.11/lib/python3.11/site-packages/pip (python 3.11)

$ pip3 --version
pip 24.0 from /home/sky/.pyenv/versions/3.11.11/lib/python3.11/site-packages/pip (python 3.11)

安装 3.10 版本

pyenv install -l | grep 3.10

发现 3.10 系列最新的是 3.10.16 版本:

pyenv install 3.10.16

安装 3.12 版本

pyenv install -l | grep 3.12

发现 3.12 系列最新的是 3.12.9 版本:

pyenv install 3.12.9

切换版本

pyenv 的 shell 命令用来在当前 shell 中临时设置 python 版本,覆盖 global 设置:

$ pyenv versions
  system
  3.10.16
* 3.11.11 (set by /home/sky/.pyenv/version)
  3.12.9

$ python3 --version
Python 3.11.11

$ pyenv shell 3.12.9

$ pyenv versions
  system
  3.10.16
  3.11.11
* 3.12.9 (set by PYENV_VERSION environment variable)

$ python3 --version
Python 3.12.9

pyenv global 命令修改全局默认配置,注意这个修改不会立即生效,需要退出当前 shell 重新打开:

$ pyenv global 3.10.16

# 不直接生效
$ pyenv versions
  system
  3.10.16
  3.11.11
* 3.12.9 (set by PYENV_VERSION environment variable)

# 退出当前 shell 重新打开
$ pyenv versions
  system
* 3.10.16 (set by /home/sky/.pyenv/version)
  3.11.11
  3.12.9

$ python3 --version
Python 3.10.16

$ pip --version
pip 23.0.1 from /home/sky/.pyenv/versions/3.10.16/lib/python3.10/site-packages/pip (python 3.10)

1.3 - 设置 pip 的源

为 pip 配置国内镜像源和 nexus 代理仓库

默认 pip 使用的是国外的镜像(疑似是 https://pypi.org/ ?),速度较慢。

升级 pip

安装完成后的 pip 版本:

pip3 --version      

pip 24.0 from /home/sky/.pyenv/versions/3.11.11/lib/python3.11/site-packages/pip (python 3.11)

升级 pip 到最新的版本:

python -m pip install --upgrade pip

输出为:

Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: pip in ./.pyenv/versions/3.11.11/lib/python3.11/site-packages (24.0)
Collecting pip
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/c9/bc/b7db44f5f39f9d0494071bddae6880eb645970366d0a200022a1a93d57f5/pip-25.0.1-py3-none-any.whl (1.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 4.8 MB/s eta 0:00:00
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 24.0
    Uninstalling pip-24.0:
      Successfully uninstalled pip-24.0
Successfully installed pip-25.0.1

升级之后的 pip 版本:

pip --version
pip 25.0.1 from /home/sky/.pyenv/versions/3.11.11/lib/python3.11/site-packages/pip (python 3.11)

配置国内镜像源

linux 下 pip 的配置文件路径是 ~/.pip/pip.conf

mkdir -p ~/.pip

vi ~/.pip/pip.conf

windows 下 pip 的配置文件路径是 ~/pip/pip.ini

mkdir -p ~/pip

vi ~/pip/pip.ini

配置的方式是一样的,输入内容:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn

配置完成后检查:

pip3 config list 

正常应输出:

global.index-url='https://pypi.tuna.tsinghua.edu.cn/simple'
install.trusted-host='https://pypi.tuna.tsinghua.edu.cn'

其他国内源

备用:

配置 nexus 代理源

创建代理仓库

在 nexus 中,创建 pypi proxy 仓库, 如:

备注: 特别注意代理地址不能带 /simple 后缀,否则会报错

验证代理是否可用,可以访问如下的地址:

http://192.168.0.246:8081/repository/pypi-proxy-pypiorg/simple/requests/

正常会显示如下:

备注: 如果代理地址中带 /simple 后缀,访问这个地址就会报错 404.

再创建一个名为 pypi-public 的 pypi group 仓库,将上面两个 pypi proxy 仓库加进去,顺序为:

  • pypi-proxy-tsinghua
  • pypi-proxy-pypiorg

以后对外都只使用 pypi-public 仓库,如果内部有什么改动如修改代理仓库为阿里云,就不会影响到外部的使用。

使用代理仓库

修改 pip 配置,设置为:

[global]
index-url = http://192.168.0.246:8081/repository/pypi-public/simple
[install]
trusted-host = 192.168.0.246:8081

尝试安装一个 pdf2zh 验证代理:

pip install pdf2zh

正常能看到从代理仓库下载:

Collecting shellingham>=1.3.0
  Downloading http://192.168.0.246:8081/repository/pypi-public/packages/shellingham/1.5.4/shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)
Collecting toposort>=1.5
  Downloading http://192.168.0.246:8081/repository/pypi-public/packages/toposort/1.10/toposort-1.10-py3-none-any.whl (8.5 kB)
Collecting click-default-group>=1.2
  Downloading http://192.168.0.246:8081/repository/pypi-public/packages/click-default-group/1.2.4/click_default_group-1.2.4-py2.py3-none-any.whl (4.1 kB)

安装完成之后再去验证 nexus pypi 代理仓库: