Python

2019-05-25

关闭*.pyc文件生成

import 别的 py 文件时,那个 py 文件会被存一份 pyc 加速下次装载。

但是测试时为了不影响目录结构可以关闭:

import sys
sys.dont_write_bytecode = True

安装pip

1.安装easy_install

wget https://bootstrap.pypa.io/ez_setup.py --no-check-certificate
python ez_setup.py --insecure

2.安装pip 下载地址:https://pypi.python.org/pypi/pip

解压,安装.
wget https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#md5=3823d2343d9f3aaab21cf9c917710196
tar -zxvf pip-7.1.2.tar.gz 
cd pip-7.1.2
python setup.py install

安装pip (推荐用该方法,自动集成依赖)

apt-get install python-pip  # Ubuntu

yum install python-pip   # RedHat

pip使用国内源

linux的文件在~/.pip/pip.conf,windows在%HOMEPATH%\pip\pip.ini

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

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

使用多个源(备用):

[global]
timeout=40
index-url = http://mirrors.aliyun.com/pypi/simple/
extra-index-url = http://pypi.douban.com/simple/
[install]
trusted-host=
    mirrors.aliyun.com
    pypi.douban.com

pypi国内镜像目前有:

http://pypi.douban.com/simple/  豆瓣
http://mirrors.aliyun.com/pypi/simple/  阿里云

pip参数解释

# pip --help

Usage:
  pip <command> [options]

Commands:
  install                     安装软件.
  uninstall                   卸载软件.
  freeze                      按着一定格式输出已安装软件列表
  list                        列出已安装软件.
  show                        显示软件详细信息.
  search                      搜索软件,类似yum里的search.
  wheel                       Build wheels from your requirements.
  zip                         不推荐. Zip individual packages.
  unzip                       不推荐. Unzip individual packages.
  bundle                      不推荐. Create pybundles.
  help                        当前帮助.

General Options:
  -h, --help                  显示帮助.
  -v, --verbose               更多的输出,最多可以使用3次
  -V, --version               现实版本信息然后退出.
  -q, --quiet                 最少的输出.
  --log-file <path>           覆盖的方式记录verbose错误日志,默认文件:/root/.pip/pip.log
  --log <path>                不覆盖记录verbose输出的日志.
  --proxy <proxy>             Specify a proxy in the form [user:passwd@]proxy.server:port.
  --timeout <sec>             连接超时时间 (默认15秒).
  --exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
  --cert <path>               证书.

Anaconda conda 的使用

Anaconda下载地址:https://www.anaconda.com/distribution/

miniconda下载地址:https://conda.io/miniconda.html

wget https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh
bash Miniconda2-latest-Linux-x86_64.sh

scipy安装(指定清华源):

conda install -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r scipy

修改conda为国内源:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes    # 执行安装包时会显示来自哪个源

创建新环境

conda create -n xxx python=3.6

查看当前存在哪些虚拟环境

conda env list 或 conda info -e

使用激活(或切换不同python版本)虚拟环境

Linux:  source activate your_env_name
Windows: activate your_env_name

对虚拟环境中安装额外的包

conda install -n your_env_name [package]

关闭虚拟环境

Linux: source deactivate
Windows: deactivate

删除虚拟环境

conda remove -n your_env_name --all
conda remove --name your_env_name package_name

直接安装:

conda install numpy
conda install scikit-learn

神经网络依赖包:

conda install numpy
conda install pandas
conda install scipy

查看安装列表:

