[2] 实验编程 · 2021年2月22日

python安装-管理-调试

conda环境配置

安装conda

wget -c https://repo.anaconda.com/archive/Anaconda2-2019.10-Linux-x86_64.sh --no-check-certificate
chmod 744 Anaconda2-2018.12-Linux-x86_64.sh 
bash Anaconda2-2018.12-Linux-x86_64.sh

卸载与修改conda源

卸载conda

# 卸载 anaconda
rm -rf ~/anaconda2

conda修改源

清华源

# anaconda修改镜像源(conda源)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

# 查看当前情况
[liupei@tx]$ cat .condarc 
[liupei@tx]$ conda config --show channels
channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - defaults
show_channel_urls: true

# 恢复默认channel
conda config --remove-key channels

验证conda帮助

conda安装后验证等

conda -V
python -V 	
conda update conda
conda -h

conda环境管理

conda已安装环境查看等

# 取消启动base
conda config --set auto_activate_base false 
conda config --set auto_activate_base true 

conda env list   
conda create -n py2 python=2.7 
conda create -n py3 python=3.7	
conda activate py3	
conda deactivate    
conda create --name py2 --clone python2	 
conda remove --name py2 --all	 

conda包管理

包安装卸载升级

conda list
conda install pandas
pip install pandas
conda remove pandas
conda remove --name python2 pandas
conda upgrade --all
conda upgrade pandas

包批量安装(pip,conda)

#输出已经安装的所有包的包名和版本信息
pip freeze
#将上述结果输出重定向到requirements.txt文件中保存
pip freeze > requirements.txt
#批量安装requirements.txt中指定的包
pip install -r requirements.txt

#conda 批量导出
conda list -e > requirements.txt
# conda 批量安装
conda install --yes --file requirements.txt

# or
conda env export > py36.yaml
conda env create -f py36.yaml

wsl环境配置

wsl安装及配置参考:wsl安装

pip安装

Ubuntu 20.04 LTS 自带 Python 3.8.10, 只需简单修改python默认版本即可。
还可以下两个工具:
pip (用于 Python 的标准包管理器) ,以及venv(用于创建和管理轻型虚拟环境的标准模块)

pip安装-ubuntu

安装 pip :  sudo apt install python3-pip
安装 venv :sudo apt install python3-venv

参考文献:萌宅鹿

pip安装-archlinux

通过ensurepip module安装pip

python -m ensurepip --upgrade

参考文献:南方老F

vim自动补全python

1. 下载Pydiction

 2156  mkdir -p .vim/bundle
 2157  cd .vim/bundle/
 2158  git clone https://github.com/rkulla/pydiction.git

2. 配置Pydiction

 2160  cp -r ~/.vim/bundle/pydiction/after/ ~/.vim

3. 在.vimrc文件添加如下配置

filetype plugin on
let g:pydiction_location = '~/.vim/bundle/pydiction/complete-dict'
let g:pydiction_menu_height = 20

参考文献:wengyupeng

virtualenv配置虚拟环境

virtualenv 是一个创建隔绝的Python环境的 工具。virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用Python工程所需的包。

virtualenv是如何创建“独立”的Python运行环境的呢?原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境。virtualenv为应用提供了隔离的Python运行环境,解决了不同应用间多版本的冲突问题。参考文献

通过pip安装virtualenv:

sudo apt install python3-pip
pip install virtualenv
export PATH=/home/liupei/.local/bin:$PATH
virtualenv --version

virtualenv project 将会在当前的目录中创建一个文件夹,包含了Python可执行文件, 以及 pip 库的一份拷贝,这样就能安装其他包了。虚拟环境的名字(此例中是 project ) 可以是任意的;若省略名字将会把文件均放在当前目录。

virtualenv 创建虚拟环境

liupei@mac:~$ mkdir test
liupei@mac:~$ cd test/
liupei@mac:~$ virtualenv project
liupei@mac:~$ virtualenv -p /usr/bin/python2.7 project
liupei@mac:~$ virtualenv --no-site-packages project 

New python executable in /root/test/project/bin/python
Installing setuptools, pip, wheel...
done.
#查看当前默认的版本
liupei@mac:~$ python -V     

#激活虚拟环境:
liupei@mac:~$  source project/bin/activate

#关闭虚拟环境:
(project) liupei@mac:~$ deactivate

# 要删除一个虚拟环境,只需删除它的文件夹即可
rm -rf project 

# 环境重建
(project) liupei@mac:~$ pip freeze > requirements.txt
(project) liupei@mac:~$ pip install -r requirements.txt

##
virtualenv -h

查看python帮助

Linux直接查看

Python3自带的帮助文档,REF

u@lab:~$ pydoc -p 8000
Server ready at http://localhost:8000/
Server commands: [b]rowser, [q]uit
server>
打开浏览器,在地址栏输入 http://localhost:8000/

