要安装第三方包首先当然需要安装python;下面将介绍如何获取第三方的安装包并使用它们;

除了手工进行一项一项安装之外,还有一种比较傻瓜的方式:使用集成好的Python工作环境Anaconda,跳过所有安装步骤,直接使用;

1-python安装验证

在官网上面下载相应的python版本,目前python有两个大版本,2.x和3.x,两个大版本之间是完全不兼容的,甚至同一个大版本的小版本之间也存在兼容性问题,因此,在选择python版本的时候一定要注意。

下载完成之后直接安装一路next直到安装结束;

安装结束之后需要验证下是不是已经安装成功了,在命令行中输入python,如果出现相关版本等信息,说明安装成功。否则安装失败;正常情况下在安装过程中会自动将python路径配置到环境变量中。如果安装完成之后命令号依然查询不到python信息,那么需要手动配置环境变量,Windows会根据一个Path的环境变量设定的路径去查找python.exe,如果没找到,就会报错。如果在安装时漏掉了勾选Add Python3.5 to PATH,那就要手动把python.exe所在的路径添加到Path中。如果配置完环境变量之后还是不行,不要犹豫直接重新安装吧。

 

2- python三方包安装及验证

离线安装

step1:下载需要的包,并解压;

step2:在命令行切换到待安装三方包中setup.py文件所在的目录下,然后执行python setup.py install

在线安装

python提供了两种安装工具:pip和easy_install

在命令行中输入命令:pip install  {{ packagename }}

 3-安装路径

安装成功的包都会放在python的site-package目录下:

一般分为四种类型:

  • 1. 
    site-packages/pylab.py这种是最好理解的, 因为单个.py文件就可以作为module被引用. 虽然丑了点, 但是单独扔在site-packages下也没问题.
  • 2. 
    site-packages/toolz 
    site-packages/toolz-0.8.0-py2.7.egg-info这种包, 有两个目录, 一个目录以包名命名, 因为含有__init__.py的目录, 可以作为module被引用. 
    另一个egg-info目录是一些metadata, 没什么大用, 有些包也没有这个目录.
  • 3. 
    site-packages/fasttext-0.7.6-py2.7-linux-x86_64.egg单独一个.egg文件. 这种包, 是把模块都打进了一个egg压缩包里. 这个压缩包可以视为一个目录, 模块文件在这里: site-packages/fasttext-0.7.6-py2.7-linux-x86_64.egg/fasttext
  • 4. 
    site-packages/titlectr-0.1-py2.7.egg虽然文件名跟3相同, 但是这是一个目录, 可以视为是3解压后的样子. 模块文件在这个目录里: site-packages/titlectr

, site-packages是在模块搜索的path(sys.path)里的, 所以1和2这两种存放包的方式, 可以直接被搜索到, 可以直接import, 但是3和4这两种方式, 包是在子目录中, 所以无法直接import. 于是安装的时候, 安装工具会将.egg目录加入到path中(.pth文件). 比如将site-packages/fasttext-0.7.6-py2.7-linux-x86_64.eggsite-packages/titlectr-0.1-py2.7.egg写入到site-packages/easy_install.pth中. 也可以写在其他的site-packages/*.pth中, 比如给每个package单独建一个.pth文件.

python有两个setup工具, 一个是setuptools(from setuptools import setup), 另一个是distutil(from distutil import setup).

  • setuptools安装的包, 会形如3和4的样子. 这个工具有完善的打egg包的功能, 也倾向于把模块的功能部分和metadata打成一个整体(egg), 方便管理. 使用python setup.py bdist_egg命令, 可以将module打成egg包, 方便部署.
  • distutil. 我们在使用的时候发现, distutil不会在打包上做首选尝试. 如果不需要复杂的编译操作, distutil会直接把源码包复制到site-pacakages下(参见2), 并创建一个和模块并列的metadata. 如果package中有个大文件比如字典(当然很不推荐将大字典封装作为package的一部分, 一般外挂), 使用setuptools, 会耗费极大的时间在打包egg上, 而distutil可以直接拷贝安装.
  • 除此之外, wheel是一种新的格式. 更类似于java的jar包. python setup.py bdist_wheel可以打包成wheel包.