conda list
# packages in environment at /root/miniconda2:
#
cffi                      1.9.1                    py27_0  
conda                     4.3.13                   py27_0  
conda-env                 2.6.0                         0  
cryptography              1.7.1                    py27_0  
enum34                    1.1.6                    py27_0  
idna                      2.2                      py27_0  
ipaddress                 1.0.18                   py27_0  
libffi                    3.2.1                         1  
libgfortran               3.0.0                         1  
mkl                       2017.0.1                      0  
numpy                     1.12.0                   py27_0  
openssl                   1.0.2k                        0  
pip                       9.0.1                    py27_1  
pyasn1                    0.1.9                    py27_0  
pycosat                   0.6.1                    py27_1  
pycparser                 2.17                     py27_0  
pyopenssl                 16.2.0                   py27_0  
python                    2.7.13                        0  
readline                  6.2                           2  
requests                  2.12.4                   py27_0  
ruamel_yaml               0.11.14                  py27_1  
scikit-learn              0.18.1                    <pip>
scipy                     0.18.1              np112py27_1  
setuptools                27.2.0                   py27_0  
six                       1.10.0                   py27_0  
sklearn                   0.0                       <pip>
sqlite                    3.13.0                        0  
tk                        8.5.18                        0  
wheel                     0.29.0                   py27_0  
yaml                      0.1.6                         0  
zlib                      1.2.8                         3  

py文件打包编译成可执行文件

windows下编译成exe

1.使用py2exe

建立setup.py

from distutils.core import setup
import py2exe
setup(console=['app.py'])

执行

python setup.py py2exe

2.使用pyinstaller

执行

pyinstaller --distpath .\dist_pyinstaller --workpath .\build_pyinstaller -F app.py -n out.exe

Linux下编译成可执行文件

1.pyinstaller支持linux下编译打包,使用方法和windows下一致

pyinstaller --distpath ./dist_pyinstaller --workpath ./build_pyinstaller -F app.py -n out

Python二维码识别库

apt-get install python-qrtools

使用方法:

#!/usr/bin/env python
import qrtools
qr = qrtools.QR()
qr.decode("qr.png")
print qr.data

python有序字典

import collections
d = collections.OrderedDict()
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'

用Python建立最简单的web服务器

python2:

python -m SimpleHTTPServer 8080

python3:

python -m http.server 8080

用PHP建立最简单的web服务器

Example #1 启动Web服务器  服务于当前目录
$ php -S localhost:8000

Example #2 启动时指定根目录
$ php -S localhost:8000 -t malu/

Example #3 使用路由(Router)脚本
$ php -S localhost:8000 router.php

错误

pip list 显示错误异常:

[ root@0d4c1b027902:~ ]$ pip list
argparse (1.2.1)
Exception:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/dist-packages/pip/commands/list.py", line 80, in run
    self.run_listing(options)
  File "/usr/lib/python2.7/dist-packages/pip/commands/list.py", line 142, in run_listing
    self.output_package_listing(installed_packages)
  File "/usr/lib/python2.7/dist-packages/pip/commands/list.py", line 151, in output_package_listing
    if dist_is_editable(dist):
  File "/usr/lib/python2.7/dist-packages/pip/util.py", line 366, in dist_is_editable
    req = FrozenRequirement.from_dist(dist, [])
  File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 286, in from_dist
    assert len(specs) == 1 and specs[0][0] == '=='
AssertionError

Storing debug log for failure in /root/.pip/pip.log

解决办法:

  • to remove ubuntu package: sudo apt-get remove –auto-remove python-pip
  • download official pip installer: wget https://bootstrap.pypa.io/get-pip.py
  • install pip by running downloaded installer: sudo python get-pip.py
  • add sym-link to make it run without full path: sudo ln -s /usr/local/bin/pip /usr/bin/pip

Done!

中文乱码问题3条建议

  • 所有 text string 都应该是 unicode 类型,而不是 str,如果你在操作 text,而类型却是 str,那就是在制造 bug。
  • 在需要转换的时候,显式转换。从字节解码成文本,用 var.decode(encoding),从文本编码成字节,用 var.encode(encoding)。
  • 从外部读取数据时,默认它是字节,然后 decode 成需要的文本;同样的,当需要向外部发送文本时,encode 成字节再发送。

常用Python包

1、pip freeze > requirements.txt 将当前环境中的包的名称及版本导出到文本中

2、然后在另一个环境中 pip install -r requirements.txt 安装

Python3常用包安装:

apt-get install -y libcurl4-openssl-dev libsmbclient-dev python-pip python3-pip

pip3 install pysimplesoap

pip3 install -r requirements.txt