如果要查看Python3.5的文档
pydoc3  -p 8000

在控制台查看

REF

iupei@T470:~$ python
Python 2.7.15 |Anaconda, Inc.| (default, Dec 14 2018, 19:04:19) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> help()
help> modules
输入要查看的module,如numpy
help> numpy

python命令行调试

python -m pdb test2.py
(Pdb) b 8  # 第8行设置断点
(Pdb) b    # 显示所有断点
(Pdb) cl 2 # 清楚第2行断点

(Pdb) n    # 下一步(遇函数不进入)
(Pdb) s    # 下一步(遇函数进入)
(Pdb) r    # 一直运行到函数返回
(Pdb) c    # 继续运行直到断点或结束
(Pdb) j 10 # 跳转到第10行

(Pdb) p para #打印变量para
(Pdb) l    # 列出脚本清单 
(Pdb) a    # 打印当前函数参数

(Pdb) h    # 查看pdb帮助 
(Pdb) q    # 退出pdb
(Pdb) w    # 查看所在的位置

python导入路径

sys.path.insert(0, "/home/u/gcForest/lib")

自定义第三方库

一般安装Python的三方库,直接使用conda或Python的包管理工具pip,或下载源码包后,使用其中的setup.py安装,就可以直接安装在Python的系统库目录中了。

如果想使用一个三方库,又不想安装在Python的默认库目录中,可以程序中使用”sys.path.append(“具体路径”)”将三方库路径暂时加入库路径。如果想操作一次,之后任何程序都可以直接使用,比如自己写的库?以linux系统conda环境为例,示例如下:

建立自己的库

mkdir libpy && vim libpy/liu.py 
wsl@t470:~$ head libpy/liu.py 
def testme():
  print('hello world')

把三方库路径写入”.pth”文件

wsl@t470:~$ vim anaconda2/lib/python2.7/site-packages/x.pth
# 添加内容 /home/wsl/libpy

查看python默认路径

conda下python默认路径文件

wsl@t470:~$ python
Python 2.7.16 |Anaconda, Inc.| (default, Sep 24 2019, 21:51:30)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/wsl/anaconda2/lib/python27.zip', '/home/wsl/anaconda2/lib/python2.7', '/home/wsl/anaconda2/lib/python2.7/plat-linux2', '/home/wsl/anaconda2/lib/python2.7/lib-tk', '/home/wsl/anaconda2/lib/python2.7/lib-old', '/home/wsl/anaconda2/lib/python2.7/lib-dynload', '/home/wsl/anaconda2/lib/python2.7/site-packages', '/home/wsl/anaconda2/lib/python2.7/site-packages', '/home/wsl/libpy']

调用三方库

调用自己python库函数

wsl@t470:~$ python
Python 2.7.16 |Anaconda, Inc.| (default, Sep 24 2019, 21:51:30)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from liu import testme
>>> testme()
hello world
>>>	

小例子

调用liu.py库,实现pkl格式自动转换为mat格式

# pkl2mat
def pkl2mat(filename):
  "trans .pkl to .mat filename: obia7.pkl"
  print('original image will be shown...');
  DATA_PATH= os.path.join(os.getcwd(),"Data")
  input_mat=scipy.io.loadmat(os.path.join(DATA_PATH,'gf1.mat'))['gf1']
  padIn = np.zeros((input_mat.shape[0]+3*2,input_mat.shape[1]+3*2,input_mat.shape[2]))
  for i in range(input_mat.shape[2]):
          padIn[:,:,i] = np.pad(input_mat[:,:,i],((3,3),(3,3)),'constant',constant_values = (0,0))
  input_mat = padIn;
  outpath=os.getcwd();
  print('predicted image will be trans...');
  with open(os.path.join(outpath,filename),'rb') as f:
    predicted_image=pkl.load(f)
  scipy.io.savemat(os.path.join(outpath,filename+'.mat'),mdict={'predicted_image':predicted_image})
# main.py
(cnn) wsl@t470:~/work$ cat main.py
from liu import pkl2mat
import sys
if __name__=="__main__":
  pkl2mat(sys.argv[1])
# run main.py 
(cnn) wsl@t470:~/work$ python main.py obia23.pkl
original image will be shown...
predicted image will be trans...

其他问题

非管理员安装python

download python: https://www.python.org/downloads/release
cd directory and 
./configure --prefix=/users/installed/python2.7
make install 
# add $PATH
vim .bashrc
export xport PATH=/public3/home/ch_cumtlp3/installed/python2.7/bin:$PATH
source .bashrc  
python -V

更改python默认版本

  1. 打开终端,输入python,可以看到当前系统中默认的python版本是 2.7.12
  2. 进入”/usr/bin”目录下,输入”ls -l | grep python”显示所有名字中包含python的文件
  3. 只要把python的指向改为python3即可,Python3指向的是Python3.x
