Python 包管理及虚拟环境的应用(一: pip)
话说 Python 的哲学之一就是: 用一种方法,最好是只有一种方法来做一件事。可以用
即使是 Java 日趋发展庞大的今天,包管理工具也没有如今的 Python 复杂,Java 的包管理工具经历了手工下载 jar 包,Maven, Ant+Ivy, Gradle, sbt, 但主流的也就 Maven 和 Gradle, 并且它们兼具项目构建的功能。
这里有一个 Python 包管理工具变迁的视频: Kenneth Reitz - Pipenv: The Future of Python Dependency Management - PyCon 2018。再更早的 Python 依赖管理的方式不说,视频中提到了
下面体验一下
重来没有安装过用户独立的模块的话,第五行可能看不到,说下区别
相的模块先安装到全局目录
在没有虚拟环境下使用
所以当维护一个项目时,最好在 Python 虚拟环境中使用
接下来会学习 Python 虚拟环境的应用(顺带提下 conda, Anaconda 也可用于包管理与环境管理,只是它们专注于科学数据科学与机器学习领域) 永久链接 https://yanbin.blog/python-package-manager-venv-virtualenv-1/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
python -m this 或在 python 交互界面下 import this 看到 The Zen of Python 有一句:There should be one-- and preferably only one --obvious way to do it.然而 Python 在关于包管理(依赖管理)一事上却让人面临了众多的选择。
即使是 Java 日趋发展庞大的今天,包管理工具也没有如今的 Python 复杂,Java 的包管理工具经历了手工下载 jar 包,Maven, Ant+Ivy, Gradle, sbt, 但主流的也就 Maven 和 Gradle, 并且它们兼具项目构建的功能。
这里有一个 Python 包管理工具变迁的视频: Kenneth Reitz - Pipenv: The Future of Python Dependency Management - PyCon 2018。再更早的 Python 依赖管理的方式不说,视频中提到了
- 手工下载包,然后
python requests-threads-0.1.1/setup.py install的安装方式 easy_install requests-threads自动从网络上下载并安装到本地,它却未提供卸载的命令easy_install的替代品pip出现了,可pip install requests或pip uninstall requests。Python3 的相应的命令是pip3。virtualenv或python3 -m venv, 虚拟环境的出现,每个项目自我管理依赖,营造相互隔离的应用环境- 新一代的
pipevn,依赖描述文件是Pipfile, 并支持锁定文件,区分开发与产品环境
下面体验一下
pip(将以 pip3 为例), venv 和 virtualenv, 以及 pyvenv 的应用。系统环境是 Ubuntu 18.04 + Python 3.6.7,当前用户是 vagrant。1. pip3 依赖管理
首先pip3 没有的话需要通过下面的命令进行安装sudo apt-get install python3-pippip 安装的模块可以是全局的或用户独立的,回忆一下 Python 的模块搜索路径,安装后模块总是要能被 Python 程序搜索到才有用,Python 搜索模块的路径是依照
sys.path 的列表值顺序。我们用 python3 -c "import sys; print(str(sys.path).replace(',', '\n'))" 查看 Python3 交互界面下的路径列表:1[''
2 '/usr/lib/python36.zip'
3 '/usr/lib/python3.6'
4 '/usr/lib/python3.6/lib-dynload'
5 '/home/vagrant/.local/lib/python3.6/site-packages'
6 '/usr/local/lib/python3.6/dist-packages'
7 '/usr/lib/python3/dist-packages']重来没有安装过用户独立的模块的话,第五行可能看不到,说下区别
sudo pip3 install requests使用了
sudo , 但没有带 --user 参数情况下 pip 安装模块到全局路径中,即 requests 及其依赖将被安装到 /usr/local/lib/python3.6/dist-packages 目录中,对任何用户可见。pip3 install requests未用
或 pip3 install requests --user
或 sudo pip3 install requests --user
sudo 或指定了 --user 参数,模块 requests 及其依赖将被安装到当前用户目录 /home/vagrant/.local/lib/python3.6/site-packages 中,对其他用户不可见。相的模块先安装到全局目录
/usr/local/lib/python3.6/dist-packages 中,然而再次安装到用户目录 /home/vagrant/.local/lib/python3.6/site-packages, 反过来就不允许。在没有虚拟环境下使用
pip 时,无论模块是安装到全局或用户目录中,都有以下弊端- 不同的 Python 项目基本无法使用同一模块的不同版本
- 容易产生许多垃圾模块,曾经下载的模块不知道是否有谁仍在使用
- 不能简单的用
pip3 freeze来生成requrements.txt文件,它将包含一大堆的内容
所以当维护一个项目时,最好在 Python 虚拟环境中使用
pip, 我们将要使用到 python3 -m venv 或 virtualenv接下来会学习 Python 虚拟环境的应用(顺带提下 conda, Anaconda 也可用于包管理与环境管理,只是它们专注于科学数据科学与机器学习领域) 永久链接 https://yanbin.blog/python-package-manager-venv-virtualenv-1/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。