Python基础39-包/模块(三方包安装)

1 包管理项目

1.2 常用

  • 官方:
  1. 名称:distutils
  2. 特点:通过 setup.py 脚本安装
  3. 安装 python 时自带
  • 非官方:
  1. 名称:setuptools
  2. 特点:
    egg 格式(压缩文件格式),通过 easy_install 安装
    whl 格式(压缩文件格式),通过 pip 安装
  3. '/usr/local/lib/python3.6/site-packages'下没有时需要手动安装

1.2 setuptools 安装

原因:如果包或模块是通过 setuptools包管理器 打包的话,需要安装 setuptools才能安装由其打包的包或模块

1.2.1 手动安装

  1. https://pypi.org/search/?q=setuptools 下载zip 格式文件
  1. 解压后查看 setup 文件



  2. 打开命令行工具

  3. 切换到 setup.py 文件所在目录
    2.3 执行命令,安装到 Python3环境中的 '/usr/local/lib/python3.6/site-packages'
    Python3.x:python3 setup.py install;

1.2.2 通过 pycharm 安装

  1. 进入 pycharm 偏好设置,点击包或模块栏,点击左下角+号,进行搜索添加


2 包或模块托管

3 常见已发布三方包和模块的形式

  • source
  • egg
  • whl (本质是.zip 格式,是用来代替 egg 的)
whl / source

egg

4 安装

4.1 本地安装

  1. 单文件
  • 建议放入到 '/usr/local/lib/python3.6/site-packages'路径
  1. 对于带有 setup.py 的文件,通过 setup.py 脚本安装
    2.1 打开命令行工具
    2.2 切换到 setup.py 文件所在目录
    2.3 执行命令
    Python3.x:python3 setup.py install;
    Python2.x:python setup.py install;
  1. .egg 文件,使用 setuptools 自带的安装脚本 easy_install 进行安装
    使用 setuptools 的自带安装脚本 easy_install 进行安装
    命令:easy_install xxx.egg
  1. .whl 使用 pip 进行安装
    4.1 使用 easy_install 进行安装
    4.2 使用 pip 进行安装,使用命令: pip install xxx.whl
    (如果当前没有安装过 pip,则同样可以通过easy_install pip 先安装 pip)

4.2 远程安装

以下都支持远程安装三方包

  • easy_install
  • pip
  • pycharm

4.3 安装源

5 模块的其他操作

5.1 通过 easy_install 操作

5.1.1 使用文档说明

http://peak.telecommunity.com/DevCenter/EasyInstall

5.1.2 多个 Python 版本的切换安装

easy_install-N.N N.N 用于指明安装在哪个 Python 版本环境中

# 如:Python2.7.14
easy_install-2.7 requests


# 如:Python3.6.41
easy_install-3.6 requests

5.1.3 安装指定版本包

使用语法:easy_install “库名 限定符 版本[, 限定符 版本]”
中括号部分:可选
库名:包的名称
限定符:包括<、>、>=、<=、==

easy_install requests #安装最新版本
easy_install "requests >= 2.14.1" #安装大于或等于2.14.1版本的最新包
easy_install "requests > 1.0, < 2.0" #安装大于1.0 且小于 2.0 版本的包
easy_install "requests == 2.14.1" #安装 2.14.1版本的包,如果已安装则切换到这个版本

5.1.4 升级三方包

命令:easy_install --upgrade 库名; 或 easy_install -U 库名;

easy_install --upgrade requests

5.1.5 卸载三方包

5.1 手动卸载
* 删除在 easy_install.pth中的包记录
* 删除对应的包文件

easy_install.pth 作用

  1. 记录当前通过 easy_install 已经安装的模块,如果该模块已安装多个版本,则该文件记录的是最后一次安装的版本,也就是当前激活使用的版本
  2. 用于导入模块时的路径检索
    导入检索路径为:内置路径 > sys.path

sys.path

[
'', 
'/usr/local/Cellar/python3/3.6.4_1/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', 
'/usr/local/Cellar/python3/3.6.4_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6', 
'/usr/local/Cellar/python3/3.6.4_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload',
 '/usr/local/lib/python3.6/site-packages'
]

当前文件所在路径
/python36.zip 安装包路径
/python3.6 安装路径
/lib-dynload 路径
/site-packages 三方库安装路径
+ 对应路径下的.pth文件里描述的路径等

5.2 easy_install -m 包名

  • 该命令并非真正的卸载命令。removing xxxx from easy_install.pth file
  • -m 的含义:支持多版本,可以在运行时进行切换
    • 通过上述命令后,将包从 easy_install.pth 中移除,让当前 python 版本环境不直接指明报的版本,使得用户无法直接导入
    • 如果用户想动态使用某个版本,需要使用如下步骤
    import pkg_resources
    pkg_resources.require("requests == 2.19.1")
    import requests
    print(requests) # 查看是否导入上述指定的版本
    
  • 该命令并不会删除依赖包,正常情况也不应该删除依赖包,因为它们有可能被其他包引用着。
    上述动态使用的前提是,site-packages 下已经具有多个版本的库

Command-Line Options:--multi-version, -m

--multi-version, -m
"Multi-version" mode. Specifying this option prevents easy_install from adding an easy-install.pth entry for the package being installed, and if an entry for any version the package already exists, it will be removed upon successful installation. In multi-version mode, no specific version of the package is available for importing, unless you use pkg_resources.require() to put it on sys.path. This can be as simple as:

from pkg_resources import require
require("SomePackage", "OtherPackage", "MyPackage")
which will put the latest installed version of the specified packages on sys.path for you. (For more advanced uses, like selecting specific versions and enabling optional dependencies, see the pkg_resources API doc.)