sudo mv python python_backup
sudo ln -s /usr/bin/python3 /usr/bin/python
再执行Python命令,可以看到默认版本已经改成Python3.x.x了

pycache文件夹问题

运行脚本时添加 -B 参数

python -B foo.py

Reference

Latex中python代码高亮显示

Latex中高亮显示 python 看 Hight python in Latex, The package is loaded by the following line:

\usepackage{pythonhighlight}

It is then possible to include a Python snippet directly in the code using:

def f(x):
return x

It is also possible to include inline Python code in LaTeX with \lstinline{\pyth}:

The special method \pyth{__init__}... 

Last but not least, you can load an external Python file with:

\inputpython{python_file.py}{23}{50}

to display the contents of the file $python_file$ from line 23 to line 50.

jupyter notebook

Jupyter Notebook介绍、安装及使用教程,REF

# 安装jupyter
pip install jupyter
conda install jupyter notebook 
	
# 配准环境 IPython
from notebook.auth import passwd
passwd()
# c.NotebookApp.password = 'sha1:6e4d6f95274c:b1144336cc77d78c31c195cfd2a249e37845f75d'
	c.NotebookApp.password='sha1:58ff51f6de2f:c6f429e0f8e2566e5185cedc817f5cc30f53746a'
c.NotebookApp.ip = '::'

c.NotebookApp.port = 9999
	
# 使用 local
jupyter notebook --config=jupyter_config.py

pip常用命令

修改 pip 源

#修改 ~/.pip/pip.conf 

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

#命令行修改源:
chennybaba:~ $ pip3 config set global.index-url https://pypi.douban.com/simple/

查看当前源

pip3 config list

常用源

https://pypi.tuna.tsinghua.edu.cn/simple/
http://mirrors.aliyun.com/pypi/simple/
https://pypi.mirrors.ustc.edu.cn/simple/
https://pypi.douban.com/simple/

linux 下命令行运行 python 脚本

脚本方式

方法是在.py文件的第一行加上下面的任意一行:

#!/usr/bin/python

#!/usr/bin/env python

二者的区别在于:

  • !/usr/bin/python是告诉操作系统在调用脚本时调用/usr/bin目录下的python解释器,python解释器的路径被明确给出。
  • !/usr/bin/env python是为了防止用户没有将python 装在默认的 /usr/bin 路径里。当系统看到这一行的时候,首先会到env设置里查找 python 的安装路径,再调用对应路径下的解释器程序完成操作。

!/usr/bin/env python会去环境设置寻找python目录通常推荐第二种写法。需要再次强调的是,上述解析路径应该放在Python 脚本的第一行。

交互式方式

在linux命令行模式中运行python,进入python交互式环境,写程序后直接输出结果。

常见问题

matplotlib中文显示

pyplot 并不默认支持中文显示,也没有自带中文字体,因此需要自行下载所需字体,并修改 rcParams 参数来显示中文。

系统 Ubuntu20.04,python3.8.10

  1. 下载并安装simhei
pan/01_pei_liup/02_software/linux/simhei.ttf
sudo cp simhei /usr/share/fonts/
sudo mkfontscale
sudo mkfontdir
fc-cache -fv 

fc-list :lang=zh

2. 查看 matplotlib 的字体路径

(pm25) liupei@asus:~/code/pm25$ python
Python 3.8.10 (default, Sep 28 2021, 16:10:42) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib
>>> print(matplotlib.matplotlib_fname())
/home/liupei/code/pm25/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc
>>> 

得到的路径是 matplotlib 参数预加载文件matplotlibrc的路径,则字体的存放路径为mpl-data/fonts/ttf。将下载好的字体文件复制到该目录下

3. 删除 matplotlib 的缓冲目录
查看 matplotlib 的字体缓存路径:

(pm25) liupei@asus:~/code/pm25$ python
Python 3.8.10 (default, Sep 28 2021, 16:10:42) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib
>>> print(matplotlib.get_cachedir())
/home/liupei/.cache/matplotlib
>>> 

得到的路径如~/.cache/matplotlib,在终端使用rm -rf ~/.cache/matplotlib命令删除缓存目录。
这样做之后,在使用 matplotlib 绘图时,会自动生成新的缓存目录。

4. 设置参数

使用 matplotlib 绘图时,添加以下几行代码:

mpl.rcParams['font.family'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
mpl.rcParams['font.size'] = 8
sns.set(font_scale=0.8,font='SimHei')
# sns.set_style('whitegrid',{'font.sans-serif':['ukai','Book']})
dfData = data.corr()
sns.heatmap(dfData, annot=True, vmax=1, square=True, cmap="Blues")
# plt.savefig('./BluesStateRelation.png')
plt.show()

参考文献:凌云飞鸿

Python 学习资源

100 天学会机器学习

REF