# 概述

python 开发中的常用工具、命令总结。

工具 作用
conda pip + virtualenv + virtualenvwrapper
Anaconda 数据分析开发包 ,一个打包的集合,里面预装好了conda、某个版本的python、众多packages、科学计算工具等等,就是把很多常用的不常用的库都给你装好了
Miniconda 只包含最基本的内容——python与conda,以及相关的必须依赖项
pyenv 版本管理器
virtualenv 最为常用的虚拟环境工具
virtualenvwrapper 统一管理各个环境的扩展工具。virtualenv 的一个局限是无法统一管理你电脑上的所有虚拟环境,因此环境多了之后,可能会遗漏,或造成冗余。

# 管理工具

# Anaconda

# 下载安装

https://docs.anaconda.com/anaconda/install/windows/ (opens new window)

# 管理环境

# 版本
conda --version

# 查看当前配置
conda config --show

# 更新
conda update conda

# 帮助
conda --help
# or
conda -h

# 创建新环境
conda create --name <env_name> <package_names>
# 如
conda create -n python3 python=3.5 numpy pandas

# 切换环境
activate <env_name>

# 退出当前环境到base,base退出到root
conda deactivate

# 显示已创建环境
conda info --envs
# or
conda info -e
# or
conda env list

# 复制环境
conda create --name <new_env_name> --clone <copied_env_name>

# 删除环境
conda remove --name <env_name> --all
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

# 管理包

# 查找可供安装的包版本
# 精确查找
conda search --full-name <package_full_name>
# 模糊查找
conda search <   text>

# 获取当前环境中已安装的包信息
conda list

# 安装包
# 在指定环境中安装包
conda install --name <env_name> <package_name>
# 在当前环境中安装包
conda install <package_name>
# 如果conda install无法进行安装时,可以用pip安装
pip install <package_name>
# 也可以到 http://anaconda.org 搜索包,通过点击进入包的详情页,复制安装命令进行安装

# 卸载包
# 卸载指定环境中的包
conda remove --name <env_name> <package_name>
# 卸载当前环境中的包
conda remove <package_name>

# 更新包
# 更新所有包
conda update --all
# or
conda upgrade --all
# 更新指定包
conda update <package_name>
# or
conda upgrade <package_name>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 换源

创建文件 C:/Users/xxxx/.condarc

channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
ssl_verify: true
1
2
3
4
5
6

# requirements

conda list -e > requirements.txt # 导出
conda install --yes --file requirements.txt # 导入
1
2

# env.yaml

# yaml or yml,内容如下
name: facings-identifier
channels:
  - defaults
dependencies:
  - python=3.11
  - pip
  - pip:
    - -r requirements.txt
1
2
3
4
5
6
7
8
9
# 根据配置文件创建环境
conda env create -f env.yaml
1
2
# 导出环境配置文件
conda env export > env.yaml
1
2

# 其它配置

conda config --set auto_activate_base true # 打开powershell可以直接进base环境
1

# miniconda

参考:https://blog.csdn.net/djfjkj52/article/details/107330301 (opens new window)

# 下载安装

wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh # 下载
chmod 777 Miniconda3-latest-Linux-x86_64.sh #给执行权限
bash Miniconda3-latest-Linux-x86_64.sh #运行
1
2
3

不将conda加入环境变量

Do you wish the installer to initialize Miniconda3
by running conda init? [yes|no]
[no] >>> 
1
2
3

# 添加源

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
1
2
3
4
conda config --set show_channel_urls yes
conda config --get channels
1
2
vim ~/.condarc # 记录源文件
1

# 命令

# 给权限
chmod 777 ~/miniconda3/bin/activate
# 启动
source ~/miniconda3/bin/activate
# 退出
source ./deactivate
# 或者
conda deactivate
1
2
3
4
5
6
7
8

# pip

# 查找软件

pip search package
1

# 安装软件

pip install package
pip install -r requirements.txt
1
2

# 更新软件

pip install -U package
1

# 卸载软件

pip uninstall package
1

# 列出已安装软件

pip list
1

# 导出依赖

pip freeze > requirements.txt
1

# 换源

创建文件C:/Users/xxxx/pip/pip.ini

linux需要创建 ~/.pip/pip.conf

mkdir ~/.pip
vim ~/.pip/pip.conf
1
2

然后写入

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

# 更新自己

sudo pip3 install --upgrade pip
1

# 查看版本

# 一般情况下这两个应该是一样的,当多个版本时这两个有可能不一样
python -m pip -V
pip -V
1
2
3

# pyenv

# windows安装

