组长,Python包怎么锁版本?

Q: 组长,Python包怎么锁版本?pip默认安装到全局不好,如果像npm一样, package.json来索引项目包,package-lock.json 来锁定包的版本

A: 有,你学一下pipenv吧

这篇文章说说Python环境配置。最终选择 pipenv,并删除掉其他选项。

虚拟环境

目前Python存在多版本问题,和Node.js 一样,Python本身也在不断迭代,python2.7 python3.x 天生不兼容,但现实情况下,需要同时应对不同环境。

有办法解决:

  1. virtualenv 历史悠久。网上教程比较多。
  2. Python3 新版自带,比较弱
  3. pipenv 新推荐,感觉也不大行,可以用。

接下来说 pipenv的用法。

官方文档:

Pipenv is a tool that aims to bring the best of all packaging worlds (bundler, composer, npm, cargo, yarn, etc.) to the Python world. Windows is a first-class citizen, in our world.

Pipenv 目标是 把 世界上最好的包管理工具(比如 npm yarn等)带进Python的世界。windows是一等公民(也就是优先支持)

https://github.com/pypa/pipenv

核心目标是:

创建一个隔绝的虚拟环境,类似于 docker,在虚拟环境(也就是对应文件夹)里,Python环境以及安装的全局包不会影响系统,万一出问题了,删掉虚拟环境就是,总之很安全。

特点:

对标yarn,统一管理依赖包,提供lock锁版本,不需要再单独使用 pip和virtualenv

这个包依赖 virtualenv, certifi, virtualenv-clone, pipenv

安装

1
2
3
4
5
#mac brew
brew install pipenv

#
ubuntu
sudo apt install pipenv

使用

1
2
3
4
5
6
7
8
# 激活
cd folderName
pipenv install -three

#
指定版本
pipenv --two
pipenv --three
pipenv --python [指定Python版本]

执行完会产生:

  • Pipfile 包含了依赖关系,取代了requirements.txt
  • Pipfile.lock 锁版本

修改源。pipenv的配置默认是官方源,需要手动进入 Pipfile进行修改。如果想要每个都生效,有点麻烦,官方文档有介绍。修改 Pipfile

1
2
3
4
[[source]]
name = "pypi"
url = "https://mirrors.aliyun.com/pypi/simple"
verify_ssl = true

项目内使用

1
2
3
4
5
6
7
8
9
10
# 默认会lock
pipenv install xxx
pipenv uninstall xxx

#
经验来看最好跳过lock,没事了再统一
pipenv install xxx --skip-lock
pipenv lock #冻结

#
其他人使用
pipenv install

如何区分 dev 和 prod 环境:

1
2
3
4
5
6
7
8
9
10

pipenv install --dev xxx

#
只安装普通包
pipenv install

#
安装所有依赖包
pipenv install -dev

pipenv run xxx

运行代码

1
pipenv run [python code]

pip设置中国源

pip类似于node中的npm的包管理,通过pip可以安装Python中的各种插件、库。

针对国内的环境,需要单独配置镜像源。之前首推豆瓣源,现在也推荐阿里云(这类似于node.js里的cnpm)

在windows中,在 C:\Users\用户名\pip\pip.ini 添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[global]

# 推荐豆瓣源
index-url =http://pypi.douban.com/simple
trusted-host =pypi.douban.com

# 也推荐使用阿里云
#index-url =http://mirrors.aliyun.com/pypi/simple/
#trusted-host=mirrors.aliyun.com

timeout = 120
format = column
[list]
format=columns

在mac中

1
2
3
pip config list
pip config set global.index-url 'https://mirrors.aliyun.com/pypi/simple/'
pip config set install.trusted-host 'mirrors.aliyun.com'

请我喝杯咖啡吧~