Python支持多种方式安装,这里推荐使用Anaconda,更方便管理版本等信息。

1. Anaconda介绍

Anaconda 是一个用于科学计算的Python 发行版,支持Linux、Mac、Windows 系统,包含了众多流行的科学计算、数据分析的Python 包。 此外,Anaconda 提供了包管理与环境管理的功能,可以很方便地解决多版本python 并存、切换以及各种第三方包安装问题。

1.1 下载方式

从官网下载比较慢,推荐使用国内下载地址,然后选择自己系统对应的版本,下载即可

2. 镜像源

2.1 更换国内源

通常anaconda的默认源在境外,下载速度会非常慢甚至导致网络错误下载包失败,这里推荐清华大学镜像源,添加方法如下:

# 创建.condarc文件
$ conda config --set show_channel_urls yes

# 编辑.condarc文件
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

注:由于更新过快难以同步,该镜像源不会同步pytorch-nightly, pytorch-nightly-cpu, ignite-nightly这三个包。更多信息可查看官方文档:https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/

2.2 清除缓存

添加镜像源成功后,需要手动清除索引缓存,保证用的是镜像是最新的配置;清除命令如下:

# 清除索引缓存
$ conda clean -i

2.3 更新镜像源

$ conda update --all

2.4 版本升级

# 查看当前版本
$ conda -V
conda 22.9.0
# 升级版本
$ conda update conda
Collecting package metadata (current_repodata.json): done
Solving environment: done

# All requested packages already installed.

Retrieving notices: ...working... done

3. 管理python环境

3.1 查看可用版本

使用conda search x搜索某个软件包的可用版本。

$ conda search python
Loading channels: done
# Name Version Build Channel
python 2.7.13 h32f5f24_13 anaconda/pkgs/main
....
python 3.9.15 h218abb5_2 anaconda/pkgs/main
...
python 3.10.0 h88f2d9e_0 anaconda/pkgs/main
....
python 3.11.0 h1fd4e5f_2 anaconda/pkgs/main
...

3.2 创建环境

使用conda create --name 环境名称 python=x创建python新环境,x可指定具体版本,如下示例创建python3.10版本

# 创建python3.10开发环境,环境名称为: py310
$ conda create --name py310 python=3.10
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##
environment location: /Users/liuqh/opt/anaconda3/envs/py310
added / updated specs:
- python=3.10

The following packages will be downloaded:

package | build
---------------------------|-----------------
pip-23.0.1 | py310hecd8cb5_0 2.6 MB defaults
python-3.10.11 | h218abb5_2 13.1 MB defaults
setuptools-66.0.0 | py310hecd8cb5_0 1.2 MB defaults
wheel-0.38.4 | py310hecd8cb5_0 66 KB defaults
------------------------------------------------------------
Total: 17.0 MB
...
Proceed ([y]/n)?
# 输入:y
Downloading and Extracting Packages
python-3.10.11 | 13.1 MB | ######################################################################## | 100%
wheel-0.38.4 | 66 KB | ######################################################################## | 100%
pip-23.0.1 | 2.6 MB | ######################################################################## | 100%
setuptools-66.0.0 | 1.2 MB | ######################################################################## | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate py310
#
# To deactivate an active environment, use
#
# $ conda deactivate

Retrieving notices: ...working... done

3.3 列出环境

使用conda env list可以列出我们创建的所有开发环境;

# 列出创建的所有开发环境
$ conda env list
# conda environments:
base * /Users/liuqh/opt/anaconda3 # 这里的*代表当前使用环境
py310 /Users/liuqh/opt/anaconda3/envs/py310
python3.11 /Users/liuqh/opt/anaconda3/envs/python3.11
python3.7 /Users/liuqh/opt/anaconda3/envs/python3.7

3.4 激活环境

当我们使用的项目,用了不同的python版本时,可以通过激活对应的环境,来选择适应的版本;激活环境的命令如下:

# 激活python3.11开发环境
$ conda activate python3.11
(python3.11) ~ python -V
Python 3.11.3
# 激活刚才创建的py310开发环境
$ conda activate py310
(py310) ➜ ~ python -V
Python 3.10.11

3.5 删除环境

当我们不想使用某些环境时,可以通过命令:conda env remove --name 环境名称来删除环境,如下示例删除py310环境

