python 环境管理方法 (整理自互联网)

需求分析

  • 不同的工程 依赖 不同版本的库
    例如:应用A需要 TensorFlow1.14,而应用B需要 TensorFlow2.x
  • 不想让物理环境里充斥各种各样的库,引发未来的依赖灾难

解决思路

  • 对于不同的工程使用不同的虚拟环境,保持开发环境以及宿主环境的清洁
  • 每个应用可能需要各自拥有一套“独立”的Python运行环境

解决方案

基本常识

以anaconda为例,讲解各种目录

./Lib

存放自带python库

./Lib/site-packages

存放pip3 install 后的各种第三方库,

导出当前python环境的包

pip freeze > requirements.txt

virtualenv

  • 在系统中建立多个不同并且相互不干扰的虚拟环境
  • 用来为一个应用创建一套“隔离”的Python运行环境
  • 轻量级第三方虚拟环境管理工具,不像Anaconda大小达上百M,virtualenv大小只有10M左右

安装&&配置

# 下载pip的包 v20.0.5
$ pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
# 升级pip工具
$ pip3 install --upgrade pip

基本参数

usage: virtualenv [--version] [--with-traceback] [-v | -q] [--discovery {builtin}] [-p py] [--creator {builtin,cpython3-win,venv}] [--seeder {app-data,pip}] [--no-seed] [--activators comma_separated_list] [--clear] [--system-site-packages]
[--symlinks | --copies] [--download | --no-download] [--extra-search-dir d [d ...]] [--pip version] [--setuptools version] [--wheel version] [--no-pip] [--no-setuptools] [--no-wheel] [--clear-app-data] [--symlink-app-data]
[--prompt prompt] [-h]
dest

-p <python_exe> # 创建python的拷贝

创建环境

首先创建目录

# 创建目录
$ mkdir myproject
$ cd myproject/

各类创建环境方法

# 创建独立的python环境,命名为venv
$ virtualenv venv

会在当前的目录中创建一个文件夹venv,包含:

  • python可执行文件,在 /Scripts
  • pip库的一份拷贝,在 /Lib/site-packages

这样就可以安装其他包,环境名字可以是任意的

# 指定python版本
# 只能使用本机存在的python版本创建虚拟环境
virtualenv -p <py安装路径> <env_name>

Python3.3以上的版本通过venv模块原生支持虚拟环境

# 当前目录创建
python -m evnv .
# 当前目录指定文件夹名
python -m evnv <env_name>

注意:

  • 不需要加–no-site-packages
    * 最新的virtualenv不加–no-site-packages也不会读取系统包
    * 高版本弃用该选项,会直接报错(如 20.0.5)
  • 虚拟环境就是一个文件夹
    * 如果要删除,直接删除文件夹(退出该虚拟环境)

激活/进入 环境

venv\Scripts\activate.bat

原理:修改相关环境变量,让命令python和pip均指向当前的virtualenv环境

退出环境

.\venv\Scripts\deactivate.bat

参考:Python 虚拟环境 Virtualenv 分别在 Windows 和 Linux 上的安装和使用

virtualenvwrapper

virtualenv缺点

  • 每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate
  • 需要记住每个虚拟环境所在的目录

为了更简便的切换和管理virtualenv环境,可以借助virtualenvwrapper扩展包,统一管理虚拟环境的目录,并且省去了source的步骤

安装

pip install virtualenvwrapper-win

WORKON_HOME默认的路径是 %USERPROFILE%\Envs

相关命令

# 创建虚拟环境
mkvirtualenv new_env
# 使用虚拟环境
workon new_env
# 退出虚拟环境
deactivate
# 删除虚拟环境
rmvirtualenv new_env
# 查看所有虚拟环境
lsvirtualenv

更多参考:https://www.cnblogs.com/pyyu/p/9015317.html

pipenv

  • Pipenv 是 Python 项目的依赖管理器。
  • 如果您熟悉 Node.js 的 npm 或 Ruby 的 bundler,那么它们在思路上与这些工具类似。
  • 尽管 pip 可以安装 Python 包, 但仍推荐使用 Pipenv,因为它是一种更高级的工具,可简化依赖关系管理的常见使用情况。