# 安装
pip install pyenv-win --target %USERPROFILE%/.pyenv
1
# 环境变量

设置一个系统变量PYENV,值为C:\Users\用户名\.pyenv\pyenv-win

path 里面添加:

%PYENV%\bin
%PYENV%\shims
1
2
# 换源

C:\Users\用户名\.pyenv\pyenv-win\.versions_cache.xmlhttps://www.python.org/ftp/python 全换成 https://npm.taobao.org/mirrors/python

# 使用方法
# 将pyenv相关环境变量放到Path中所有python相关的最上面
# 使用pyenv global XXX 切换到一个特定的python版本
# 或在项目目录中pyenv local XXX 给项目一个固定的版本
# 进入项目目录创建虚拟环境
python -m venv .venv # python -m venv XXX(虚拟环境名)
# 激活虚拟环境
.\.venv\Scripts\activate
# 退出虚拟环境
deactivate
1
2
3
4
5
6
7
8
9

# linux安装

参考:https://blog.kyomind.tw/ubuntu-pyenv/ (opens new window) https://blog.csdn.net/weixin_42892543/article/details/122544900 (opens new window)

# 安装
# 系统没有python命令,安装python-is-python3包可以指定python为默认的python3
sudo apt install python-is-python3

git clone https://github.com/pyenv/pyenv.git ~/.pyenv
1
2
3
4
# 环境变量
# 这一段貌似有问题
echo -e 'if shopt -q login_shell; then' \
      '\n  export PYENV_ROOT="$HOME/.pyenv"' \
      '\n  export PATH="$PYENV_ROOT/bin:$PATH"' \
      '\n eval "$(pyenv init --path)"' \
      '\nfi' >> ~/.bashrc
# 需要改成下面两条,先记录一下,后续观察
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

echo -e 'if [ -z "$BASH_VERSION" ]; then'\
      '\n  export PYENV_ROOT="$HOME/.pyenv"'\
      '\n  export PATH="$PYENV_ROOT/bin:$PATH"'\
      '\n  eval "$(pyenv init --path)"'\
      '\nfi' >>~/.profile
echo 'if command -v pyenv >/dev/null; then eval "$(pyenv init -)"; fi' >> ~/.bashrc
source ~/.bashrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装依赖
sudo apt-get install libc6-dev gcc
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm
1
2
# 指定源下载

参考:https://blog.csdn.net/qq_43213352/article/details/104343365 (opens new window)

v=3.6.0; wget https://npm.taobao.org/mirrors/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/; pyenv install $v 
1
# 安装pyenv-virtualenv
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
1
2
# 使用方法
# 以3.8.7(需要先install)创建虚拟环境
pyenv virtualenv 3.8.7 test 
# 激活
pyenv activate test
# 退出
pyenv deactivate test
# 删除
pyenv uninstall test
# 或者在目录里创建虚拟环境
python -m venv .venv
# 激活
source ./.venv/bin/activate
# 退出
deactivate
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 常用命令

# 列出当前系统中所有安装的python
pyenv versions
# 显示出当前使用的python
pyenv version
# 设置使用哪一个python
pyenv global <python_version>
# 恢复系统版本
pyenv global system
# 通过将版本号写入当前目录下的 .python-version 文件的方式设置 Python 本地版本
pyenv local <python_version>
# 取消本地版本设置
pyenv local –unset
# 安装特定版本的python
pyenv install <python_version> # pyenv install 3.8.7
# 移除特定版本的python
pyenv uninstall <python_version>
# 查看可安装的python
pyenv install -l
# 升级
pyenv update
# 重建环境变量,每当你增删python版本或增删带可执行性的包(如pip)以后,都应该执行一次本命令
pyenv rehash  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# py.exe

适用于 Windows 的 Python 启动器,有助于在 (Windows) 系统上执行具有不同Python版本的 Python 脚本,一般安装在C:\Windows

参考:https://renenyffenegger.ch/notes/Windows/dirs/Windows/py_exe (opens new window)

# 用法

# Show installed Python versions
py -0 # 电脑上通过.exe安装的python的列表
# Run a script (or here: command) with the newest Python 2 version
py -2 -c "import sys; print (sys.version)"
# Run a script (or here: command) with the newest Python 3 version
py -3 -c "import sys; print (sys.version)"
# Specify a more exact version
py -3.6 test.py
# Showing the «real» interpreter
py -c "import sys; print (sys.executable)"
1
2
3
4
5
6
7
8
9
10

# rye

# 安装

https://rye-up.com/guide/installation/#installing-rye (opens new window)

# 使用