# 删除
$ conda env remove --name py310

Remove all packages in environment /Users/liuqh/opt/anaconda3/envs/py310:
# 查看是否删除
$ conda env list
# conda environments:
base * /Users/liuqh/opt/anaconda3 # 这里的*代表当前使用环境
python3.11 /Users/liuqh/opt/anaconda3/envs/python3.11
python3.7 /Users/liuqh/opt/anaconda3/envs/python3.7

3.6 导出环境

如果想把本地开发环境,分享给同事,可以通过导出命令conda env export,如下:

# 导出当前环境
(python3.7) $ conda env export > py37.yaml
# 查看导出文件
(python3.7) $ ls
py37.yaml
# 查看文件内容
$ cat py37.yaml
name: python3.7
channels:
- defaults
dependencies:
- ca-certificates=2023.01.10=hecd8cb5_0
...
- pip:
- numpy==1.19.1
...
prefix: /Users/liuqh/opt/anaconda3/envs/python3.7

3.7 导入环境

有导出自然就有导出,比如同事给你的环境文件是py37.yaml,你可以基于这个文件直接导入本地,导入命令如下:

# 基于环境文件创建环境
$ conda env create -f py37.yaml
Collecting package metadata (repodata.json): done
Solving environment: done
Preparing transaction: done
Verifying transaction: done

3.8 默认环境

1. 关闭base环境

安装完 Conda 之后,开启终端将默认进入base 环境,如果想关闭可使用下面命令:

# 执行后,新启动终端发现已经不在进入base环境
$ conda config --set auto_activate_base false

2. 指定默认环境(mac)

修改~/.bashrc

# 你本地的anaconda3安装路中的etc/profile.d/conda.sh
source /Users/liuqh/opt/anaconda3/etc/profile.d/conda.sh
# 切换到某个环境
conda activate python3.11

修改之后执行source ~/.bashrc,后面新创建的终端都是指定环境

4. 依赖管理

4.1 安装依赖

python安装依赖(第三方包),常见的方式是使用pip install,除此之外,还可以使用conda install,下面以安装requests为示例,两种方式使用分别如下:

# 使用pip 安装
$ pip install requests

# 使用 conda
$ conda install requests

# 安装指定版本
$ conda install requests=2.29.0

通过pip 安装依赖时,可以使用 -i指定加速源来提升下载速度,如下示例:

# 根据requirements.txt 下载依赖
$ pip install -r requirements.txt -i 加速源

# 直接下载包
$ pip install -i 加速源 numpy

国内加速源部分整理如下:

1. 清华大学开源软件镜像站:https://pypi.tuna.tsinghua.edu.cn/simple/
2. 阿里云 PyPI 镜像:http://mirrors.aliyun.com/pypi/simple/
3. 华为云 PyPI 镜像:http://mirrors.huaweicloud.com/repository/pypi/simple/
4. 豆瓣 PyPI 镜像:http://pypi.douban.com/simple/
5. ustc PyPI 镜像:http://mirrors.ustc.edu.cn/pypi/web/simple/

### 4.2 删除依赖

