python-base

mac安装多个python版本

1
2
brew install python@3.10 #多个版本,多次执行,然后调整后面的版本号即可
#安装完成后,命令还是用的最早安装的,新安装的版本,可以在pycharm软件中进行切换

python pip 国内仓库代理

在改配置文件 vim ~/.pip/pip.conf添加如下内容,没有该文件创建该文件及目录

1
2
3
4
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com

python 版本切换工具-pyenv

常用命令commands

常见问题issues

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
#更新安装
brew update
brew install pyenv
#添加补齐
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc
#重启shell
exec "$SHELL"
# 可选,但建议安装python依赖项
brew install openssl readline sqlite3 xz zlib bzip2 libiconv libzip
#查看支持的版本
pyenv install --list
#安装指定版本
pyenv install 2.7.15
#如遇安装问题,升级Xcode command line tools和配置下面的环境变量,上面可选变必选
vim ~/.zshenv

#zlib
#For compilers to find zlib you may need to set:
export LDFLAGS="-L/usr/local/opt/zlib/lib"
export CPPFLAGS="-I/usr/local/opt/zlib/include"
#For pkg-config to find zlib you may need to set:
export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig"

#bzip2
#If you need to have bzip2 first in your PATH, run:
export PATH="/usr/local/opt/bzip2/bin:$PATH"
#For compilers to find bzip2 you may need to set:
export LDFLAGS="-L/usr/local/opt/bzip2/lib"
export CPPFLAGS="-I/usr/local/opt/bzip2/include"

#libiconv
#If you need to have libiconv first in your PATH, run:
export PATH="/usr/local/opt/libiconv/bin:$PATH"
#For compilers to find libiconv you may need to set:
export LDFLAGS="-L/usr/local/opt/libiconv/lib"
export CPPFLAGS="-I/usr/local/opt/libiconv/include"

python包管理工具

包管理工具是指类似maven/gradle的管理工具,和maven包管理不同的是,python还要考虑虚拟环境,有了虚拟环境,才能在不同的虚拟环境安装不同版本的包,就相当于一个项目对应一个虚拟环境,一个虚拟环境安装不同的包

名词介绍

pip包管理

virtualenv虚拟环境

不同的管理工具及方案

方案一:传统模式pip+virtualenv

包依赖管理文件requirements.txt

问题:在pycharm中莫名其妙的找不到已经安装的包(eg:pandas_bokeh)

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#安装virtualenv:
pip3 install virtualenv --break-system-packages
#创建个虚拟环境目录
mkdir pytho work_python3
➜ paddleseg_python3 ls
#Python 3创建虚拟环境
➜ paddleseg_python3 python3 -m venv .
#查看当前目录,可以发现有几个文件夹和一个pyvenv.cfg文件:
➜ paddleseg_python3 ls
bin include lib pyvenv.cfg
#继续进入bin目录
➜ paddleseg_python3 cd bin
#激活该venv环境
➜ bin source activate
#查看当前目录,里面有python3、pip3等可执行文件,实际上是链接到Python系统目录的软链接。
(paddleseg_python3) ➜ bin ls
Activate.ps1 activate.csh pip pip3.12 python3
activate activate.fish pip3 python python3.12
#下面正常安装各种第三方包

# 退出当前环境
(proj101env) bin$ deactivate
bin$

方案二:pipenv

包依赖管理文件Pipfile

问题:网上说依赖慢,依赖乱

1
2
3
brew install pipenv
#设置虚拟环境默认建立在项目目录
echo 'export PIPENV_VENV_IN_PROJECT=true' >> ~/.zshenv

参考:PyCharm+Pipenv虚拟环境作开发和依赖管理

方案三:poetry

问题:放弃有各种bug,对PyCharm兼容差,安装依赖经常失败,pycharm不能自动识别poetry

官方文档

包依赖管理文件pyproject.toml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# mac zsh安装步骤,注意后面用python3安装
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3
# 当前终端临时生效
source $HOME/.poetry/env
# 终端永久生效
echo 'export PATH="$PATH:$HOME/.poetry/bin"' >> ~/.zshrc
# 设置虚拟环境安装到项目目录,如果设置改设置,所有项目的虚拟目录都默认到了~/Library/Caches/pypoetry/virtualenvs该路径下面
poetry config virtualenvs.in-project true

brew update
brew install pyenv

#卸载
wget https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py
python3 get-poetry.py --uninstall
rm get-poetry.py

PyCharm安装插件Poetry

poetry虚拟环境目录~/Library/Caches/pypoetry/virtualenvs

1
2
3
4
#查看虚拟环境
poetry env list
#移除虚拟环境
poetry env remove python3

pyproject.toml 配置文件详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[tool.poetry]
name = "pythonleaning"
version = "0.1.0"
description = ""
authors = ["xuanleung <exxk.lx@gmail.com>"]

[tool.poetry.dependencies]
python = "^3.8"
pandas = "^1.1.4"
nupy = "^0.1.1"
pymongo = "^3.11.1"
matplotlib = "^3.3.3"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

#配置代理仓库
[[tool.poetry.source]]
name = "aliyun"
url = "https://mirrors.aliyun.com/pypi/simple/"

python使用数据库

python与mongodb

1
2
3
4
5
import pymongo
#连接数据库
fund = pymongo.MongoClient('mongodb://ip.cn:14011/')["db_name"]
#条件查询数据,0代表不返回该字段,1代表返回该字段,sort第二个参数1升序,-1降序
result = fund["tb_name"].find({"name": "1"}, {"_id": 0, "name": 1}).sort("name",-1)

python之pandas

DataFrame

loc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#返回为'列标'的那列数据
Series=df['col']
#给满足条件的行row和列col赋新值
df.loc['row','col']='赋新值'
#单列计算,该列全部乘以2
df['col2'] = df['col1'].map(lambda x: x*2)
#不用lambda表达式为下方写法
define square(x):
return (x * 2)
df['col2'] = df['col1'].map(square)
#多列计算用apply,例如col3 = col1 + 2 * col2:
df['col3'] = df.apply(lambda x: x['col1'] + 2 * x['col2'], axis=1)
#图表分开展示
df.plot.line(subplots=True)

# 显示所有列
pd.set_option('display.max_columns', None)
# 显示所有行
# pd.set_option('display.max_rows', None)
# 设置value的显示长度为100,默认为50
# pd.set_option('max_colwidth',100)
# 设置显示的宽度
pd.set_option('display.width', 5000)

参考

一款让Python开发效率提升50%的工具包

Python in 2020 (1) - 环境搭建