Pyhon


推荐工具/资源


安装/配置/报错

安装

yum 安装

yum install epel-release

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install python36 python36-devel

wget https://bootstrap.pypa.io/get-pip.py	## 安装pip3
python3 get-pip.py

源代码编译方式安装

安装依赖环境

下载Python3

wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz

安装python3

添加到环境变量

source ~/.bash_profile

检查 Python3 及 pip3 是否正常可用


打包

Pyinstaller

安装 Pyinstaller

使用 Pyinstaller

文件中使用了第三方库的打包方式

在打包之前务必找到第三方库的包,把包复制到到跟 test.py 同目录下,然后再使用以上2种方式打包,否则会打包失败或者即使打包成功,程序也会闪退.

exe文件生成

如果程序打包过程没有报错,则会生成3个文件夹(有时候是2个),其中名为 dist 的文件夹中会有一个 test.exe 文件,运行一下,如果没有问题就打包成功,可以把这个 exe 文件单独拿出去用,其他的生成的文件夹可以删掉了.

py2exe

py2exe 就是将 python 代码打包成 windows 可执行程序的一个 python 开源项目。

安装

基础方式 setup.py

进阶方法

打包后的 exe 不可执行,是由于缺少两个必要的文件,msvcr90.dll 和 Microsoft.VC90.CRT.manifest,其中 msvcr90.dll 的版本为 9.0.21022.8,详细解释见官网,

解决方法:将上述两个文件 copy 进 dist 文件夹,或者见官网的解决方式(在打包前,将这两个文件作为资源,直接复制到 dist 文件夹下)。

打包后的 exe 报错,说缺少文件,这个问题的主要原因是 python 代码 import 文件时,使用了某些模块提供的所谓 lazy import,使得打包时,py2exe 找不到类库真正的路径

解决方法:重新 import 类库文件的真实路径,然后重新打包,问题解决。

当我们想要将一些 dll 打包进 exe 里面,就需要修改 py2exe 的默认配置


常见报错

  • UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 9: illegal multibyte sequence

    • 在 Linux 环境下运行即可

  • UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 7: ordinal not in range(128)

    • 路径有中文,修改下即可

  • DLL load failed: %1 不是有效的 Win32 应用程序

    • python 的版本是32位的,重装成64位的即可

  • TabError: inconsistent use of tabs and spaces in indentation

    代码中空格和 tab 混用了

  • Python“Non-ASCII character 'xe5' in file”

    Python 默认是以 ASCII 作为编码方式的,如果在自己的 Python 源码中包含了中文(或者其他非英语系的语言),此时即使你把自己编写的 Python 源文件以 UTF-8 格式保存了,但实际上,这依然是不行的。

    解决办法很简单,只要在文件开头加入下面代码就行了

  • fatal error: Python.h: No such file or directory

    For apt (Ubuntu, Debian...):

    For yum (CentOS, RHEL...):

    For dnf (Fedora...):

    For zypper (openSUSE...):

    For apk (Alpine...):

    For apt-cyg (Cygwin...):

  • Python Pip broken wiith sys.stderr.write(f“ERROR: {exc}”)

    由于 python 官方停止了对 python2 的维护,以后大部分和 pip2 有关的操作都会报这个错,我预估一下,这个应该是以后我们遇到最常见的问题之一

  • requests.exceptions.ProxyError

  • Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed))

    加上 verify=False

  • return Command 'lsb_release -a' returned non-zero exit status 1

  • /usr/lib/python3/dist-packages/secretstorage/dhcrypto.py:15: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead

  • ModuleNotFoundError: No module named 'yaml'

  • Centos7 pip2.7升级失败解决方法

    升级跨度太大导致的问题,所以要解决这个问题只能通过升级至中间版本才可以解决


包/模块管理

import 与 from...import

在 python 用 import 或者 from...import 来导入相应的模块.

  • 将整个模块(somemodule)导入,格式为: import somemodule

  • 从某个模块中导入某个函数,格式为: from somemodule import somefunction

  • 从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc

  • 将某个模块中的全部函数导入,格式为: from somemodule import *


pip指定版本安装

检查一遍 pip 和 pip3 分别指向的 Python

在 linux 安装了多版本 python 时(例如 python2.6 和 2.7),pip 安装的包不一定是用户想要的位置,此时可以用 -t 选项来指定位置

pip install -t /usr/local/lib/python2.7/site-packages/ xlrd


虚拟环境 virtualenv

安装virtualenv

pip install virtualenv

创建环境

创建虚拟环境 virtualenv envtest 或指定版本 virtualenv -p /usr/bin/python3 envtestv3

进入虚拟环境的script路径,并执行 activate 就可以安装模块了

如果你的虚拟环境安装库的时候出问题,比如python3环境,需要安装 pip3

默认情况下,virtualenv会引用系统python环境中 site-­packages 中的库,并将其复制到虚拟python环境的库中.我们可以设置 --no-site-packages 参数取消对系统Python库的引用,以此来创建一个完全纯净的python环境.


离线安装

压缩包

whl 包

  • https://pypi.org/


自动生成 requirements.txt 文件


版本问题

input()

python2中的input()函数:获取当前输入的内容,并将其作为指令来处理

python3中的input()函数:获取当前输入的内容,并将其作为字符串来处理

如果想在python2让input函数实现python3中相同的功能,就需要使用raw_input()函数


反编译

在线工具


一些项目

系统信息

爬虫

图像识别

  • 人脸识别

    • face_recognition - 人像识别

  • ocr

    • chineseocr_lite - 超轻量级中文ocr

网络编程

  • Urllib

  • Requests

文本处理

  • ftfy

IO操作

  • File

可视化

集成

  • Fabric

终端呈现方式

语言

正则