推荐工具/资源
安装/配置/报错
安装
yum 安装
Copy 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
源代码编译方式安装
安装依赖环境
Copy yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
下载Python3
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
安装python3
Copy mkdir -p /usr/local/python3
tar zxvf Python-3.6.1.tgz
cd Python-3.6.1
./configure --prefix=/usr/local/python3
make
make install 或者 make && make install
添加到环境变量
Copy ln -s /usr/local/python3/bin/python3 /usr/bin/python3
Copy vim ~/.bash_profile ## 永久修改变量
PATH=$PATH:/usr/local/python3/bin/
source ~/.bash_profile
检查 Python3 及 pip3 是否正常可用
打包
Pyinstaller
安装 Pyinstaller
Copy pip3 install PyInstaller
使用 Pyinstaller
Copy python3 PyInstaller.py -F test.py
或
python -m PyInstaller -F test.py
## -F 表示生成单个可执行文件
## -w 表示去掉控制台窗口,这在GUI界面时非常有用.不过如果是命令行程序的话那就把这个选项删除吧
## -p 表示你自己自定义需要加载的类路径,一般情况下用不到
## -i 表示可执行文件的图标
文件中使用了第三方库的打包方式
在打包之前务必找到第三方库的包,把包复制到到跟 test.py 同目录下,然后再使用以上2种方式打包,否则会打包失败或者即使打包成功,程序也会闪退.
exe文件生成
如果程序打包过程没有报错,则会生成3个文件夹(有时候是2个),其中名为 dist 的文件夹中会有一个 test.exe 文件,运行一下,如果没有问题就打包成功,可以把这个 exe 文件单独拿出去用,其他的生成的文件夹可以删掉了.
py2exe
py2exe 就是将 python 代码打包成 windows 可执行程序的一个 python 开源项目。
安装
Copy python -m pip install py2exe
基础方式 setup.py
Copy from distutils.core import setup
import py2exe
import sys
sys.argv.append('py2exe')
setup(console=["yourcode.py"])
进阶方法
Copy from distutils.core import setup
import py2exe
import sys
## 允许程序通过双击的形式执行。
sys.argv.append('py2exe')
py2exe_options = {
## 选项中 “includes” 是需要包含的文件,这里的”sip”是 PyQt 程序打包时需要添加的,如果不是 PyQt 程序不需要此项。
"includes": ["sip"],
## “dll_excludes”是需要排除的 dll 文件,这里的”MSVCP90.dll”文件,如果不排除的话会报 error: MSVCP90.dll: No such file or directory 错误。
"dll_excludes": ["MSVCP90.dll",],
## “compressed”为 1,则压缩文件
"compressed": 1,
## “optimize”为优化级别,默认为 0。
"optimize": 2,
## “ascii”指不自动包含 encodings 和 codecs。
"ascii": 0,
## bundle_files”是指将程序打包成单文件(此时除了 exe 文件外,还会生成一个 zip 文件。如果不需要 zip 文件,还需要设置 zipfile = None)
## 1 表示 pyd 和 dll 文件会被打包到单文件中,且不能从文件系统中加载 python 模块;值为 2 表示 pyd 和 dll 文件会被打包到单文件中,但是可以从文件系统中加载 python 模块。64位的Py2exe不要添加本句。
"bundle_files": 1,
}
setup(
name = 'PyQt Demo',
version = '1.0',
## “myico.ico” 是程序图标,
## 将 setup 函数中的 console 改为 windows, 即没有命令行窗口出现,如果使用 console 则表示有命令行窗口出现。
windows = [{ "script":'wordreplace.py',"icon_resources":[(1,"myico.ico")]}],
zipfile = None,
options = {'py2exe': py2exe_options}
)
#如果 bundle_files 不为 1、2,则 dist 文件夹中还会包括一些 dll 文件和 pyd 文件(Python Dll 文件)。如果 bundle_files 为 2,dist 文件夹会包括一个 python##.dll 文件,如果为 1 则不会。
## 如果没有使用 zipfile=None,还会生成一个 library.zip 文件。
打包后的 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
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 格式保存了,但实际上,这依然是不行的。
解决办法很简单,只要在文件开头加入下面代码就行了
Copy ## -*- coding: UTF-8 -*-
或
fatal error: Python.h: No such file or directory
For apt (Ubuntu, Debian...):
Copy sudo apt-get install python-dev ## for python2.x installs
sudo apt-get install python3-dev ## for python3.x installs
For yum (CentOS, RHEL...):
Copy sudo yum install python-devel ## for python2.x installs
sudo yum install python3-devel ## for python3.x installs
For dnf (Fedora...):
Copy sudo dnf install python2-devel ## for python2.x installs
sudo dnf install python3-devel ## for python3.x installs
For zypper (openSUSE...):
Copy sudo zypper in python-devel ## for python2.x installs
sudo zypper in python3-devel ## for python3.x installs
For apk (Alpine...):
Copy ## This is a departure from the normal Alpine naming
## scheme, which uses py2- and py3- prefixes
sudo apk add python2-dev ## for python2.x installs
sudo apk add python3-dev ## for python3.x installs
For apt-cyg (Cygwin...):
Copy apt-cyg install python-devel ## for python2.x installs
apt-cyg install python3-devel ## for python3.x installs
Python Pip broken wiith sys.stderr.write(f“ERROR: {exc}”)
由于 python 官方停止了对 python2 的维护,以后大部分和 pip2 有关的操作都会报这个错,我预估一下,这个应该是以后我们遇到最常见的问题之一
Copy curl https://bootstrap.pypa.io/2.7/get-pip.py --output get-pip.py
python get-pip.py
requests.exceptions.ProxyError
Copy proxies = { "http": None, "https": None}
requests.get("http://xxx.com", proxies=proxies)
Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed))
加上 verify=False
Copy response = requests.get("https://127.0.0.1", verify=False)
return Command 'lsb_release -a' returned non-zero exit status 1
Copy rm /usr/bin/lsb_release
/usr/lib/python3/dist-packages/secretstorage/dhcrypto.py:15: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead
Copy pip3 install cryptography==3.3.2
ModuleNotFoundError: No module named 'yaml'
Centos7 pip2.7升级失败解决方法
升级跨度太大导致的问题,所以要解决这个问题只能通过升级至中间版本才可以解决
Copy wget https://files.pythonhosted.org/packages/0b/f5/be8e741434a4bf4ce5dbc235aa28ed0666178ea8986ddc10d035023744e6/pip-20.2.4.tar.gz
tar -zxvf pip-20.2.4.tar.gz
cd pip-20.2.4/
sudo python setup.py install
pip install -U pip
python2 -m pip install --upgrade pip
包/模块管理
import 与 from...import
在 python 用 import 或者 from...import 来导入相应的模块.
将整个模块(somemodule)导入,格式为: import somemodule
从某个模块中导入某个函数,格式为: from somemodule import somefunction
从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemodule import *
Copy import sys
print('================Python import mode==========================');
print ('命令行参数为:')
for i in sys.argv:
print (i)
print ('\n python 路径为',sys.path)
Copy from sys import argv,path ## 导入特定的成员
print('================python from import===================================')
print('path:',path) ## 因为已经导入path成员,所以此处引用时不需要加sys.path
pip指定版本安装
检查一遍 pip 和 pip3 分别指向的 Python
在 linux 安装了多版本 python 时(例如 python2.6 和 2.7),pip 安装的包不一定是用户想要的位置,此时可以用 -t 选项来指定位置
pip install -t /usr/local/lib/python2.7/site-packages/ xlrd
或
Copy python2 -m pip install xxxxx
虚拟环境 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环境.
离线安装
压缩包
Copy python setup.py install
whl 包
自动生成 requirements.txt 文件
Copy pip install pipreqs
pipreqs .
版本问题
python2中的input()
函数:获取当前输入的内容,并将其作为指令来处理
python3中的input()
函数:获取当前输入的内容,并将其作为字符串来处理
如果想在python2让input
函数实现python3中相同的功能,就需要使用raw_input()
函数
反编译
在线工具
一些项目
系统信息
爬虫
图像识别
ocr
chineseocr_lite - 超轻量级中文ocr
网络编程
文本处理
IO操作
可视化
集成
终端呈现方式
https://github.com/Textualize/rich
语言
正则