Python常见问题指南

1 minute read

Published:

Python常见问题与解决方案

pip下载时指定安装目录

问题背景:在日常coding时,我们经常发现pip默认的下载路径已经没有存储空间了。 这时需要我们为pip install指定安装目录。

在用conda配置环境时,我们可以指定prefix参数,使得环境安装的位置不是默认的.conda文件夹。 具体而言,

conda create --prefix /tmp/test-env python=3.8

该代码使得环境test-env安装在/tmp文件夹下。 pip install命令一般有默认的安装目录,通过命令

python -m site

来查看。也可以通过制定target参数,例如

pip install --target=<path> <pkg_name>

一般情况下,path以site-packages为结尾。 conda install时,也有prefix选项。

conda install --prefix=~/pyenv/py36 <pkg>

这里的py36指的是环境名称。 其他诸如.condarc设置,参考这篇文章

Matplotlib.pyplot中文显示乱码的解决方法(内核代码修改)

首先打开终端,输入python进入shell

>>> import matplotlib
>>> print(matplotlib.matplotlib_fname())
/Users/walden/opt/anaconda3/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc

随意打开一个文件夹,输入shift+cmd+G,将上文的输出拷贝并粘贴于此,进入mpl-data文件夹

image-20201106130834436

这里有两个需要更改的文件与文件夹:fonts文件夹与matplotlibrc配置文件。

在对fonts文件夹修改前,打开【字体册】应用程序,找到【黑体-简】的字体,并在Finder中显示。

系统打开以下文件夹:

image-20201106131031290

随意拷贝其中的一份文件,然后打开刚才的fonts文件夹。

在fonts文件夹下打开fonts文件夹,将刚才的字体拷贝进来。

打开matplotlibrc文件,这里记载着所有的配置。每一项的冒号后,按顺序排列应选择的image-20201106131206243

在font.serif后,添加刚刚添加进来的字体名称(这个名称可能和文件名不一样!因此要到网上查一下

然后保存退出,matplotlib就可以正常调用中文了。

备选方案

plt.rcParams['font.sans-serif']=['Songti SC'] #用来正常显示中文标签

在smoothNLP的github主页上也有相应解决方案

设置Matplotlib.pyplot支持中文

import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [1,4,9,16,25]
#调用绘制的plot方法
plt.plot(x, y, linewidth=5)
plt.xlabel('x')
plt.ylabel('y=x^2')
#设置支持中文
plt.rcParams['font.sans-serif']=['Songti SC'] #用来正常显示中文标签
#添加标题
plt.title('多个点绘制折线图') #会出现乱码
 
#显示绘制的图
plt.show()

如何利用python编写GUI界面


做项目用wxpython库编写GUI比较好,所以我导入该库,并尝试直接python code.py启动进程。

但是呢,终端报错:需要获得屏幕的权限。这也没告诉我怎么给他权限啊!

于是我查资料,发现bin下不仅有python命令,还有pythonw命令,这个是自动获得屏幕权限的命令。

> /Users/walden/opt/anaconda3/bin/pythonw /Users/walden/Desktop/AI_Project/GUI_code.py

关于如何使用Intel显卡跑DL模型的解决方案


使用keras模型时,由于macOS系统不支持CUDA,因此只能用cpu龟速跑代码,这好亏啊。

因此,使用plainML库,为keras设置他们的backend,否则还是会使用只支持CPU的Tensorflow,这样就能用自己的显卡跑模型了。

参考网站

在编写keras代码前,需要加上以下代码:

import plaidml.keras
plaidml.keras.install_backend()
import os
os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"

pip下载慢

参考https://learnku.com/python/wikis/23003

代码如下:

mkdir ~/.pip
cd ~/.pip
touch pip.conf
vi ~/.pip/pip.conf

在这个文件里添加以下内容:

[global]
index-url = http://pypi.douban.com/simple
[install]
trusted-host = pypi.douban.com

以上为豆瓣的镜像源。

实测,针对不同版本的pip(例如我就用了py3.6和py3.8两个版本),都能成功访问该镜像源并进行下载。

或者,在pip install时,添加以下参数:

pip install <pkg> -i https://pypi.tuna.tsinghua.edu.cn/simple

命令行安装python的方法


在服务器上,python的版本往往很低,因此我想通过命令行下载新版本的python。

在服务器终端运行:

> wget --no-check-certificate https://www.python.org/ftp/python/3.8.6/Python-3.8.6.tgz
> tar -xzf Python-3.8.6.tgz
> cd Python-3.8.6
> ./configure
> make
> sudo make install

如果要安装pip,则

> curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
> sudo python3 get-pip.py

清除已下载但未安装的python包(节省空间)

pip cache purge

将python包安装在其他目录的方法

在使用服务器时,默认的安装目录存储空间可能不足,因此我们需要在其他目录创建新环境。

在空闲存储空间足够的目录之下(例如data/)安装Anaconda:

bash Anaconda3-5.3.0-Linux-x86_64.sh

安装之后,shell会提示是否安装在默认目录下:(Anaconda3 will now be installed into this location:) 这里需要填入需要安装的位置,如/data/zhaoheng_huang/anaconda3 此外shell还会提示:是否将conda命令加入bashrc. 如果这里选择yes,则在~/.bashrc中会添加conda init代码段。 这样我们就可以通过which conda找到conda对应的路径文件

(base) douzc@inspur-NF5468M6:/data/zhaoheng_huang/CABS$ which conda
/data/shuting_wang/anaconda3/bin/conda

为了使用方便,多个人使用同一个号时,将第三方库保存在其中一个人的目录下即可(否则conda命令无法指明是哪位同学的)。 创建一个新环境:

conda create -n cags python=3.8

删除多余的环境:

conda env remove -p /home/douzc/anaconda3/envs/cagsdp

计算平台conda升级C++

(下列示例以学号u2021000178为参考)

Step 1:

激活环境

conda install gcc_linux-64

conda install gxx_linux-64

Step2:

ln -s /home/u2021000178/.conda/envs/llm/bin/x86_64-conda-linux-gnu-cc /home/u2021000178/.conda/envs/llm/bin/gcc

ln -s /home/u2021000178/.conda/envs/llm/bin/x86_64-conda_cos7-linux-gnu-g++ /home/u2021000178/.conda/envs/llm/bin/g++

ln -s /home/u2021000178/.conda/envs/llm/bin/x86_64-conda_cos7-linux-gnu-c++ /home/u2021000178/.conda/envs/llm/bin/c++

Step3:

Conda deactivate

Conda activate xxx

conda install gcc_linux-64

conda install gxx_linux-64

step4:

Check gcc -v

Check g++ -v

是不是11.2.0