```shell
$ conda remove requests

4.3 查看已安装依赖

# 查看所有
$ conda list
(base) ➜ ~ conda list
# packages in environment at /Users/liuqh/opt/anaconda3:
# Name Version Build Channel
_anaconda_depends 2023.03 py39_0 defaults
_ipyw_jlab_nb_ext_conf 0.1.0 py39hecd8cb5_1 defaults
alabaster 0.7.12 pyhd3eb1b0_0 defaults
...
# 通过模糊搜索
$ conda list | grep req
requests 2.29.0 py39hecd8cb5_0 defaults
requests-file 1.5.1 pyhd3eb1b0_0 defaults
requests-toolbelt 0.9.1 pyhd3eb1b0_0 defaults

5. 编辑器

5.1 下载PyCharm

官方下载地址:https://www.jetbrains.com/pycharm/download

image-20230531100251989

破解方式参考: https://www.exception.site/essay/pycharm-pojie-jihuoma

5.2 配置PyCharm

这里以mac系统为示例,windows系统同学可做参考;

image-20230531101058103

image-20230531101551091

image-20230531101706083

image-20230531101806925

6. 运行代码

开发过程中,我们需要经常测试一段代码的输出,是否符合我们的预期,这里列出一些常见的运行代码示例;

6.1 通过命令行交互

# 控制台输入python进入命令交互
➜ python
Python 3.9.16 (main, Mar 8 2023, 04:29:44)
[Clang 14.0.6 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print('hello word')
hello word
>>> import datetime
>>> print('当前时间: ', datetime.datetime.now())
当前时间: 2023-05-31 23:58:34.588136

6.2 通过Pycharm

推荐使用这种方式,命令行不能保存代码,也无法进行断点debug

image-20230601001300612

编写如下代码:

import datetime
import unittest


class MyTestCase(unittest.TestCase):

def test_something(self):
print("\nHello Word")
print('当前时间: ', datetime.datetime.now())


if __name__ == '__main__':
unittest.main()

image-20230601003508191

运行及结果如下:

============================= test session starts ==============================
collecting ... collected 1 item

demo_test.py::MyTestCase::test_something PASSED [100%]
Hello Word
当前时间: 2023-06-01 00:34:01.070989


============================== 1 passed in 0.01s ===============================

6.3 使用jupyter

1. 安装

$ conda install jupyter

2.启动

$ jupyter-notebook
[I 00:39:01.185 NotebookApp] 把notebook服务器的cookie密码写入 /Users/liuqh/Library/Jupyter/runtime/notebook_cookie_secret

_ _ _ _
| | | |_ __ __| |__ _| |_ ___
| |_| | '_ \/ _` / _` | _/ -_)
\___/| .__/\__,_\__,_|\__\___|
|_|

Read the migration plan to Notebook 7 to learn about the new features and the actions to take if you are using extensions.

https://jupyter-notebook.readthedocs.io/en/latest/migrate_to_notebook7.html

Please note that updating to Notebook 7 might break some of your extensions.

[W 00:39:02.754 NotebookApp] Loading JupyterLab as a classic notebook (v6) extension.
[I 2023-06-02 00:39:02.764 LabApp] JupyterLab extension loaded from /Users/liuqh/opt/anaconda3/envs/py3.11/lib/python3.11/site-packages/jupyterlab
[I 2023-06-02 00:39:02.764 LabApp] JupyterLab application directory is /Users/liuqh/opt/anaconda3/envs/py3.11/share/jupyter/lab
[I 00:39:02.771 NotebookApp] notebooks 运行所在的本地路径: /Users/liuqh
[I 00:39:02.771 NotebookApp] Jupyter Notebook 6.5.4 is running at:
[I 00:39:02.771 NotebookApp] http://localhost:8888/?token=158b1ac571d08daed6bbe1a8a95c638524e376d057f26f8c
[I 00:39:02.771 NotebookApp] or http://127.0.0.1:8888/?token=158b1ac571d08daed6bbe1a8a95c638524e376d057f26f8c
[I 00:39:02.771 NotebookApp] 使用 Control-C 停止此服务器并关闭所有内核(连续操作两次便可跳过确认界面)。
[C 00:39:02.782 NotebookApp]

To access the notebook, open this file in a browser:
file:///Users/liuqh/Library/Jupyter/runtime/nbserver-98400-open.html
Or copy and paste one of these URLs:
http://localhost:8888/?token=158b1ac571d08daed6bbe1a8a95c638524e376d057f26f8c
or http://127.0.0.1:8888/?token=158b1ac571d08daed6bbe1a8a95c638524e376d057f26f8c
This version of python seems to be incorrectly compiled
(internal generated filenames are not absolute).
This may make the debugger miss breakpoints.
Related bug: http://bugs.python.org/issue1666807

3.使用

在浏览器中访问上述链接,默认会自动在浏览器中打开

image-20230602004529808

jupyter特别适合用于大数据分析、机器学习代码调试,可以很直观的把结果形成图像展示。

4. jupyter-lab

jupyter-notebook启动的单文件编辑,如果想编辑多个文件,可以使用jupyter-lab启动一个类似在线编辑的页面,效果如下图:

如果想在线运行python代码,需要新建后缀为.ipynb文件,然后通过下面两种方式运行代码:

  • 使用%run main.py 直接运行;
  • 使用%load main.py可以先加载源码,然后点击运行。