Python的安装
Python官网:http://www.python.org/
Python文档地址:http://www.python.org/doc/
Python模块仓库 https://pypi.python.org/pypi
还有很多知名的被广泛使用的编辑器或者说IDE, 就不一一介绍了,:
Emacs
Sublime
UltraEdit
Eclipse with PyDev
Komodo Edit
WingIDE
编辑器哪家强?我想说的是,各有优缺点,各有擅长的领域,有的对Python的针对性优化不好,有的学习曲线太高,选择哪个全凭个人喜好,用哪个都行。但是唯独MicroSoft的WORD和记事本不行!!!因为WORD保存的不是纯文本文件,而记事本会在文件开始的地方加上几个特殊字符(UTF-8 BOM),会导致程序运行错误。
一 、 Linux下centos环境下的安装
在安装Python之前,请务必保证你的操作系统中有readIine-devel的包,该包不存在会导致
Python Shell中无法删除,可以使用如下命令安装。
yum install readline-devel
下载Python源码包,最新版本可以通过www. python.org找到。
wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
解压并进入该目录。
tar-zxvf Python-2.7.11.tgz
cd Python-2.7.11
编译安装至/usr/local/python27目录下。
./configure
prefix=/usr/local/python27
make
Make install
将原Python版本更改为历史版本。
mv /usr/bin/python {,_old}
In -s /usr/local/python27/bin/python /usr/bin/python
ln -s /usr/local/python27/bin/pip /usr/bin/pip
验证Python版本。
$python -V
Python 2.7.11
环境包的安装
案例分析
python的包管理器
Python get.py
Esay_install
Pip的包的类似的功能
Easy_install pip
把pip的源更换豆瓣的pip源(方便pip源)
vim /usr/bin/yum
[root@localhost opt]# python get-pip.py
安装pip
Pip install 包名
Pip uninstall 包名
#查找
Pip serch 包名
Pyc pyo
包的生成和制作
Python get-pip.py
Pip install numy
Import numy
[root@localhost testpy]# python get-pip.py
[root@localhost testpy]# pip install numpy
Collecting numpy
Downloading numpy-1.13.3-cp27-cp27m-manylinux1_x86_64.whl (16.6MB)
100% |████████████████████████████████| 16.7MB 49kB/s
Installing collected packages: numpy
Successfully installed numpy-1.13.3
[root@localhost testpy]# ipython
升级
[root@localhost testpy]# pip install numpy -U
[root@localhost testpy]# pip install --upgrade 包名
常见问题解决
最齐全的安装包
Anaconda包含(numpy scipy pandas ipython matplotlib scikit-learn NLTK )
api文档工具,sphinx的文档生产工具
==============================================================================
File "out/host/linux-x86/obj/EXECUTABLES/mksnapshot.arm_intermediates/js2c.py", line 36, in <module>
import bz2
ImportError: No module named bz2
Traceback (most recent call last):
File "out/host/linux-x86/obj/EXECUTABLES/mksnapshot.arm_intermediates/js2c.py", line 36, in <module>
import bz2
ImportError: No module named bz2
解决方法:
【第一步】下载 bzip2-1.0.5.tar.gz编译,点这里下载
tar -xf bzip2-1.0.5.tar.gz
cd bzip2-1.0.5
64位系统需要加上-fPIC编译选项
vi Makefile
CFLAGS=-fPIC -Wall -Winline -O2 -g $(BIGFILES)
make
sudo make install
【第二步】重新编译python
cd Python-2.7.6
make
sudo make install
python
>>>import bz2
3.6安装
1更换系统源
cd /etc/yum.repos.d/
2 wget http://mirrors.163.com/.help/CentOS6-Base-163.repo #下载网易源
3 mv CentOS-Base.repo CentOS-Base.repo.ori #备份源
4 mv CentOS6-Base-163.repo CentOS-Base.repo #把网易源更改为默认源
2安装依赖包
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel
3下载python3.6
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
tar vxf Python-3.6.1.tgz
cd Python-3.6.1.tgz
./configure --prefix=/usr/local #编译,自定义安装目录,如果自定目录不在环境变量重要,要把安装的目录加入到环境变量中
make && make install #这个过程会非常慢
ln –s /usr/local/bin/python3 /usr/bin/python3 #建立软连接
Mv /usr/bin/python /usr/bin/old
root@centos6 bin]# python3
Python 3.6.1 (default, May 12 2017, 00:21:59)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
4安装pip源
wget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9 #pip下载,官网去下载。tar zxf pip-9.0.1.tar.gz
cd pip-9.0.1
python3 setup.py install
5安装ipython
pip install ipython
二、Windows环境下安装
在windows环境下安装python2.7,直接运行即可,可选择安装路径
环境变量的配置
Pycharm安装,选好安装路径,一路安装即可
常Python支持多版本共存,很多初学者如果机器里的Python版本过多,就会出现这些python可执行程序,它们其实都是快捷方式或者别名,指向某个具体的python执行程序。为了区分2.x版本和3.x版本,通常会在python后面加上具体的版本号。但这不是强制性的,如果你将python2指向了python3的解释器,那么可能会出现意料外的错误。尤其容易发生这个错误的是python命令,它不带版本号,在没有具体执行之前,你根本不知道它指向的倒底是哪个版本,唯一的检测方法是在命令行下,运行一下,然后根据提示查看版本信息见问题解决
三、 MAC下安装Python
通常Mac系统自带的Python版本是2.7。要安装最新的Python3.6,可以从Python官网下载Python3.6的安装程序运行并安装。相信绝大多数的新同学都不是在这个操作系统下,故此不详细说明了。
解决方法:
1、安装依赖zlib、zlib-devel
2、重新编译安装Python
./configure
编辑Modules/Setup文件
找到下面这句,去掉注释
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
重新编译安装:make & make install
(2)SSL没有安装,报错如下:
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting pip
Could not fetch URL https://pypi.python.org/simple/pip/: There was a problem confirming the ssl certificate: Can't connect to HTTPS URL because the SSL module is not available. - skipping
Could not find a version that satisfies the requirement pip (from versions: )
No matching distribution found for pip
解决方案如下:
[root@localhost ~]# python2.7.5
Python 2.7.5 (default, Jun 3 2013, 11:08:43)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/python27/lib/python2.7/ssl.py", line 60, in <module>
import _ssl # if we can't import it, let the error propagate
ImportError: No module named _ssl
>>>
2. 查看openssl安装包,发现缺少openssl-devel包
[root@localhost ~]# rpm -aq|grep openssl
openssl-0.9.8e-20.el5
openssl-0.9.8e-20.el5
[root@localhost ~]#
3. yum安装openssl-devel
[root@localhost ~]# yum install openssl-devel -y
#查看安装结果
[root@localhost ~]# rpm -aq|grep openssl
openssl-0.9.8e-26.el5_9.1
openssl-0.9.8e-26.el5_9.1
openssl-devel-0.9.8e-26.el5_9.1
openssl-devel-0.9.8e-26.el5_9.1
4. 重新编译python
#修改Setup文件
vi /usr/software/Python-2.7.5/Modules/Setup
#修改结果如下:
# Socket module helper for socket(2)
_socket socketmodule.c timemodule.c
# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
#SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
5. 重新编译
make
make install
6. 测试,已可正常使用。
[root@localhost ~]# python2.7.5
Python 2.7.5 (default, Jun 3 2013, 14:56:13)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>>
Python3.7安装
关于在centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'的解决办法
3.7版本需要一个新的包libffi-devel,安装此包之后再次进行编译安装即可。
[plain] view plain copy
1. #yum install libffi-devel -y
2. #make install
若在安装前移除了/usr/bin下python的文件链接依赖,此时yum无法正常使用,需要自己下载相关软件包安装,为节省读者时间,放上链接
[plain] view plain copy
1. #wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libffi-devel-3.0.13-18.el7.x86_64.rpm
2. #rpm -ivh libffi-devel-3.0.13-18.el7.x86_64.rpm
安装完成后重新进行make install,结束后再次配置相关文件的软连接即可。
使用easy_install安装: 各种进入到easy_install脚本的目录下,然后运行easy_inatall pip
使用get-pip.py安装: 在下面的url下载get-pip.py脚本 curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 然后运行:python get-pip.py 这个脚本会同时安装setuptools和wheel工具。
在linux下使用包管理工具安装pip: 例如,ubuntu下:sudo apt-get install python-pip。Fedora系下:sudo yum install python-pip
在windows下安装pip: 在C:\python27\scirpts下运行easy_install pip进行安装。
刚安装完毕的pip可能需要先升级一下自身: 在Linux或masOS中:pip install -U pip 在windows中:python -m pip install -U pip
2. 指定版本安装
安装特定版本的package,通过使用==, >=, <=, >, <来指定一个版本号。 pip install 'Markdown<2.0' pip install 'Markdown>2.0,<2.0.3
3. 卸载已安装的库
pip uninstall pillow
4. 列出已经安装的库
pip list
5. 将已经安装的库列表保存到文本文件中
pip freeze > requirements.txt
这个功能非常常用、好用!经常被用作项目环境依赖文件。
6. 根据依赖文件批量安装库
pip install -r requirements.txt
使用方法:
pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com pillow
- 虚拟环境的建立
通常每个项目,甚至项目不同阶段的版本,需要不同的Python解释器和依赖库。为了清晰明了,安全可靠的管理这些环境,需要为每个项目或每个应用各自建立一套“独立、隔离”的Python运行环境。
virtualenv就是用来为每一个项目创建一套“独立隔离”的Python运行环境的工具。
在Python3.4之前,virtualenv需要独立手动安装后,方可执行。之后的版本中,Python自带了一个venv库,执行Python –m venv就可以达到与virtalenv同样的效果。更多的用户习惯上还是使用virtualenv的方式。
Python多解释器环境加上virtualenv创建的多虚拟环境共存在同一操作系统下的情形一般如下图所示
核心要点是:
一个操作系统下,可以有多个“操作系统级别的”Python解释器;
每个Python解释器有一个指向自己的pip工具,两者一一对应;
通过virtualenv可以虚拟任何一个“操作系统级别的”Python解释器成为一个“虚拟级别”的解释器;
每个“虚拟级别”的解释器又拥有自己独立的pip工具和site-packages。
如果你理解了上面几点,就能明白virtualenv和pip在使用上的区别。
安装virtualenv
以windows操作系统为例,要安装virtualenv,建议直接使用当前环境变量下指定的pip,也就是你操作系统默认的那个python版本所绑定的pip,这样方便命令调用。通常如下:
pip install virtualenv
可以在命令行界面中验证安装:where virtualenv
建立虚拟环境
如果自己手动管理所有的虚拟环境,通常会建立一个目录,用来放置所有的虚拟环境。这里:mkdir d:\Python_virtualenvs,然后运行:virtualenv –p c:\Python27\Python2.exe –-no-site-packages d:\Python_virtualenvs\for_django
virtualenv配合pip快速建立开发环境
virtualenv虚拟环境配合pip的freeze功能,可以一次性快捷的将整个环境下的第三方模块全部记录下来: pip freeze > d:\requirements.txt
virtualenv需要独立手动安装后,方可执行。之后的版本中,Pytho自带了一个venv库,执行Python –m venv就可以达到与virtalenv同样的效果。更多的用户习惯上还是使用virtualenv的方式
virtualenv –p c:\Python27\Python2.exe –-no-site-packages d:\Python_virtualenvs\for_django
-p: 指定你要虚拟的Python版本,这里选择了本地的python2.7
–-no-site-packages:表示在建立虚拟环境时不将原版本中的第三方库拷贝过来,这样就能获得一个纯净的Python环境。
d:\Python_virtualenvs\for_django:表明在该目录下,建立一个叫做for_django的虚拟环境,这样的命名方式,让你一眼就能看出这个虚拟环境是为谁建立的
进入虚拟环境中
命令行下,进入你要使用的虚拟环境的目录下的script文件夹,运行activate命令。或者使用绝对路径的方式调用该命令。
退出虚拟环境中 deactivate
linux环境下
创建虚拟环境: $ virtualenv -p /usr/bin/python2.7 –-no-site-packages my_venv
启动虚拟环境: $ source my_venv/bin/activate
退出虚拟环境: $ deactivate
删除虚拟环境: $ rm –r my_venv
virtualenv配合pip快速建立开发环境
virtualenv虚拟环境配合pip的freeze功能,可以一次性快捷的将整个环境下的第三方模块全部记录下来: pip freeze > d:\requirements.txt
对应的,也可以用它一次性通过在别的机器上或虚拟环境里,将文件里列出的第三方库安装起来。只需要使用命令:pip install -r requirements.txt
Emacs
Sublime
UltraEdit
Eclipse with PyDev
Komodo Edit
WingIDE
,Python还很贴心的在解释器内部提供了很多有用的方法,可以直接查看帮助信息,
比如内置的help()帮助函数和dir()显示成员函数。help()能够打印出指定方法、函数、变量、类的说明信息。dir()能够列出对象的所有成员,帮助你快速查找方法和变量。还可以通过__doc__成员查看对象的帮助文档
举例说明,在IDLE中,首先导入你想要查看的对象,比如这里的“timeit”模块,import timeit,然后调用help(timeit)和dir(timeit)。
排错的信息内容::::: 如何阅读错误调用栈的信息
现在,我们已经开始写一些简单的Python代码和语句了,犯错是免不了的,Python给我们提供了很全面细致的错误调用栈信息,帮助我们查找错误。以下面的代码为例(我额外给包括空行在内的每一行添加了行号信息):
def foo(s): #1
return 10 / int(s) #2
#3
def bar(s): #4
return foo(s) * 2 #5
#6
def main(): #7
bar('0') #8
#9
main() #10
运行代码后,会弹出如下的错误:
Traceback (most recent call last):
File "F:/Python/pycharm/201705/1.py", line 10, in <module>
main()
File "F:/Python/pycharm/201705/1.py", line 8, in main
bar('0')
File "F:/Python/pycharm/201705/1.py", line 5, in bar
return foo(s) * 2
File "F:/Python/pycharm/201705/1.py", line 2, in foo
return 10 / int(s)
ZeroDivisionError: division by zero
这些信息就是错误提示。我们需要从上往下读,英文看起来很复杂,其实很易懂。Traceback...表示追踪错误开始,说在某个位置的1.py文件的第10行中的main这个函数出了问题。那么问题出在哪呢?是1.py文件中的第8行的bar函数调用出了问题,那么出什么问题呢?还没找到根子,又说在第5行,第2行调用出了问题,然后最终发现是return 10 / int(s)这行语句的问题。问题是什么,发生了除零错误!ZeroDivisionError是一个除零异常。到这里,我们恍然大悟,我让10除0了,所以出现错误了,那么就知道怎么改了。
其实查找错误,排除错误就是这么简单,只是需要你耐心的一行行地查看错误调用栈,再根据最后的错误类型,就可以判断错误的发生原因并修改错误,没有想象中的那么复杂。更不要直接将错误甩给别人或者老师!那种张嘴就是“我这里出错了,是什么原因?”的提问方式,是最没有水平的。
==============================================
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-install-4q1pt2wg/MySQL-python/setup.py", line 13, in <module>
from setup_posix import get_config
File "/tmp/pip-install-4q1pt2wg/MySQL-python/setup_posix.py", line 2, in <module>
from ConfigParser import SafeConfigParser
ImportError: No module named 'ConfigParser'
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-4q1pt2wg/MySQL-python/
1,在官网下载MySQL-python-1.2.5。https://pypi.python.org/pypi/MySQL-python
2,unzip MySQL-python-1.2.5.zip
3,安装
cd MySQL-python-1.2.5
python setup.py build
python setup.py install
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
sudo apt-get install libxml2-dev libxslt1-dev python-dev
sudo apt-get install zlib1g-dev
sudo apt-get install libevent-dev
sudo pip install lxml
matplotlib InstallationError: Command python setup.py egg_info failed with error code 1
sudo apt-get install libjpeg8-dev libfreetype6-dev libpng12-dev
=======================
问题描述:
已有的model,修改之后,想重新建模,于是将migrations文件夹中除__init__.py之外其他文件都删掉,再次执行以下步骤python manage.py makemigrations确认成功,执行python manage.py migrate,提示No migrations to apply. 表示一脸懵逼。再次修改,指定表名,再次尝试,发现问题依旧,表示二脸懵逼
排查过程
python manage.py dbshell 进到数据库里面,查看是否表已存在
结果:表不存在
检查migrations文件
结果:文件没问题
百度 google 各种搜,乱投医,各种尝试
解决方案
python manage.py dbshell 进到数据库中,执行delete from django_migrations where app='your_appname';
python manage.py makemigrations(若migrations文件未删除,可不执行这一步)
python manage.py migrate 好啦,大功告成
原因分析
查看django_migrations表结构
建表语句:
CREATE TABLE "django_migrations" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "app" varchar(255) NOT NULL, "name" varchar(255) NOT NULL, "applied" datetime NOT NULL);
原因
造成多次应用migrations失败的原因是,当前model是修改过的,原来的migrations已经被我删除,但是,重新生成的migrations使用递增整数记名,所以,在django_migrations表中0001,0002等前面几个数字的文件都已被记录,在Django看来,被记录了就相当于已应用,所以,会出现刚开始的No migrations to apply.
避免方案
有强迫症删除migrations文件的同学(比如我),请同时到数据库中删除相应记录
没有强迫症的同学,可以继续生成新的migrations,旧的就不必理会了
题外话
执行python manage.py migrate之后,可以使用python manage.py sqlmigrate appname migrations_num(例如python manage.py sqlmigrate user 0002)查看当前migrations文件对应的sql语句。
另外,在使用上述命令查看0002文件的sql语句时发现,django会新建一个表user_new,然后插入user表中的数据,再把user表删掉,再把user_new重命名为user。所以,修改model的时候,不必担心原有数据会丢失。
django 数据库迁移(migrate)应该知道的一些事
命令首先数据库迁移的两大命令: python manage.py makemigrations & python manage.py migrate 前者是将model层转为迁移文件migrati...
想对作者说点什么? 我来说一句
指法飘逸黄大仙: 多谢多谢了,解决了我的问题(10个月前#1楼)
python manage.py migrate 出错后产生的坑
85
当你修改modal出现错误后,执行python manage.py makemigrations成功,然后执行python manage.py migrate... 来自: c0411034的博客
Python3 Django2.0 migrate 不能创建表
六pip的安装
于历史的原因,Python有两个著名的包管理工具easy_install和pip。在Python2.7的安装包中,easy_install是默认安装的,而pip需要我们手动安装。随着Python版本的提高,easy_install已经逐渐被淘汰,但是一些比较老的第三方库,在现在仍然只能通过easy_install进行安装。目前,pip已经成为主流的安装工具,自Python2 >=2.7.9或者Python3.4以后默认都安装有pip。
安装pip
那么,如果很不巧,你的Python版本下恰好没有pip这个工具,怎么办呢?解决办法很多!
使用easy_install安装: 各种进入到easy_install脚本的目录下,然后运行easy_inatall pip
使用get-pip.py安装: 在下面的url下载get-pip.py脚本 curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 然后运行:python get-pip.py 这个脚本会同时安装setuptools和wheel工具。
在linux下使用包管理工具安装pip: 例如,ubuntu下:sudo apt-get install python-pip。Fedora系下:sudo yum install python-pip
在windows下安装pip: 在C:\python27\scirpts下运行easy_install pip进行安装。
刚安装完毕的pip可能需要先升级一下自身: 在Linux或masOS中:pip install -U pip 在windows中:python -m pip install -U pip
1. 普通安装
再次强调,使用pip前请务必确认其所对应的Python解释器必须是你想要的那个!
以安装pillow模块为例。输入pip install pillow,安装过程如下图:
2. 指定版本安装
安装特定版本的package,通过使用==, >=, <=, >, <来指定一个版本号。 pip install 'Markdown<2.0' pip install 'Markdown>2.0,<2.0.3
3. 卸载已安装的库
pip uninstall pillow
4. 列出已经安装的库
pip list
5. 将已经安装的库列表保存到文本文件中
pip freeze > requirements.txt
这个功能非常常用、好用!经常被用作项目环境依赖文件。
6. 根据依赖文件批量安装库
pip install -r requirements.txt
使用上面的txt文件,批量安装第三方库。
7. 使用wheel文件安装
除了使用上面的方式联网进行安装外,还可以将安装包也就是wheel格式的文件,下载到本地,然后使用pip进行安装。比如我在PYPI上提前下载的pillow库的wheel文件,后缀名为whl。
可以使用pip install pillow-4.2xxxxxxx.whl的方式离线进行安装
pip源的选择
很多时候,比如网络不给力,连接超时、防火墙阻挡等等各种原因,我们可能无法从Python官方的PyPi仓库进行pip安装,这时候可以选择国内的第三方源,推荐使用豆瓣源,速度不错。
使用方法:
pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com pillow
需要注意的是,除了最后的pillow用你所期望的库名替代外,前面的参数都是固定写法,包括参数顺序。
更多pip相关资料可参考该文Python 包管理工具解惑