返回介绍

进阶篇:pip 高级用法

发布于 2025-04-20 18:52:13 字数 3368 浏览 0 评论 0 收藏

命令自动补全

pip 支持自动补全功能,对于 zsh 用户非常友好。zsh 用户使用如下命令就可以支持自动补全了:

> pip completion--zsh>>~/.zprofile
> source~/.zprofile

或者在~/.zshrc 里面加一行:

eval"`pip completion--zsh`"

如果使用 bash,则应该执行如下命令:

pip completion--bash>>~/.profile

现在输入“pip i<Tab>”就会变成“pip install”,自动补全了 install 这个子命令。

普通用户安装

如果不是 root 用户,没有 sudo 权限,也不在虚拟环境里面,要如何安装包呢?可以使用命令:

> pip install django--user

这样,安装的包会放在当前用户的.local 目录下:

> pip show django|grep Location
Location:/home/ubuntu/.local/lib/python2.7/site-packages

不能在 virtualenv 中使用“--user”,需要退出虚拟环境后才可以使用。

编辑模式

作为开发者,为了让最新的开发版代码及时生效,开发过程中可以使用 pip 的编辑模式:

> git clone https://github.com/dongweiming/vine
> cd vine
> pip install -e .
> cd
> python-c 'import vine;print vine'
<module 'vine' from '/home/ubuntu/web_develop/vine/vine/__init__.py'>

可以看到,“pip install-e .”会把开发目录作为包的路径。这样就可以实时修改了。

使用 devapi 作为缓存代理服务器

pip 缓存只针对当前的用户。如果公司使用 Python 的规模很大,尤其是有很多自己分发的包的时候,使用缓存代理是非常提高下载效率的方法,这样就不再依赖网络环境到 PYPI 下载包了。

> pip install devpi-server

启动 devpi-server:

> devpi-server--host=0.0.0.0--start
...
starting background devpi-server at http://0.0.0.0:3141
...

默认缓存服务器使用了 3141 端口。现在我们就可以使用-i 参数指定使用缓存代理了:

> pip install-i http://localhost:3141/root/pypi/tornado

当然,可以把这个“index-url”设置写到配置文件中:

> mkdir~/.config/pip-p
> cat~/.config/pip/pip.conf
[global]
index-url=http://localhost:3141/root/pypi/+simple/

安装 Django 看一下:

> pip install django
Collecting django
    Downloading http://localhost:3141/root/pypi/+f/706/87b2d4a2dfa51/Django-1.9.6-py2.py3
        -none-any.whl (6.6MB)
      100%|████████████████████████████████|6.6MB 42.1MB/s
Installing collected packages:django
Successfully installed django-1.9.6

可以看到现在的安装包是从缓存代理获取的,而不是从每次都到 PYPI 下载了。

如果希望像 PYPI 那样有个 Web 界面,可以安装 devpi-web:

> pip install-U devpi-web

重启 devpi-server:

> devpi-server--host=0.0.0.0--stop
> devpi-server--host=0.0.0.0--start

现在就可以通过 http://127.0.0.1:3141/访问这个简单的 Web 界面了。

PYPI 的完全镜像

bandersnatch(https://bitbucket.org/pypa/bandersnatch )是 PyPA 组织根据 PEP 381(http://www.python.org/dev/peps/pep-0381/ )实现的镜像客户端。它可以帮我们建立一个包含了全部包的本地镜像服务。

先安装 bandersnatch:

(bandersnatch)> pip install-r https://bitbucket.org/pypa/bandersnatch/raw/stable/
     requirements.txt
(bandersnatch)> pip install zc.buildout
(bandersnatch)> sudo apt-get install mercurial-yq
(bandersnatch)> hg clone https://bitbucket.org/pypa/bandersnatch~/bandersnatch
(bandersnatch)> ~/bandersnatch
(bandersnatch)> buildout

默认还没有创建 bandersnatch.conf 这个配置文件,假如不使用“-c”,默认是/etc/bandersnatch. conf。先启动 bandersnatch 创建配置文件:

(bandersnatch)> bandersnatch-c bandersnatch.conf mirror

更新 directory 配置项,修改 directory 选项的值为/data/pypi,这个目录就是存放包的根目录:

(bandersnatch)> grep directory e|grep-v ';'
directory=/data/pypi

再次启动“bandersnatch mirror”:

(bandersnatch)> sudo mkdir/data
(bandersnatch)> sudo chown ubuntu:ubuntu/data
(bandersnatch)> bandersnatch-c bandersnatch.conf mirror

现在就开始同步镜像了。需要注意,PYPI 上所有的包加起来有几百 GB,而且还在不断增加中,请合理安排硬盘资源。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。