https://blog.csdn.net/Java_ZZZZZ/article/details/131201415 (opens new window)

# jupyter

# 使用

# 安装
conda install jupyter notebook
# 汉化,notebook版本7以上
conda install jupyterlab-language-pack-zh-CN
# 启动,最好是在conda的base环境里启动
jupyter notebook
1
2
3
4
5
6

打开 http://localhost:8888/ (opens new window)

# 如果报jupyterlab相关的错,可以将jupyterlab重新安装一下
pip uninstall jupyterlab
pip install jupyterlab
jupyter lab build
jupyter lab
1
2
3
4
5

# 切换内核

# 在需要新加入内核的环境里安装ipykernel
conda activate data-mining
conda install ipykernel
python -m ipykernel install --user --name [Your enviroment name] --display-name "[Name you want to show in jupyter]"
# 如
python -m ipykernel install --user --name data-mining --display-name data-mining
# 切换到base环境启动jupyter notebook
conda activate base
jupyter notebook
# 然后 在页面菜单里 内核->更换内核 切换

# 如果需要删除内核
jupyter kernelspec list # 查看内核列表
jupyter kernelspec remove data-mining # 删除名为data-mining的内核
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 卸载

删除jupyternotebook开头的相关包

删除 C:\Users\用户名\AppData\Roaming\jupyter文件夹

# cell使用

一对 In Out 会话被视作一个代码单元,称为 cell

编辑模式:

  • enter
  • 鼠标直接点

命令模式:

  • esc
  • 鼠标在本单元格之外点一下

快捷键操作

  • 执行代码:shift + enter

命令模式:

  • A,在当前 cell 的上面添加 cell
  • B,在当前 cell 的下面添加 cell
  • 双击 D:删除当前 cell
  • y or m 切换 code 和 markdown

编辑模式:

  • 多光标操作:Ctrl 键点击鼠标
  • 回退:Ctrl+Z
  • 补全代码:变量、方法后跟 Tab 键
  • 为一行或多行代码添加/取消注释:Ctrl+/

# 依赖库管理工具

# pipreqs

# 特点

  1. 搜索依赖库的范围是基于目录的方式,很有针对性。
  2. 搜索的依据是脚本中所import的内容。
  3. 可以在未安装依赖库的环境上生成依赖文件。
  4. 查找软件包信息时,可以指定查询方式(只在本地查询,在Pypi查询、或者在自定义的Pypi服务) 安装

# 安装

pip install pipreqs
1

# 使用

pipreqs /home/project/location # 生成到location目录下
pipreqs ./ --encoding=utf-8 # 不加 --encoding=utf8 可能会出现编码问题
pipreqs ./ --encoding=utf-8 --force # 强制执行,覆盖原有的 requirements.txt 文件
1
2
3

# pigar

pigar 同样可以根据项目路径来生成依赖文件,而且会列出依赖库在文件中哪些位置使用到了

# 安装

pip install pigar
1

# 使用

pigar # 生成requirements.txt 文件
pigar -s bs4 MySQLdb # 通过“-s”参数,查找真实的依赖库
1
2

# pip-tools

pip-tools 包含一组管理项目依赖的工具:pip-compile 与 pip-sync,可以使用命令“pip install pip-tools”统一安装。它最大的优势是可以精准地控制项目的依赖库。

pip-compile 命令主要用于生成依赖文件和升级依赖库,支持在一个依赖文件中嵌套其它的依赖文件(例如,在 requirements.in 文件内,可以用“-c requirements.txt”方式,引入一个依赖文件)。

# 安装

python -m pip install pip-tools -i https://pypi.douban.com/simple/
1

# 使用

然后建立一个 requirements.in 文件,其中可以写入你需要的模块

Django
jsonschema
1
2

执行命令

pip-compile requirements.in # 可生成带有关联依赖的`requirements.txt`
1

生成文件requirements.txt

asgiref==3.5.2
    # via django
attrs==22.1.0
    # via jsonschema
backports-zoneinfo==0.2.1
    # via django
django==4.1.2
    # via -r requirements.in
importlib-resources==5.10.0
    # via jsonschema
jsonschema==4.16.0
    # via -r requirements.in
pkgutil-resolve-name==1.3.10
    # via jsonschema
pyrsistent==0.19.1
    # via jsonschema
sqlparse==0.4.3
    # via django
tzdata==2022.6
    # via django
zipp==3.10.0
    # via importlib-resources
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

pip-sync 命令可以根据 requirements.txt 文件,来对虚拟环境中进行安装、升级或卸载依赖库(注意:除了 setuptools、pip 和 pip-tools 之外)。这样可以有针对性且按需精简地管理虚拟环境中的依赖库。

