最近把pyenv、pipenv这种都研究了一下,然后我发现一个严重的问题:就是我虽然看了半天这些工具,但是我对Python自己的打包系统却完全没有了解。所以这篇文章就来研究一下Python自带的打包系统。
pip
先来详细介绍一下pip的用法,平时基本上我们用pip的时候也就是一个pip install
。其实pip也有很多特性,在此先介绍一下常用的一些特性。此部分参考了pip文档,想了解更多的话可以看原文。
安装
最常用的命令就是安装了,除此以外还可以指定版本号:
$ pip install SomePackage # 不指定版本号,安装最新版
$ pip install SomePackage==1.0.4 # 指定版本号
$ pip install 'SomePackage>=1.0.4' # 指定最小版本号
$ pip install -r requirements.txt # 从需求文件安装
$ pip install -e . # 从本地项目setup.py安装
使用代理服务器
当从官方的PyPI源安装比较慢的时候,可以考虑使用代理服务器,指定代理服务器的方法有三种:
- 使用
--proxy
参数在命令行指定,代理格式为[user:passwd@]proxy.server:port
。 - 在配置文件中指定。
- 设置
http_proxy
,https_proxy
和no_proxy
环境变量。
使用需求文件(requirements.txt)
在需要很多pip包的项目中,用pip一个个安装包不是一个好办法,这时候可以考虑使用需求文件。
如果要生成需求文件,用下面的命令。这会将当前Python环境中的所有包的当前版本状态保存下来,将来安装的时候会精确还原到冻结的那个状态。
pip freeze > requirements.txt
要从需求文件中安装,则是用下面的命令:
pip install -r requirements.txt
官方文档还给出了一个带注释的实例需求文件:
#
####### example-requirements.txt #######
#
###### 没有版本标识符的包,会安装最新版 ######
nose
nose-cov
beautifulsoup4
#
###### 带版本标识符的包 ######
# 版本标识符的资料 https://www.python.org/dev/peps/pep-0440/#version-specifiers
docopt == 0.6.1 # Version Matching. Must be version 0.6.1
keyring >= 4.1.1 # Minimum version 4.1.1
coverage != 3.5 # Version Exclusion. Anything except version 3.5
Mopidy-Dirble ~= 1.1 # Compatible release. Same as >= 1.1, == 1.*
#
###### 还可以指定其他的需求文件 ######
-r other-requirements.txt
#
#
###### 还可以指定本地货网络上的特定包 ######
./downloads/numpy-1.9.2-cp34-none-win32.whl
http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl
#
###### Additional Requirements without Version Specifiers ######
# 和第一部分一样,这里这些部分没有顺序需求,可以随意改变位置
rejected
green
#
版本标识符用来指定包的版本,有以下几个例子:
SomeProject
SomeProject == 1.3
SomeProject >=1.2,<.2.0
SomeProject[foo, bar]
SomeProject~=1.4.2
从6.0版本开始,pip也支持环境标记(也就是分号后面跟Python版本或者系统类型):
SomeProject ==5.4 ; python_version < '2.7'
SomeProject; sys_platform == 'win32'
卸载
卸载某个包使用下面的命令:
$ pip uninstall SomePackage
列出包
要列出所有已安装的包:
$ pip list
docutils (0.9.1)
Jinja2 (2.6)
Pygments (1.5)
Sphinx (1.1.2)
要列出过时的包:
$ pip list --outdated
docutils (Current: 0.9.1 L