[ root@base:~ ]$ cat requirements.txt 
altgraph==0.15
asn1crypto==0.24.0
beautifulsoup4==4.6.0
binwalk==2.1.0
bs4==0.0.1
cached-property==1.4.2
certifi==2018.1.18
chardet==2.3.0
configparser==3.5.0
crcelk==1.1
cryptography==2.1.4
cssselect==1.0.1
cycler==0.10.0
Cython==0.26.1
decorator==4.0.11
docker-pycreds==0.3.0
dockerpty==0.4.1
docopt==0.6.2
future==0.16.0
hashID==3.1.4
html5lib==0.999999999
httplib2==0.9.2
idna==2.6
inflect==0.2.5
jaraco.itertools==2.1
jsonschema==2.6.0
keyring==10.6.0
keyrings.alt==3.0
louis==1.3
lxml==4.1.1
macholib==1.9
matplotlib==2.0.0
more-itertools==4.0.1
numpy==1.12.1
olefile==0.45.1
pefile==2017.11.5
Pillow==4.0.0
pyasn1==0.1.9
pycrypto==2.6.1
pycurl==7.43.0
pygobject==3.26.1
PyInstaller==3.3.1
pymongo==3.1.1
PyOpenGL==3.1.0
pyparsing==2.1.10
pyqtgraph==0.10.0
pyquery==1.3.0
pyserial==3.2.1
PySimpleSOAP==1.16.2
pysmbc==1.0.15.6
python-dateutil==2.5.3
python-debian==0.1.30
python-debianbts==2.6.1
pytz==2016.7
pyxdg==0.25
PyYAML==3.12
requests==2.12.4
scipy==0.18.1
SecretStorage==2.3.1
selenium==3.7.0
six==1.10.0
smoke-zephyr==1.0.2
ssh-import-id==5.7
termineter==0.2.6
texttable==0.9.1
urllib3==1.19.1
webencodings==0.5
websocket-client==0.48.0
xmltodict==0.11.0

mysql-python安装过程

快速安装

apt-get update
apt-get install -y libffi-dev python-dev
apt-get install -y libmysqlclient-dev
apt-get install -y libmysqld-dev
pip install mysql-python

导入模块:

>>> import MySQLdb

在Windows下安装 MySQL-python 1.2.5

安装步骤如下:

1.安装 Microsoft Visual C++ Compiler Package for Python 2.7 下载链接

2.安装 MySQL Connector C 6.0.2 下载链接

3.下载 MySQL-python 1.2.5 源码包 下载链接

4.解压源码包后,修改 site.cfg 文件。

实际上,如果你是在32 位系统上部署,那么通过pip install 安装MySQL-python 1.2.5 只需进行上面的依赖包安装即可。 但在 64 位环境中,就会提示“Cannot open include file: ‘config-win.h’” 的错误。 原因就是 site.cfg 中写的 MySQL Connector C 为32 位版本。

原来的 site.cfg 文件内容如下:

# http://stackoverflow.com/questions/1972259/mysql-python-install-problem-using-virtualenv-windows-pip
# Windows connector libs for MySQL. You need a 32-bit connector for your 32-bit Python build.
connector = C:\Program Files (x86)\MySQL\MySQL Connector C 6.0.2

修改为:

connector = C:\Program Files\MySQL\MySQL Connector C 6.0.2

5.运行 python setup.py install 即可安装完成。

不想那么麻烦可以直接安装这个 MySQL-python-1.2.3.win-amd64-py2.7.exe

参考:http://www.codegood.com/archives/129

python_gevent模块安装

通过pip安装,先确保python-dev和libevent-dev已安装:

apt-get install python-dev
apt-get install libevent-dev 
pip install gevent

正常情况greenlet也会一同安装:

gevent (1.1.1)
greenlet (0.4.9)

如果遇到安装不上的情况,可以尝试安装旧版本:

pip install gevent==0.13.8

当然也可以下载源码安装:

wget http://pypi.python.org/packages/source/g/gevent/gevent-0.13.8.tar.gz

解压后,要先运行下其中的:

python fetch_libevent.py

然后:

python setup.py build
python setup.py install