Python 中的

pip

installing packages

pip install <package-name>==<version>, version is optional

To install a package from git repository:

pip install -e git+REPO

pip currently supports cloning over git, git+https and git+ssh, Here are the supported forms:

[-e] git+git://git.myproject.org/MyProject#egg=MyProject
[-e] git+https://git.myproject.org/MyProject#egg=MyProject
[-e] git+ssh://git.myproject.org/MyProject#egg=MyProject  # for private repo, you can only use this
[-e] [email protected]:MyProject#egg=MyProject

Passing branch names, a commit hash or a tag name is possible like so:
[-e] git://git.myproject.org/[email protected]#egg=MyProject
[-e] git://git.myproject.org/[email protected]#egg=MyProject
[-e] git://git.myproject.org/[email protected]#egg=MyProject

if you add the -e(editable) option, then you can save the version info in freeze, which is exactly what you need.

upgrade a package:

pip install package-name --upgrade
pip install xxx -U

忽略缓存

pip install --on-cache-dir xxx

requirements file

save current dependencies to a requirement file:

pip freeze > requirements.txt

install from a requirement file

pip install -r requirements.txt

卸载的时候删除所有依赖

可以使用 pip-autoremove 包

pip install pip-autoremove
pip-autoremove requrests -y  # requests 有严重的内存泄露,而且代码非常不优雅,强烈建议使用 httpx 代替。

分离开发和运行依赖

众所周知,Python 的依赖管理是非常拉跨的,甚至都不支持把开发依赖和运行时的依赖分开。这就导致了调试时用到的 ipdb 等等还会出现在 requirements.txt 的问题。我做了一个简单的 work-around, 先把开发依赖装好了保存到 dev-requirements.txt 中,然后再装运行时依赖,每次 freeze 的时候把开发依赖剔除掉就好了。毕竟用到的开发时依赖还是比较少的,也不怎么变,这种方法基本能解决问题。

然后神器来了:pip install pipdeptree, 他可以把依赖显示成树形,这样我们只要根部的依赖就好啦。

先装开发时依赖:

pip install ipython ipdb black isort pipdeptree

然后保存到 dev-requirements.txt 中:

pipdeptree -f | grep '^\w' > dev-requirements.txt

然后再安装依赖,比如 pyyaml redis, 然后保存的时候过滤掉开发依赖:

pipdeptree -f | grep '^\w' | grep -vxFf dev-requirements.txt > requirements.txt

还可以写一个 Makefile:

freeze:
    pipdeptree -f | grep '^\w' | grep -vxFf dev-requirements.txt > requirements.txt

这样只要 make freeze 就好啦

让 pip 使用国内的源

  • 阿里云 https://mirrors.aliyun.com/pypi/simple/
  • 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
  • 豆瓣 http://pypi.douban.com/simple/
  • 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
  • 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple/

修改 ~/.pip/pip.conf (没有就创建一个), 内容如下:

[global]
https://pypi.tuna.tsinghua.edu.cn/simple/

poetry

pipenv

pipenv 太垃圾了,吹得很牛逼,结果基本不能用。不知道为啥不使用官方的 venv,而要使用 virtualenv。强烈不建议使用。

参考

  1. http://crazygit.wiseturtles.com/2018/01/08/pipenv-tour/
  2. https://stackoverflow.com/questions/5900201/pip-freeze-without-dependencies-of-installed-packages

及时获取更新,请关注公众号“爬虫技术学习”(spider-learn)

多年大厂求职&面试官经验,简历付费优化,¥ 500/次。

公众号“爬虫技术学习(spider-learn)”

About 逸飞

后端工程师

发表评论

邮箱地址不会被公开。 必填项已用*标注