virturalenv
有些 python 的包之间的相互依赖程度不一样, 有可能我所需要使用的一个包依 赖于某个特定的包的一个版本, 而我所需要用的另一个包依赖于某个特定的包的 另一个版本, 这样的情况下如果都是用 pip 来安装 python 包, 可能就使得依 赖不合适. 所以, 我需要使得每个包都有自己独立的依赖环境, 每个包可以有一 个自己的虚拟环境, 即 virtualenv. 下面主要提及的是在 Linux 下面的操作, 可以使用 virtualenv 或者 virtualenv-3 创建 python2.7 或者 python3 环境.
创建环境
首先, 要建立一个文件夹, 用于保存一个独立的 python 环境. 比如说建立一个文件夹叫作 ENV.
$ mkdir ENV
然后在该文件夹起始一个独立的环境.
$ virtualenv ENV
New python executable in ENV/bin/python
Installing setuptools, pip, wheel...done.
可以看到在 ENV 文件夹下面创建了所必须的文件夹和文件或者文件链接. * bin: 用于保存独立环境下面的可执行文件, 其中有 activate 等启动镜像环 境所需要的脚本和 python 的链接等. * include: 用于保存独立环境下面所需要的头文件, 最开始只有一个文件夹 python2.7 是 python2.7 所需要的头文件所在的文件夹. * lib: 用于保存 python 相关的包. * lib64: 用于保存 64 位的 python 相关的包.
激活环境
在 Linux 的终端下去激活环境需要运行下面的脚本, 其会改变一些环境变量.
$ source ENV/bin/activate
(ENV)$
当环境激活之后, $PATH 的第一个路径就会变成 ENV/bin 的绝对路径. 而提示 符参数 $PS1 的前面会加上 "(ENV)". 如果直接从 ENV/bin 去运行程序, 则不 使用 activate 脚本去修改也可以.
关闭环境
如果想要把更改过的变量复原, 则使用 deactivate 命令.
(ENV)$ deactivate
$
移除环境
想要移除环境只需要将环境所在的文件夹删除.
(ENV)$ deactivate
$ rm -r /path/to/ENV
参数设置
如果想要添加别的搜索路径到一个环境中, 可以设置参数
--extra-search-dir
.
$ virtualenv --extra-search-dir=/path/to/other/dir ENV
Conda
除了 virtualenv 包外, 如果使用 [Anaconda]{https://www.continuum.io } Python 发行版,其中有 conda 作为 virtual environment 管理软件.
创建环境
创建环境可以使用下面的命令创建环境.
$ conda create -n envname python=x.x anaconda
conda
是 anaconda 管理软件的名称, create
说明创建环境.
-n envname
指定要创建的环境的名称为 envname.
python=x.x
指定环境中需要的 Python 的版本号.
anaconda
指定该环境中需要安装的包, 可以有多个,
例如如果是 pandas scipy sympy
则指定环境建立的时候安装这三个包,
也可以在环境建立完成后再另外安装所需要的包和软件.
激活环境
conda 环境的激活命令和 virtualenv 相似却不同. 主要是因为 conda 的 active 脚本的定义不同.
$ source activate envname
关闭环境
conda 环境的关闭也需要使用 source 命令
$ source deactivate
移除环境
$ conda remove --name envname --all
然后可以使用 conda info --env
来查看剩下的环境.
Conda 使用简介
conda 命令是 anaconda 中带有的管理应用, 环境和包的软件, 功能比 virtualenv要全面和强大的多。
conda help
: 显示conda命令的帮助文档.conda info
: 显示当前 anaconda 安装的情况, 包括系统, python 版本, 默认下载地址, 各种默认地址等.conda list
: 列出一个 conda 环境中的包.conda search
: 搜索 python 包并显示相应的信息.conda create
: 创建 conda 环境.conda install
: 安装软件包.conda update
: 更新软件包.conda upgrade
: 更新软件包, 同update
.conda remove
: 删除软件包.conda uninstall
: 删除软件包, 同uninstall
.conda config
: 配制 conda 环境, 修改 .condarc 文件.conda clean
: 删除没用的包或者缓存.
conda info 环境与包的信息
conda info
可以用来显示当前的环境信息.
用法如下:
conda info [-h] [--json] [--debug] [--verbose] [--offline] [-a] [-e]
[-l] [-s] [--root] [--unsafe-channels]
[packages [packages ...]]
如果 conda info 后面没有跟参数, 输出的是当前安装的 anaconda 整体的信息.
$ conda info
# platform : linux-64
# conda version : 4.3.34
# conda is private : False
# conda-env version : 4.3.34
# conda-build version : not installed
# python version : 3.6.1.final.0
# requests version : 2.18.4
# root environment : /gpfs/share/software/anaconda3 (read only)
# default environment : /gpfs/share/software/anaconda3
# envs directories : /gpfs/share/home/wolf/.conda/envs
# /gpfs/share/software/anaconda3/envs
# package cache : /gpfs/share/software/anaconda3/pkgs
# /gpfs/share/home/wolf/.conda/pkgs
# channel URLs : https://repo.continuum.io/pkgs/main/linux-64
# https://repo.continuum.io/pkgs/main/noarch
# https://repo.continuum.io/pkgs/free/linux-64
# https://repo.continuum.io/pkgs/free/noarch
# https://repo.continuum.io/pkgs/r/linux-64
# https://repo.continuum.io/pkgs/r/noarch
# https://repo.continuum.io/pkgs/pro/linux-64
# https://repo.continuum.io/pkgs/pro/noarch
# config file : None
# netrc file : None
# offline mode : False
# user-agent : conda/4.3.34 requests/2.18.4 CPython/3.6.1 Linux/3.10.0-514.el7.x86_64 Red Hat Enterprise Linux Server/7.3 glibc/2.17
# UID:GID : 66237:66338
conda info 后面可以跟包的名字, 则会输出相应的包的名字:
$ conda info pandas
# pandas 0.23.2 py37h04863e7_0
# ----------------------------
# file name : pandas-0.23.2-py37h04863e7_0.tar.bz2
# name : pandas
# version : 0.23.2
# build string: py37h04863e7_0
# build number: 0
# channel : defaults
# size : 10.0 MB
# arch : None
# license : BSD 3-clause
# md5 : 5317d6f21fcfd23255891d3df62cd678
# noarch : None
# platform : None
# subdir : linux-64
# timestamp : 1531088501052
# url : https://repo.continuum.io/pkgs/main/linux-64/pandas-0.23.2-py37h04863e7_0.tar.bz2
# dependencies:
# libgcc-ng >=7.2.0
# libstdcxx-ng >=7.2.0
# numpy >=1.11.3,<2.0a0
# python >=3.7,<3.8.0a0
# python-dateutil >=2.5.*
# pytz
上面的输出只有 0.23.2 版本的信息, 而实际上则会输出所有在库里的不同版本 的 pandas 包的信息.
conda info -a
是输出所有的信息, 包括 conda info
输出的信息, 和所有
的环境, 许可证, 系统信息等 (如环境变量等).
如果只是想知道当前所有的环境, 可以使用 -e
或者 --env
参数, 只列出
当前已有的环境:
$ conda info -e
# # conda environments:
# #
# root * /gpfs/share/software/anaconda3
如果只需要获取许可证的信息, 则可以使用 -l
参数:
$ conda info -l
# License directories:
# /gpfs/share/home/wolf/.continuum
# /gpfs/share/software/anaconda3/licenses
# License files (license*.txt):
# Package/feature end dates:
而如果只需要获取系统信息, 则应该使用 -s
参数.
conda list 列出环境中的包
conda list 可以列出环境的包, 用法如下:
conda list [-h] [-n ENVIRONMENT | -p PATH] [--json] [--debug]
[--verbose] [--show-channel-urls] [--no-show-channel-urls]
[-c] [-f] [--explicit] [--md5] [-e] [-r] [--no-pip]
[regex]
conda list [regex]
后面的 [regex]
是包名称的正则表达式, 如果没有指
定的话则默认列出所有的包.
$ conda list
# # packages in environment at /gpfs/share/software/anaconda3:
# #
# _license 1.1 py36_1
# alabaster 0.7.10 py36_0
# anaconda 4.4.0 np112py36_0
# ... (ignored many lines)
# zict 0.1.2 py36_0
# zlib 1.2.8 3
$ conda list tensor
# # packages in environment at /gpfs/share/software/anaconda3:
# #
# tensorflow-gpu 1.3.0 <pip>
# tensorflow-tensorboard 0.1.6 <pip>
正则表达式中 ^
表示起始, $
表示末尾, 所以要搜索以 'tensor' 开头的
包则最好写为 '^tensor' 要搜索以 'gpu' 结尾的包则应该写为 'gpu$'. 而如
果要搜索全名为pandas
的包则应该写为 ^pandas$
或者使用参数 -f
或
者 --full-name
.
$ conda list ^pandas$
$ conda list -f pandas
conda list 默认输出当前的环境中的包, 使用 -n ENVIRONMENT
或者
--name ENVIRONMENT
则可列出指定的 ENVIRONMENT 环境中的包.
$ conda list -n root ^lib
# # packages in environment at /gpfs/share/software/anaconda3:
# #
# libffi 3.2.1 1
# libgcc 4.8.5 2
# libgfortran 3.0.0 1
# libgpuarray 0.7.5 0 conda-forge
# libiconv 1.14 0
# libpng 1.6.27 0
# librosa 0.6.0 py36_0 conda-forge
# libsodium 1.0.10 0
# libtiff 4.0.6 3
# libtool 2.4.2 0
# libxcb 1.12 1
# libxml2 2.9.4 0
# libxslt 1.1.29 0
除了可以使用 -n
指定环境的名称外, 也可以使用 -p PATH
或者
--prefix PATH
指定环境的存储路径.
conda search 搜索包
conda search 和 conda list 的用法很相似:
conda search [-h] [-n ENVIRONMENT | -p PATH] [--canonical] [-f]
[--names-only] [--use-index-cache] [-o]
[--platform {win-32,win-64,osx-64,linux-32,linux-64}]
[--spec] [--reverse-dependency] [--offline] [-c CHANNEL]
[--override-channels] [--json] [--debug] [--verbose]
[--use-local] [-k]
[regex]
conda search 能够搜索没有安装的包, 而 conda list 主要搜索安装在环境中的包.
conda create 创建环境
conda 通过 conda create 命令来创建新的环境. 使用方法如下:
conda create [-h] [-y] [--dry-run] [-f] [--file FILE] [--no-deps] [-m]
[--use-index-cache] [--use-local] [--offline] [--no-pin]
[-c CHANNEL] [--override-channels]
[-n ENVIRONMENT | -p PATH] [-q] [--copy] [--clobber] [-k]
[--alt-hint] [--update-dependencies]
[--no-update-dependencies] [--channel-priority]
[--no-channel-priority] [--show-channel-urls]
[--no-show-channel-urls] [--json] [--debug] [--verbose]
[--clone ENV] [--no-default-packages]
[package_spec [package_spec ...]]
如果要创建新的环境ENV, 则可以使用:
$ conda create -n ENV
$ conda create --name ENV
$ conda create -p ENV/PATH
$ conda create --prefix ENV/PATH
Conda 没有对虚拟环境重命名的命令,所以需要通过重建一个新环境,然后删除 旧环境来达到重命名的目的。
$ conda create --name NEWNAME --clone OLDNAME
$ conda remove --name OLDNAME --all