使用方法

创建项目目录,之后有 pipenv 安装包

pipenv install xxx

运行脚本

pipenv run python xx,py

生成新的shell

pipenv shell

conda

如果你需要的包要求不同版本的Python,你无需切换到不同的环境,因为conda同样是一个环境管理器。仅需要几条命令,你可以创建一个完全独立的环境来运行不同的Python版本,同时继续在你常规的环境中使用你常用的Python版本。 ——conda官方网站

vs pip

  • conda:比较方便地在不同环境之间进行切换,环境管理较为简单。
  • conda结合了pip和virtualenv的功能。
  • conda 本身是一个完整的程序,虽然是被用来管理 python 环境,但它本身不是 python 的一个包,也不依赖 python。
  • pip 或者 pipenv 本身是 python 的一个工具包,必须先安装 python 才能使用

环境管理

命令参考:
Managing environments

很多跟在--后边常用的命令选项,可以被略写为一个短线加命令首字母。所以--name选项和-n的作用是一样的。通过conda -h或conda –-help来看大量的缩写。

查看环境
# 查看当前环境列表, 处于激活状态的环境旁有 * 的字样,自身环境为 base
conda env list
conda info -e
conda info --envs
# 导出环境yaml, 类似于 pip freeze
conda env export > environment.yaml
创建环境
# 新建名为 newenv 的环境
# 创建跟当前系统python相同版本的 环境
conda create --name newenv
# 指定新环境中的 python 版本为 3.6
# 只带有最基本的包,是一个纯净的环境
conda create --name newenv python=3.6
# 带包
conda create -n myenv python=3.6 scipy=0.15.0 astroid babel

不想带默认包 --no-default-packages

conda create --no-default-packages -n myenv python

以 base 环境为基准,复制一个新环境

# 起名为 newenv。这样很多的包就可以不必重新安装了
conda create -n newenv --clone base

基于配置文件创建

conda env create -f .../environment.yaml
删除环境
# 删除一个已有的环境
conda remove --name newenv --all
环境切换

conda 4.6+

# 进入指定环境
conda activate newenv
# 在环境中,输入此命令退出
conda deactivate
  • 解决powershell无法激活问题
    Power Shell并不兼容anaconda的虚拟环境!
    调出 PowerShell 管理员模式
# 安装PSCondaEnvs包
conda install -n root -c pscondaenvs pscondaenvs
# 更改PowerShell 的安全策略
Set-ExecutionPolicy RemoteSigned
# 激活环境,需要去掉原命令中开头的conda
activate 环境名
# 退出环境
deactivate

经过上述设置后,一启动powershell就自动激活base环境,如果不想,则

# 取消自动激活 base
conda config --set auto_activate_base false
# 自动激活 base
conda config --set auto_activate_base true

包管理

查看当前源仓库地址

conda config --show channels

指定国内源

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
conda list # 查看已经安装的包
conda update conda # 升级conda自身
conda search requests # 查询某个包
conda install requests # 安装新包
conda install -n test requests # 将包安装到指定环境
conda update --all # 更新所有包
conda update requests # 升级包
conda remove requests # 移除包
conda remove -n test requests # 从指定环境中移除包
  • conda 不提供检查可更新的包的命令,update 所有包时会有提示,列出所有可更新的包,并让用户确认是否全部更新。
  • conda install 安装包的远程仓库与 pip 的不一样
    • 有一些包不一定能使用 conda 安装,比如 tushare
    • 这时在环境中使用 pip install 即可
  • 在 conda 中使用 pip 安装的包
    • 不归属于 conda 管理,conda 也不会识别出来
    • 必须进入环境后用 pip 命令才能看见

本节参考:
Getting started with conda
使用conda管理python的虚拟环境
解决Win10 PowerShell无法激活Anaconda环境的问题
anaconda无法使用activate激活环境
Conda 4.6 Release
Tensorflow 1.X 与 2.X版本共存的解决方案

posted @ 2020-08-02 20:23  IT小小鸟52  阅读(451)  评论(0)    收藏  举报