Tech:Mac-Python环境配置

围绕 Pipenv 的配置和使用以及阐述其中比较混乱的历史问题。优雅的方式,针对 Mac。

看网上很多人碰到了类似的问题,稀里糊涂就解决了

本文简述

主要围绕 Pipenv 的配置和使用以及阐述其中比较混乱的历史问题。

优雅的方式配置和使用 Pipenv,针对 Mac。

哪个版本的 pip

后面要用到 pip 安装 pipenv,先说 pip

首先,去官网下载的安装包,Python3 是自带 pip3 的,而 Python2 则没有。

1
2
3
4
5
$ which pip
# 没有显示,说明没有安装

$ which pip3
/usr/bin/pip3

然后一般有人就会这么做:

1
2
alias python="python3"
alias pip="pip3"

当然也有人这样: sudo easy_install pip,此时 python 是 pip2。

优雅的做法:

实际上,我们完全可以直接用 pip3 做一波升级,因为它升级的过程会自动让 pip 默认为 pip3。

1
$ pip3 install --upgrade pip

此时 which pip 命令其实是 pip3。

1
2
3
4
5
$ pip --version
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)

$ ls -al /usr/bin/pip
lrwxrwxrwx 1 root root 13 3月 21 13:36 /usr/bin/pip -> /usr/bin/pip3

全局加速

考虑到有些时候确实需要全局环境?(我们一般都用虚拟环境吧)

配置一下镜像可能也值得,但是这个镜像后面虚拟环境用不到(只给全局用):

1
2
3
4
5
6
7
$cat ~/.pip 
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
timeout = 6000
[install]
use-mirrors = true
mirrors = https://pypi.tuna.tsinghua.edu.cn/simple

pipenv 中的版本

pipenv 如果不指定 python 解释器版本,它创建的虚拟环境中默认用哪个版本?

其实和 pip 有关,因为它集成了virtualenv, pip和pyenv三者的功能。

如果我们用的 pip 实际上是 python3 的 pip3 版本来安装 pipenv 的,即 pip install pipenv,那么默认你创建环境,不用指定 --three --python Python3.6 这种。直接创建就好了。

实在不放心,完全可以这么来:

1
2
$ pip3 install pipenv
$ pip3 install --upgrade pipenv

之后创建虚拟环境的时候,也买个保险:

1
$ pipenv --three --python /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 install

当然,如果你知道 pipenv 确实就是 pip3 安装的,就直接 pipenv install 创建虚拟环境就好。

通过上面的解释,也能发现,pipenv 默认创建基于 python3 或者 python2 的环境,可以后期指定。

  • 要初始化 Python 3 虚拟环境,请运行 $ pipenv --three --python Python3.6
  • 要初始化 Python 2 虚拟环境,请运行 $ pipenv --two --python Python2.7

(找不到的版本,就指定全路径吧,向上面那样)

专治 pipenv 慢

慢有哪些原因

原来的 requirements 为速度快?

打开 Pipfile.lock 就能知道原因了。它详细的记录了包的版本信息。每次安装,更新,删除等都要操作这个文件。

  • 查询网络,检查本地,然后还要写 PipfilePipfile.lock 俩文件

解决网络问题:

全局 pip 的加速在虚拟环境中不起作用。(当你激活 pipenv shell 然后 which pip就知道原因了)

此时需要在 Pipfile 中设置镜像以及 pypi 源:

1
2
3
4
5
6
7
8
9
[[source]]
name = "pypi"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
verify_ssl = true

[[source]]
name = "mirror"
url = "https://mirrors.aliyun.com/pypi/simple"
verify_ssl = true

https://pypi.org/simple“ 真的太远了,直接去掉就好了。

其次解决写问题:

每次 pipenv update 或者 pipenv install 或者 pipenv sync 都要保持 PipfilePipfile.lock 对软件版本的追踪,所以就慢了。

既然我们知道 Pipfile.lock 主要用于迁移或者部署的时候,那么就没有必要再安装等过程中每次都维护此文件了。

方案一:

  • 1.切入虚拟环境,pipenv shell,然后使用虚拟环境中的 pip 来安装软件
  • 2.全部安装完毕了,再来一次同步 pipenv lock 或者 pipenv update (最终结果一样)

方法二:

  • 不必切入虚拟环境,直接 pipenv install --skip-lock 把该装的全部装完
  • pipenv lock

迁移或者部署

如果手上有 requirements.txt 这样的文件,需要 pip install -r 么?

其实不需要,pipenv install 创建虚拟环境的时候,它会检查当前目录,如果有这样的旧格式包文件,它自己就会进行转换(,然后进行安装)。

当然,最好还是先 pipenv install --skip-lock 装完,再生成 Pipfile.lock 文件。


CH-YK 2019-04-04 迁移代码库到 Github 遇到环境问题


文章目录
  1. 1. 本文简述
  2. 2. 哪个版本的 pip
  3. 3. 全局加速
  4. 4. pipenv 中的版本
  5. 5. 专治 pipenv 慢
  6. 6. 迁移或者部署
|