pip-sync dev-requirements.txt requirements.txt # 将多个“*.txt”依赖文件归并成一个
1

# pipdeptree

pipdeptree 是一个命令行实用程序,可识别安装在环境中python包,用于以依赖树的形式显示已安装的python包,它可为检测相互冲突的依赖包提供帮助。

# 安装

pip install pipdeptree
1

# 使用

pipdeptree # 查看所有包及其依赖
pipdeptree -p package # 查看指定包,其需要的依赖
pipdeptree -p package -r # 查看哪些包,依赖于此包
pipdeptree --json-tree > test.json # 生成json文件
pipdeptree -f | tee requirements.txt # 生成requirements.txt
1
2
3
4
5

# 格式化工具

代码规范 PEP (opens new window)

# pylint

检查违反 PEP 8 规范和常见错误的工具

# 安装

pip install pylint
1

# 使用

pylint [options] {source_file_or_directory}
1

# flake8

Python官方发布的一款辅助检测Python代码是否符合规范的工具

参考:https://zhuanlan.zhihu.com/p/392178725 (opens new window)

# 安装

pip install flake8
1

# 使用

flake8 {directory}
1

# pycodestyle

pycodestyle 检查器提供基于 PEP-8 样式约定的代码建议,原名pep8

# 安装

pip install pycodestyle
1

# 使用

pycodestyle test.py
pycodestyle --statistics -qq test.py # 查看错误发生的频率
1
2

# black

代码格式化工具

参考:https://muzing.top/posts/a29e4743/ (opens new window)

# 安装

pip install black
1

# 使用

black {source_file_or_directory}
# 跳过字符串格式化 Black 会默认将字符串格式化为使用双引号包裹,但有些项目已经使用了单引号的规范且不应修改为双引号,就需要加上一个 `-S / --skip-string-normalization` 的选项。
black -S {source_file_or_directory}
1
2
3

# autopep8

代码格式化工具

# 安装

pip install autopep8
1

# 使用

autopep8 --in-place --aggressive --aggressive test.py # 将格式化后的代码重新写入文件中
autopep8 --aggressive --aggressive test.py # 直接看格式化效果,不覆盖原有的代码
1
2

# yapf

Yapf是另一种有自己的配置项列表的重新格式化代码的工具。它与 Autopep8 的不同之处在于它不仅会指出代码中违反 PEP 8 规范的地方,还会对没有违反 PEP 8 但代码风格不一致的地方重新格式化,旨在令代码的可读性更强。

配置项 (opens new window)

# 安装

pip install yapf
1

# 使用

yapf [options] {source_file_or_directory}
1

# mypy

mypy是一款针对python的静态类型检查程序,默认情况下mypy不会提醒代码任何错误,如果使用的是Python3.6及以上版本,可以使用typing模块为代码进行类型标注,然后mypy就可以根据这些类型提示检查应用程序

参考:https://www.modb.pro/db/127528 (opens new window)

# 安装

pip install mypy
1

# 使用

mypy test.py
1

# pydocstyle

静态分析工具,用于检查是否符合python 文档字符串约定,支持 PEP 257 开箱即用

# 安装

pip install pydocstyle
1

# 使用

pydocstyle test.py # 格式化指定文件
pydocstyle . # 格式化目录
1
2

# isort

# 背景

PEP8 有建议 Python 模块中 import 的导入顺序

  1. 首先引入标准库里的模块
  2. 然后引入第三方模块
  3. 最后引入自己的模块

属于同一个部分的 import 语句按字母顺序排列

isort 可以自动将 Python 模块中的 import 进行排序,并自动按类型划分以满足上面说的 PEP8 规范

官网:https://pycqa.github.io/isort/docs/configuration/options.html (opens new window)

参考:https://zhuanlan.zhihu.com/p/392489048 (opens new window)

# 安装

pip install isort
1

# 使用

isort test.py test1.py # 格式化指定文件
isort . # 格式化目录
isort test.py --diff # 只显示修改建议,但不会修改文件
1
2
3

# 开发工具

# VS Code

配置:https://code.visualstudio.com/docs/python/python-tutorial (opens new window)

参考:https://www.cnblogs.com/it-tsz/p/9346110.html (opens new window)

# 参考

  1. Conda和Pyenv哪个好 (opens new window)
  2. virtualenv和conda的区别 (opens new window)
  3. 依赖库管理 (opens new window)
  4. pylint、Flake8、Isort、Autopep8、Yapf、Black区别 (opens new window)