赞
踩
For windows:
For mac:
Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候。为了解决这些问题,有不少发行版的Python,比如WinPython、Anaconda等,这些发行版将python和许多常用的package打包,方便pythoners直接使用,此外,还有virtualenv、pyenv等工具管理虚拟环境。
个人尝试了很多类似的发行版,最终选择了Anaconda,因为其强大而方便的包管理与环境管理的功能。该文主要介绍下Anaconda,对Anaconda的理解,并简要总结下相关的操作。
Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。Anaconda利用工具/命令conda
来进行package和environment的管理,并且已经包含了Python和相关的配套工具。
这里先解释下conda、anaconda这些概念的差别。conda
可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理。包管理与pip的使用类似,环境管理则允许用户方便地安装不同版本的python并可以快速切换。Anaconda则是一个打包的集合,里面预装好了conda、某个版本的python、众多packages、科学计算工具等等,所以也称为Python的一种发行版。其实还有Miniconda,顾名思义,它只包含最基本的内容——python与conda,以及相关的必须依赖项,对于空间要求严格的用户,Miniconda是一种选择。
进入下文之前,说明一下conda的设计理念——conda将几乎所有的工具、第三方包都当做package对待,甚至包括python和conda自身!因此,conda打破了包管理与环境管理的约束,能非常方便地安装各种版本python、各种package并方便地切换。
Anaconda的下载页参见官网下载,Linux、Mac、Windows均支持。
安装时,会发现有两个不同版本的Anaconda,分别对应Python 2.7和Python 3.5,两个版本其实除了这点区别外其他都一样。后面我们会看到,安装哪个版本并不本质,因为通过环境管理,我们可以很方便地切换运行时的Python版本。(由于我常用的Python是2.7和3.4,因此倾向于直接安装Python 2.7对应的Anaconda)
下载后直接按照说明安装即可。这里想提醒一点:尽量按照Anaconda默认的行为安装——不使用root权限,仅为个人安装,安装目录设置在个人主目录下(Windows就无所谓了)。这样的好处是,同一台机器上的不同用户完全可以安装、配置自己的Anaconda,不会互相影响。
对于Mac、Linux系统,Anaconda安装好后,实际上就是在主目录下多了个文件夹(~/anaconda
)而已,Windows会写入注册表。安装时,安装程序会把bin目录加入PATH(Linux/Mac写入~/.bashrc
,Windows添加到系统变量PATH),这些操作也完全可以自己完成。以Linux/Mac为例,安装完成后设置PATH的操作是
- # 将anaconda的bin目录加入PATH,根据版本不同,也可能是~/anaconda3/bin
- echo 'export PATH="~/anaconda2/bin:$PATH"' >> ~/.bashrc
- # 更新bashrc以立即生效
- source ~/.bashrc
配置好PATH后,可以通过which conda
或conda --version
命令检查是否正确。假如安装的是Python 2.7对应的版本,运行python --version
或python -V
可以得到Python 2.7.12 :: Anaconda 4.1.1 (64-bit),也说明该发行版默认的环境是Python 2.7。
注意:这里PATH相当于被append了!想改变PATH,必须重新登陆才能生效,以下方法可以简化工作:
如果修改了/etc/profile,那么编辑结束后执行source profile(source /etc/profile) 或 执行点命令 ./profile,PATH的值就会立即生效了。
这个方法的原理就是再执行一次/etc/profile shell脚本,注意如果用sh /etc/profile是不行的,因为sh是在子shell进程中执行的,即使PATH改变了也不会反应到当前环境中,但是source是在当前 shell进程中执行的,所以我们能看到PATH的改变。
这样你就学会Linux系统下修改环境变量PATH路径的方法。
Conda的环境管理功能允许我们同时安装若干不同版本的Python,并能自由切换。对于上述安装过程,假设我们采用的是Python 2.7对应的安装包,那么Python 2.7就是默认的环境(默认名字是root
,注意这个root不是超级管理员的意思)。
假设我们需要安装Python 3.4,此时,我们需要做的操作如下:
- # 创建一个名为python34的环境,指定Python版本是3.4(不用管是3.4.x,conda会为我们自动寻找3.4.x中的最新版本)
- conda create --name python34 python=3.4
-
- # 安装好后,使用activate激活某个环境
- activate python34 # for Windows
- source activate python34 # for Linux & Mac
- # 激活后,会发现terminal输入的地方多了python34的字样,实际上,此时系统做的事情就是把默认2.7环境从PATH中去除,再把3.4对应的命令加入PATH
-
- # 此时,再次输入
- python --version
- # 可以得到`Python 3.4.5 :: Anaconda 4.1.1 (64-bit)`,即系统已经切换到了3.4的环境
-
- # 如果想返回默认的python 2.7环境,运行
- deactivate python34 # for Windows
- source deactivate python34 # for Linux & Mac
-
- # 删除一个已有的环境
- conda remove --name python34 --all
用户安装的不同python环境都会被放在目录~/anaconda/envs
下,可以在命令中运行conda info -e
查看已安装的环境,当前被激活的环境会显示有一个星号或者括号。
说明:有些用户可能经常使用python 3.4环境,因此直接把~/anaconda/envs/python34
下面的bin或者Scripts加入PATH,去除anaconda对应的那个bin目录。这个办法,怎么说呢,也是可以的,但总觉得不是那么elegant……
如果直接按上面说的这么改PATH,你会发现conda命令又找不到了(当然找不到啦,因为conda在~/anaconda/bin
里呢),这时候怎么办呢?方法有二:1. 显式地给出conda的绝对地址 2. 在python34环境中也安装conda工具(推荐)。
conda config --set auto_activate_base false
Conda的包管理就比较好理解了,这部分功能与pip
类似。
例如,如果需要安装scipy:
- # 安装scipy
- conda install scipy
- # conda会从从远程搜索scipy的相关信息和依赖项目,对于python 3.4,conda会同时安装numpy和mkl(运算加速的库)
-
- # 查看已经安装的packages
- conda list
- # 最新版的conda是从site-packages文件夹中搜索已经安装的包,不依赖于pip,因此可以显示出通过各种方式安装的包
conda的一些常用操作如下:
- # 查看当前环境下已安装的包
- conda list
-
- # 查看某个指定环境的已安装包
- conda list -n python34
-
- # 查找package信息
- conda search numpy
-
- # 安装package
- conda install -n python34 numpy
- # 如果不用-n指定环境名称,则被安装在当前活跃环境
- # 也可以通过-c指定通过某个channel安装
-
- # 更新package
- conda update -n python34 numpy
-
- # 删除package
- conda remove -n python34 numpy
前面已经提到,conda将conda、python等都视为package,因此,完全可以使用conda来管理conda和python的版本,例如
- # 更新conda,保持conda最新
- conda update conda
-
- # 更新anaconda
- conda update anaconda
-
- # 更新python
- conda update python
- # 假设当前环境是python 3.4, conda会将python升级为3.4.x系列的当前最新版本
补充:如果创建新的python环境,比如3.4,运行conda create -n python34 python=3.4
之后,conda仅安装python 3.4相关的必须项,如python, pip等,如果希望该环境像默认环境那样,安装anaconda集合包,只需要:
- # 在当前环境下安装anaconda包集合
- conda install anaconda
-
- # 结合创建环境的命令,以上操作可以合并为
- conda create -n python34 python=3.4 anaconda
- # 也可以不用全部安装,根据需求安装自己需要的package即可
(python35) λ conda search tensorflow
Loading channels: done
# Name Version Build Channel
tensorflow 1.1.0 np112py35_0 pkgs/free
tensorflow 1.1.0 np112py36_0 pkgs/free
tensorflow 1.2.1 py35_0 pkgs/free
tensorflow 1.2.1 py36_0 pkgs/free
tensorflow 1.7.0 0 pkgs/main
tensorflow 1.7.1 0 pkgs/main
tensorflow 1.8.0 0 pkgs/main
tensorflow 1.9.0 eigen_py35hb0e21f4_1 pkgs/main
tensorflow 1.9.0 eigen_py36h0b764b7_1 pkgs/main
tensorflow 1.9.0 gpu_py35h0075c17_1 pkgs/main
tensorflow 1.9.0 gpu_py36hfdee9c2_1 pkgs/main
tensorflow 1.10.0 eigen_py35h38c8211_0 pkgs/main
tensorflow 1.10.0 eigen_py36h849fbd8_0 pkgs/main
tensorflow 1.10.0 gpu_py35ha5d5ef7_0 pkgs/main
tensorflow 1.10.0 gpu_py36h3514669_0 pkgs/main
tensorflow 1.10.0 mkl_py35h4a0f5c2_0 pkgs/main
tensorflow 1.10.0 mkl_py36hb361250_0 pkgs/main
tensorflow 1.11.0 eigen_py36h346fd36_0 pkgs/main
tensorflow 1.11.0 gpu_py36h5dc63e2_0 pkgs/main
tensorflow 1.11.0 mkl_py36h41bbc20_0 pkgs/main
tensorflow 1.12.0 eigen_py36h67ac661_0 pkgs/main
tensorflow 1.12.0 gpu_py36ha5f9131_0 pkgs/main
tensorflow 1.12.0 mkl_py36h4f00353_0 pkgs/main
(python35) λ conda install tensorflow=1.12.0=mkl_py36h4f00353_0
conda info --envs
where python
如果需要安装很多packages,你会发现conda下载的速度经常很慢,因为Anaconda.org的服务器在国外。所幸的是,清华TUNA镜像源有Anaconda仓库的镜像,我们将其加入conda的配置即可:
- # 添加Anaconda的TUNA镜像
- conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- # TUNA的help中镜像地址加有引号,需要去掉
-
- # 设置搜索时显示通道地址
- conda config --set show_channel_urls yes
执行完上述命令后,会生成~/.condarc
(Linux/Mac)或C:\Users\USER_NAME\.condarc
文件,记录着我们对conda的配置,直接手动创建、编辑该文件是相同的效果。
设置python 默认版本:
First, make sure you have the latest version of conda by running
conda update conda
Then run
conda update --all python=3.5
This will attempt to update all your packages in your root environment to Python 3 versions. If it is not possible (e.g., because some package is not built for Python 3), it will give you an error message indicating which package(s) caused the issue.
If you installed packages with pip, you'll have to reinstall them.
- conda list -e > req.txt
- conda create -n new environment --file req.txt
当然可以。 pip没有内置的环境支持,而是依赖于virtualenv或venv 等其他工具来创建隔离环境。因此,一个推荐的做法是用conda来隔离环境,例如conda create --name python35 python=3.5会在
/opt/anaconda3/envs/python35/bin的环境下有pip的二进制,因此可以在conda activate后随心所欲的pip install。而且实测pip install后的包也是会出现在conda list结果里的。
首先得保证用anaconda已经create了某个虚拟环境。然后去Pycharm->Preferences->Python Interpreter里指定正确的二进制路径!
Conda和pip通常被认为几乎完全相同。虽然这两个工具的某些功能重叠,但它们设计用于不同的目的。 Pip是Python Packaging Authority推荐的用于从Python Package Index安装包的工具。 Pip安装打包为wheels或源代码分发的Python软件。后者可能要求系统安装兼容的编译器和库。
Conda是跨平台的包和环境管理器,可以安装和管理来自Anaconda repository以 Anaconda Cloud的conda包。 Conda包是二进制文件,徐需要使用编译器来安装它们。另外,conda包不仅限于Python软件。它们还可能包含C或C ++库,R包或任何其他软件。
这是conda和pip之间的关键区别。 Pip安装Python包,而conda安装包可能包含用任何语言编写的软件的包。在使用pip之前,必须通过系统包管理器或下载并运行安装程序来安装Python解释器。而Conda可以直接安装Python包以及Python解释器。
另一个区别是conda能够创建可以包含不同版本的Python或其他软件包的隔离环境。在使用数据科学工具时,这非常有用,因为不同的工具可能包含冲突的要求,这些要求可能会阻止它们全部安装到单个环境中。 Pip没有内置的环境支持,而是依赖于virtualenv或venv 等其他工具来创建隔离环境。 pipenv,poetry和hatch wrap pip和virtualenv等工具提供了统一的方法来处理这些环境。
Pip和conda在如何实现环境中的依赖关系方面也有所不同。安装包时,pip会在递归的串行循环中安装依赖项。没有努力确保同时满足所有包的依赖性。如果较早安装的软件包与稍后安装的软件包具有不兼容的依赖性版本,则可能导致破坏的环境。conda使用可确保满足环境中安装的所有包的所有要求。此检查可能需要额外的时间,但有助于防止创建破坏的环境,前期关于依赖关系包的元数据是正确的。
考虑到conda和pip之间的相似性,有些人试图将这些工具结合起来创建数据科学环境也就不足为奇了。将pip与conda结合的主要原因是有些包只能通过pip安装。 Anaconda创酷提供超过1,500个软件包,包括最流行的数据科学,机器学习和AI框架。这些,以及包括conda-forge和bioconda在内的数据通过Anaconda云提供的数千个附加软件包,可以使用conda进行安装。尽管有大量的软件包,但与PyPI上提供的150,000多个软件包相比,它仍然很小。有时候需要的包没有conda包,但在PyPI上有,可以用pip安装。
关于Python虚拟环境管理,曾经做为一名新人一直不以为意,心想反正都是我要用的库,全安装在一起,要用直接导入,多好。可是,后来,懂得越来越多的我,不仅流下了悔恨了泪水呀,这一次,关于Python虚拟环境管理的方法一网打尽,喜欢哪种方式,大家自己选吧。再说一次虚拟环境很重要。
pip install virtualenv
- virtualenv [虚拟环境名称]
- virtualenv venv
-
- #如果不想使用系统的包,加上–no-site-packeages参数
- virtualenv --no-site-packages 创建路径名
linux:
- $ cd venv
- $ source ./bin/activate
Windows 10:
- > cd venv
- > .\Scripts\activate.bat
linux:
$ deactivate
Windows 10:
> .\Scripts\deactivate.bat
没有使用virtualenvwrapper前,可以直接删除venv文件夹来删除环境
进入环境后,一切操作和正常使用python一样 安装包使用pip install 包
Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做: - 将所有虚拟环境整合在一个目录下 - 管理(新增,删除,复制)虚拟环境 - 快速切换虚拟环境
- # on Windows
- pip install virtualenvwrapper-win
- # on macOS / Linux
- pip install --user virtualenvwrapper
- # then make Bash load virtualenvwrapper automatically
- echo "source virtualenvwrapper.sh" >> ~/.bashrc
- source ~/.bashrc
- # on macOS/Linux:
- mkvirtualenv --python=python3.6 venv
- # on Windows
- mkvirtualenv --python=python3 venv
- workon #列出虚拟环境列表
- workon [venv] #切换环境
deactivate
rmvirtualenv venv
- pip freeze #查看当前安装库版本
- #创建 requirements.txt 文件,其中包含了当前环境中所有包及 各自的版本的简单列表
- #保持部署相同,一键安装所有包
- pip install -r requirements.txt
- pip freeze > requirements.txt
- lsvirtualenv #列举所有的环境
- cdvirtualenv #导航到当前激活的虚拟环境的目录中,相当于pushd 目录
- cdsitepackages # 和上面的类似,直接进入到 site-packages 目录
- lssitepackages #显示 site-packages 目录中的内容
conda可以直接创建不同python版本的虚拟环境。前面讲的virtualenv只是指定创建不同python版本的虚拟环境,前提是你的电脑上已经安装了不同版本的python,与conda相比没有conda灵活。
下载anaconda安装的python直接可以使用conda工具
创建不同的python版本,直接写出版本号就好了,还可以同时安装想要的库。
- # Python 2.7
- $ conda create -n venv python=2.7
-
- # Python 3.4
- $ conda create -n venv python=3.4
-
- # Python 3.5
- $ conda create -n venv python=3.5
- #on windows
- activate venv
- #on linux
- source activate venv
- #on windows
- deactivate
- #on linux
- source deactivate
- # 删除一个已有环境
- conda remove --name venv --all
- # 列出系统存在虚拟环境
- conda info -e
- conda env list
-
- # 查看当前环境下已安装的包
- conda list
-
- # 查看某个指定环境的已安装包
- conda list -n venv
-
- # 查找package信息
- conda search numpy
-
- # 安装package
- conda install -n venv numpy
- # 如果不用-n指定环境名称,则被安装在当前激活环境
- # 也可以通过-c指定通过某个channel安装
-
- # 更新package
- conda update -n venv numpy
-
- # 删除package
- conda remove -n venv numpy
pipenv是Python官方推荐的包管理工具。 它综合了 virtualenv , pip 和 pyenv 三者的功能。能够自动为项目创建和管理虚拟环境。如果你使用过requests库,就一定会爱上这个库,因为是同一个大神出品。 pipenv使用 Pipfile 和 Pipfile.lock 来管理依赖包,并且在使用pipenv添加或删除包时,自动维护 Pipfile 文件,同时生成 Pipfile.lock 来锁定安装包的版本和依赖信息,避免构建错误。相比pip需要手动维护requirements.txt 中的安装包和版本,具有很大的进步。
pip install pipenv
- $ cd myproject
- $ pipenv install # 创建环境
- $ pipenv install requests # 或者直接安装库
如果不存在pipfile,会生成一个pipfile,并且如果有的库添加会自动编辑该文件,不会我们手动更新requirements.txt文件了。
- $ pipenv shell
- $ python --version
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。