Changed in 0.6a10: this option is no longer silently enabled when installing to a non-PYTHONPATH, non-"site" directory. You must always explicitly use this option if you want it to be active.

5.1.6 切换三方安装源

  • 一般安装读取源是官方地址:


  • 打开文件 /usr/local/lib/python3.6/site-packages/setuptools/command/easy_install.py

  • 将官方地址https://pypi.python.org/simple 替换成国内镜像地址即可(参考4.3节)

5.2 通过 pip 操作

5.2.1 使用文档说明

https://pip.pypa.io/en/stable/

5.2.2 切换安装源

  1. 一次性修改
  • 指定检索,只到指定地址进行检索
pip install --index-url https://pypi.douban.com/simple/ requests
  • 扩展检索,除到官方的 pypi 地址检索外,还会到扩展地址检索
pip install --extra-index-url https://pypi.douban.com/simple/ requests
  1. 永久性修改
  • linux下运行命令
    vi ~/.pip/pip.conf
    如果没有 pip.conf 文件,分别执行如下命令(进入到对应文件夹目录下创建该配置文件)
1 进入到用户目录下
cd ~
2 在该目录下创建.pip 文件夹
mkdir .pip
3 进入到.pip文件夹目录下
cd ~/.pip
4 创建 pip.conf 配置文件
touch pip.conf

然后写入如下内容并保存

[global]
trusted-host =  mirrors.aliyun.com
[install]
index-url = https://mirrors.aliyun.com/pypi/simple

5.2.3 安装在不同的 Python 版本环境中

  1. 方式一
python -m pip install requests # Python2.x
或
python3 -m pip install requests # Python3.x
  1. 方式二
py -2 -m pip install requests # Python2.x
或
py -3 -m pip install requests # Python3.x

py:Python 的安装包实际上在系统中安装了一个启动器
启动器可以调用不同版本的 Python 去执行某些脚本py -2 或 py -3

5.2.4 查看包

  1. 所有已经安装的包 pip list
  2. 不被依赖的包 pip -list --not-required
  3. 过期的包 pip list --outdated
  4. 查看某个包的具体信息 pip show xxxx

5.2.5 搜索包

pip search xxxx
或
pip search -i 检索地址 xxxx

5.2.6 安装特定版本

pip requests #安装最新版本
pip install "requests >= 2.14.1" #安装大于或等于2.14.1版本的最新包
pip install "requests > 1.0, < 2.0" #安装大于1.0 且小于 2.0 版本的包
pip install "requests == 2.14.1" #安装 2.14.1版本的包,如果已安装则切换到这个版本

5.2.7 升级包

pip install --upgrade requests
  • 更新动作同时会所依赖的其他包版本(如果有需要的话)
  • 不能通过 pip install requests来更新包,因为 install 只在包不存在时执行安装操作,如果包已经存在则不会安装最新的包

5.2.8 卸载包

pip uninstall xxx
  • 如果包是通过 easy_install 安装的
    会自动删除 easy_install.pth 文件中对应的包路径
    会自动删除对应.egg 包的原文件
  • 如果是通过 pip install 安装的
    会直接删除对应包文件

5.2.9 生成冻结需求文本且根据冻结需求文本安装

使用场景:可以将当前安装的三方包记录,存储到指定的文档中。以后就可以根据该需求文件去安装三方包

  • 列出冻结内容
pip freeze
  • 将冻结内容写入指定文件
pip freeze > ./requirements.text
  • 别人通过 requirements.text 的内容安装对应的三方包
pip install -r requirements.text

Question:

  1. pip install 问题
$ pip install requests                                                       
Collecting requests
  Could not fetch URL https://pypi.python.org/simple/requests/: There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) - skipping

执行以下命令

curl https://bootstrap.pypa.io/get-pip.py | python
  1. 如果直接执行 pip list 等命令出现问题时,可以通过执行脚本形式使用python3 -m pip list方式处理
$ pip list                                                                   
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 9, in <module>
    load_entry_point('pip==9.0.1', 'console_scripts', 'pip')()
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/__init__.py", line 219, in main
    cmd_name, cmd_args = parseopts(args)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/__init__.py", line 159, in parseopts
    parser = create_main_parser()
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/__init__.py", line 137, in create_main_parser
    parser = ConfigOptionParser(**parser_kw)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/baseparser.py", line 148, in __init__
    self.config.read(self.files)
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ConfigParser.py", line 305, in read
    self._read(fp, filename)
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ConfigParser.py", line 546, in _read
    raise e
ConfigParser.ParsingError: File contains parsing errors: /Users/minyu_leung/.pip/pip.conf
    [line  3]: ' trusted-host =  mirrors.aliyun.com\n'
    [line  5]: ' index-url = https://mirrors.aliyun.com/pypi/simple\n'
$ python3 -m pip list                                                        
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
backports.functools-lru-cache (1.4)
certifi (2017.11.5)
chardet (3.0.4)
cycler (0.10.0)
easy-timer (0.0.4)
facebook-wda (0.2.2.dev1)
graphviz (0.8.3)
idna (2.6)
Jinja2 (2.10)
MarkupSafe (1.0)
matplotlib (2.1.1)
mog-commons (0.2.3)
numpy (1.13.3)
objgraph (3.4.0)
olefile (0.44)
opencv-python (3.4.0.12)
Pillow (4.3.0)
pip (9.0.1)
pyparsing (2.2.0)
python-dateutil (2.6.1)
pytz (2017.3)
requests (2.18.4)
setuptools (36.5.0)
six (1.11.0)
urllib3 (1.22)
wheel (0.30.0)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容