Python基础39-包/模块(三方包安装)
1 包管理项目
1.2 常用
- 官方:
- 名称:distutils
- 特点:通过 setup.py 脚本安装
- 安装 python 时自带
- 非官方:
- 名称:setuptools
- 特点:
egg 格式(压缩文件格式),通过 easy_install 安装
whl 格式(压缩文件格式),通过 pip 安装 -
'/usr/local/lib/python3.6/site-packages'
下没有时需要手动安装
1.2 setuptools 安装
原因:如果包或模块是通过 setuptools包管理器 打包的话,需要安装 setuptools才能安装由其打包的包或模块
1.2.1 手动安装
- 从 https://pypi.org/search/?q=setuptools 下载zip 格式文件
-
解压后查看 setup 文件
-
打开命令行工具
-
切换到 setup.py 文件所在目录
2.3 执行命令,安装到 Python3环境中的'/usr/local/lib/python3.6/site-packages'
Python3.x:python3 setup.py install;
1.2.2 通过 pycharm 安装
-
进入 pycharm 偏好设置,点击包或模块栏,点击左下角+号,进行搜索添加
2 包或模块托管
3 常见已发布三方包和模块的形式
- source
- egg
- whl (本质是.zip 格式,是用来代替 egg 的)
egg
4 安装
4.1 本地安装
- 单文件
- 建议放入到
'/usr/local/lib/python3.6/site-packages'
路径
- 对于带有 setup.py 的文件,通过 setup.py 脚本安装
2.1 打开命令行工具
2.2 切换到 setup.py 文件所在目录
2.3 执行命令
Python3.x:python3 setup.py install;
Python2.x:python setup.py install;
- .egg 文件,使用 setuptools 自带的安装脚本 easy_install 进行安装
使用 setuptools 的自带安装脚本 easy_install 进行安装
命令:easy_install xxx.egg
- .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 安装源
- 官方:https://pypi.python.org/simple
- 其他:
http://pypi.douban.com/ 豆瓣
http://pypi.hustunique.com/ 华中理工大学
http://pypi.sdutlinux.org/ 山东理工大学
http://pypi.mirrors.ustc.edu.cn/ 中国科学技术大学
http://mirrors.aliyun.com/pypi/simple/ 阿里云
https://pypi.tuna.tsinghua.edu.cn/simple/ 清华大学
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 作用
- 记录当前通过 easy_install 已经安装的模块,如果该模块已安装多个版本,则该文件记录的是最后一次安装的版本,也就是当前激活使用的版本
- 用于导入模块时的路径检索
导入检索路径为:内置路径 > 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 切换安装源
- 一次性修改
- 指定检索,只到指定地址进行检索
pip install --index-url https://pypi.douban.com/simple/ requests
- 扩展检索,除到官方的 pypi 地址检索外,还会到扩展地址检索
pip install --extra-index-url https://pypi.douban.com/simple/ requests
- 永久性修改
- 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 版本环境中
- 方式一
python -m pip install requests # Python2.x
或
python3 -m pip install requests # Python3.x
- 方式二
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 查看包
- 所有已经安装的包
pip list
- 不被依赖的包
pip -list --not-required
- 过期的包
pip list --outdated
- 查看某个包的具体信息
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:
- 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
- 如果直接执行 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)