‘壹’ python 包管理工具
Python之所以受欢迎不光是因为它简单易学,更重要的是它有成千上万的宝藏库。这些库相当于是已经集成好的工具,只要安装就能在Python里使用。它们可以处理各式各样的问题,无需你再造轮子,而且随着社区的不断更新维护,有些库越来越强大,几乎能媲美企业级应用。那么这些工具库怎么下载安装呢?它们被放在一个统一的“仓库”里,名叫PyPi(Python Package Index),所有的库安装都是从这里调度。有了仓库之后,还需要有管理员,pip就是这样一个角色。
pip 是 Python 中的标准库管理器,这意味着它是一个工具,用它可以来管理 Python 标准库中其他的包,允许你安装和管理不属于 Python 标准库的其它软件包,其提供了对 Python 包的查找、下载、安装、卸载等功能。总的来说,pip的Python第三方库的大管家,搞懂它,会让你省很多事。从Python 3 >= Python 3.4 、Python2 >= Python2.7.9 版本开始,pip默认包含在Python的安装程序中,在安装Python时将会自动被安装,省事方便。
Python 的安装器中自带了 pip,所以你可以直接使用它,除非你安装的是更早版本的 Python。你可以通过以下命令来判断是否已安装:
如果你的 Python 环境没有安装 pip,则可以使用以下方法来手动安装。pip 安装文件下载: pypi.org/project/pip…
pip提供的命令不多,但是都很实用
pip命令默认使用的是国外的pypi镜像(pypi.python.org),安装慢不说,有时甚至会导致出现超时等网络问题,有时候为了安装一个包,失败重试安装好几次都不一定成功。所以,使用国内的pypi镜像,亦即 切换 pip 源 ,这样速度上更有保证,不失为一种加速pip安装第三方包的好方法。常用的镜像站有阿里云、清华大学等。其中清华大学开源软件镜像站是每 5 分钟同步一次的,比较推荐使用。阿里云镜像站的速度也非常快,这也是我现在在使用的。
切换切换 pip 源可以是临时性的,也可以设置为默认。临时性的,就是在安装包时,通过pip命令的 -i 选项指定镜像源即可。例如,临时使用阿里云镜像站作为 pip 源,可以是这样安装:
如果每次安装时都想要通过镜像源来安装,上面的办法不免有些麻烦。我们可以修改pip的配置文件,将镜像源写入到 pip 配置文件中。 对于linux系统 ,修改 ~/.pip/pip.conf 文件 (没有就创建一个文件夹及文件,文件夹要加“.”,表示是隐藏文件夹):
然后在文件中保存如下内容:
对于windows系统 ,在C:Users文件夹下的用户目录(例如如果当前用户是Administrator则是C:UsersAdministrator)下创建pip文件夹,然后再在此文件夹下创建pip.ini文件,在文件中写入一下内容:
配置完成后再通过 pip config list 查看pip配置。
我们经常会遇到这样的开发需求,比如你手头有多个开发项目,其中项目A要求用python3.7,项目B需要用python3.6,有要求项目A和项目B依赖包相互独立,互不干扰。为了满足这样的开发需求,我们需要在自己的电脑上安装多个Python版本,并且项目之间进行环境隔离。因此,我们要想运行这些项目,在工作电脑上就要安装不同版本的Python。 pyenv 是Python版本管理工具,通过系统修改环境变量来实现Python不同版本的切换,利用它可以在同一台电脑上安装多个版本的Python,设置目录级别的Python,还能创建和管理vitual python enviroments。而且所有的设置都是用户级别的操作,不需要sudo命令。
首先安装pyenv,如果你是Mac电脑,那么推荐使用Homebrew来安装。
要想升级pyenv,则可以执行:
pyenv安装完成后,需要将$HOME/.pyenv/bin添加到PATH变量前面,这一步非常关键。
也可以采用手动安装的方式,将pyenv检出到你想安装的目录。
添加环境变量,将PYENV_ROOT 指向 pyenv 检出的根目录,并向 $PATH 添加 $PYENV_ROOT/bin 以提供访问 pyenv命令的路径。这里的 shell 配置文件(~/.bash_profile)依不同系统而需作修改,如果使用 Zsh 则需要相应的配置 ~/.zshrc
在使用 pyenv 之后使用 pip 安装的第三方模块会自动安装到当前使用 python 版本下,不会和系统模块产生冲突。使用 pip 安装模块之后,如果没有生效,记得使用 pyenv rehash 来更新。
安装完pyenv,可以安装Python,首先查看可安装的Python版本:pyenv install -l,接下来开始安装Python
执行命令 pyenv versions 查看安装结果。
可以看到,已经成功安装了Python,安装的位置在 /Users/dllwh/.pyenv。
可以看到,3.9.9 前面有一个星号,说明成功切换到了 3.9.9 版本,可以执行一下python来验证。
Pipenv 是 Python 官方推荐的包管理工具,它综合了 virtualenv、pip 和 pyenv 三者的功能,你可以使用 pipenv 这一个工具来安装、卸载、跟踪和记录依赖性,并创建、使用和组织你的虚拟环境。
如果你是Mac电脑,那么推荐使用Homebrew来安装和升级pipenv:
也可以通过pip来安装和升级pipenv:
进入到项目目录中,通过下面的指令为项目创建虚拟环境。
上面的操作,给pipenv_demo这个项目初始化了一个 Python 3.9.9 的虚拟环境,并在项目录下生成一个项目依赖包文件 Pipefile。如果系统中没有 3.9.8 版本的Python,pipenv 会调用 pyenv 来安装对应的 Python 的版本。默认地,虚拟环境会创建在 ~/.local/share/virtualenvs目录里面。我们也可以通过 pipenv --venv查看项目的虚拟环境目录。可以通过 pipenv --rm 删除虚拟环境。
如果想更改虚拟环境的目录,可以在 .bashrc 或 .bash_profile 中,设置环境变量WORKON_HOME,指定虚拟环境的目录所在位置,比如想将虚拟环境放到~/.venvs目录,则可以执行下面的命令。
如果希望在项目目录下创建虚拟环境目录(.venv),需要在 .bashrc 或 .bash_profile 中配置环境变量PIPENV_VENV_IN_PROJECT:
pipenv使用 Pipfile 和 Pipfile.lock 来管理依赖包,并且在使用pipenv添加或删除包时,自动维护 Pipfile 文件,同时生成 Pipfile.lock 来锁定安装包的版本和依赖信息。相比pip需要手动维护requirements.txt 中的安装包和版本,具有很大的进步。
为项目安装依赖包到虚拟环境中,使每个项目拥有相互独立的依赖包,是非常不错的Python的开发实践。安装依赖包到虚拟环境中的方法:
执行完上面的命令后,检查一下是否安装成功:
观察项目的根目录下,又多了一个 Pipfile.lock 文件。这两个文件记录了此项目的依赖包,这两个文件的区别是 Pipfile 中安装的包不包含包的具体版本号,而Pipfile.lock 是包含包的具体的版本号的。如果不想产生 Pipfile.lock 文件,在安装依赖包的时候,加上 –skip-lock 选项即可。
在使用pipenv的时候,常常会安装过程比较慢,这个是因为pipenv创建的 Pipfile 中默认的Pypi源是python官方的 pypi.python.org/simple。我们国内…
为了避免每次都要指定–pypi-mirror,我一般会在创建好Pipfile以后,将文件中 source 块下的 url 字段,设置为国内的 pypi 源,我推荐的是清华的Pypi源或者阿里源,具体设置如下:
如果是要删除虚拟环境中的第三方包,执行:
用git管理项目时候,要把Pipfile和Pipfile.lock加入版本跟踪。这样clone了这个项目的同学,只需要执行:
就可以安装所有的Pipfile中 [packages]部分列出来的包了,并且自动为项目在自己电脑上创建了虚拟环境。
上面的方法都是安装Pipfile中列出来的第三方包的最新版本,如果是想安装Pipfile.lock中固定版本的第三方依赖包,需要执行:
如果项目之前使用requirements.txt来管理依赖的,那么使用pipenv安装所有依赖可以采用类似pip的方法:
虚拟环境创建好了之后,就可以在里面进行开发了。如果在命令行下开发,则在项目目录下执行 pipenv shell ,就进入到了虚拟环境中,在这个环境中,已经包含安装过的所有依赖包了,接下来就可以利用这些依赖包进行开发工作了。如果是用Pycharm进行开发,就更简单了,直接用Pycharm打开项目即可。可以从Pycharm中的左侧导航栏里面看到External Libraries显示的是虚拟环境中的Python解释器了。
在虚拟环境中执行开发好的程序,有两种方式,一种是前面提到的先执行pipenv shell进入到虚拟环境后,再执行python程序;另一种方式,则是执行pyenv run,比如在虚拟环境中执行基于pytest框架编写的测试用例,只需要执行下面的命令即可:
作者:独泪了无痕
链接:https://juejin.cn/post/7063699409703272485
‘贰’ 如何在vs2017管理anaconda的python包
使用conda
首先我们将要确认你已经安装好了conda
配置环境
下一步我们将通过创建几个环境来展示conda的环境管理功能。使你更加轻松的了解关于环境的一切。我们将学习如何确认你在哪个环境中,以及如何做复制一个环境作为备份。
测试Python
然后我们将检查哪一个版本的python可以被安装,以及安装另一个版本的python,还有在两个版本的python之间的切换。
检查包
1)我们将罗列出安装在我们电脑上的包
2)浏览可用的包
3)使用conda install命令来来安装以及移除一些包
4)对于一些不能使用conda安装的包,我们将在Anaconda.org网站上搜索
5)对于那些在其它位置的包,我们将使用pip命令来实现安装。我们还会安装一个可以免费试用30天的商业包IOPro
移除包、环境以及conda
管理conda:
检查conda版本:
1
1
升级当前版本的conda
1
1
管理环境
创建并激活一个环境
使用”conda create”命令,后边跟上你希望用来称呼它的任何名字:
1
1
这条命令将会给Biopython创建一个新的环境,位置在Anaconda安装文件的/envs/snowflakes
激活这个新环境
Linux,OS X:
1
1
Windows:
1
1
小技巧:
新的开发环境会被默认安装在你conda目录下的envs文件目录下。你可以指定一个其他的路径;去通过
conda create -h了解更多信息吧。
小技巧:
如果我们没有指定安装python的版本,conda会安装我们最初安装conda时所装的那个版本的python。
列出所有的环境
1
1
* 注意:conda有时也会在目前活动的环境前边加上号。**
切换到另一个环境(activate/deactivate)
为了切换到另一个环境,键入下列命令以及所需环境的名字。
Linux,OS X:
1
1
Windows:
1
1
如果要从你当前工作环境的路径切换到系统根目录时,键入:
- Linux,OS X:
1
1
Windows:
1
1
复制一个环境
通过克隆来复制一个环境。这儿将通过克隆snowfllakes来创建一个称为flowers的副本。
1
1
通过
1
1
来检查环境
删除一个环境
如果你不想要这个名为flowers的环境,就按照如下方法移除该环境:
1
2
1
2
管理Python
安装一个不同版本的python
现在我们假设你需要python3来编译程序,但是你不想覆盖掉你的python2.7来升级,你可以创建并激活一个名为snakes的环境,并通过下面的命令来安装最新版本的python3:
1
1
检查新的环境中的python版本
确保snakes环境中运行的是python3:
1
1
使用不同版本的python
为了使用不同版本的python,你可以切换环境,通过简单的激活它就可以,让我们看看如何返回默认版本
Linux,OS X:
1
1
Windows:
1
1
注销该环境
当你完成了在snowflakes环境中的工作室,注销掉该环境并转换你的路径到先前的状态:
Linux,OS X:
1
1
Windows:
1
1
管理包
conda安装和管理python包非常方便,可以在指定的python环境中安装包,且自动安装所需要的依赖包,避免了很多拓展包冲突兼容问题。
不建议使用easy_install安装包。大部分包都可以使用conda安装,无法使用conda和anaconda.org安装的包可以通过pip命令安装
使用合适的源可以提升安装的速度
查看已安装包
使用这条命令来查看哪个版本的python或其他程序安装在了该环境中,或者确保某些包已经被安装了或被删除了。在你的终端窗口中输入:
1
1
向指定环境中安装包
使用Conda命令安装包
我们将在指定环境中安装这个Beautiful Soup包,有两种方式:
- 直接指定-n 指定安装环境的名字
1
1
* 提示:你必须告诉conda你要安装环境的名字(-n bunies)否则它将会被安装到当前环境中。*
激活bunnies环境,再使用conda install命令。
1
2
1
2
2.从Anaconda.org安装一个包
如果一个包不能使用conda安装,我们接下来将在Anaconda.org网站查找。
在浏览器中,去Anaconda资源官网。我们查找一个叫“bottleneck”的包,所以在左上角的叫“Search Anaconda Cloud”搜索框中输入“bottleneck”并点击search按钮。
Anaconda.org上会有超过一打的bottleneck包的版本可用,但是我们想要那个被下载最频繁的版本。所以你可以通过下载量来排序,通过点击Download栏。
点击包的名字来选择最常被下载的包。它会链接到Anaconda.org详情页显示下载的具体命令:
1
1
3. 通过pip命令来安装包
对于那些无法通过conda安装或者从Anaconda.org获得的包,我们通常可以用pip命令来安装包。
可以上pypi网
站查询要安装的包,查好以后输入pip install命令就可以安装这个包了。
我们激活想要放置程序的python环境,然后通过pip安装一个叫“See”的程序。
Linux,OS X:
1
1
Windows:
1
1
所有平台:
1
1
提示:pip只是一个包管理器,所以它不能为你管理环境。pip甚至不能升级python,因为它不像conda一样把python当做包来处理。但是它可以安装一些conda安装不了的包。
4. 文件安装
如果真的遇到走投无路的境地,也就是上面这些方法通通不管用!!!那就只能下载源码安装了,比如exe文件(双击安装)或者whl文件(pip安装)等等。还有在github上找到源码,使用python setup.py install命令安装
Tips:不建议使用setuptools 的easy_install,非常不方便管理,也不好卸载
有些时候,Anaconda和pip下载的速度慢,访问不稳定怎么办?换个源呗,清华大学的源就很不错,当然啦,你可以自己google一些好用的源
对于包管理工具,了解这么多就够了,比较喜欢追根究底的童鞋可以移步包管理工具解惑
**提示:
在任何时候你可以通过在命令后边跟上-help来获得该命令的完整文档。
**
eg:
1
1
* 小技巧:*
很多跟在–后边常用的命令选项,可以被略写为一个短线加命令首字母。所以–name选项和-n的作用是一样的。通过conda -h或conda –-help来看大量的缩写。
移除包、环境、或者conda
如果你愿意的话。让我们通过移除一个或多个试验包、环境以及conda来结束这次测试指导。
移除包
假设你决定不再使用商业包IOPro。你可以在bunnies环境中移除它。
1
1
移除环境
我们不再需要snakes环境了,所以输入以下命令:
1
1
删除conda
Linux,OS X:
移除Anaconda 或 Miniconda 安装文件夹
1
1
OR
1
1
Windows:
去控制面板,点击“添加或删除程序”,选择“Python2.7(Anaconda)”或“Python2.7(Miniconda)”并点击删除程序。
‘叁’ python包管理工具pip download详解
pip download的用法与install相似,只不过download只下载安装包并不安装到系统内,这里我们只讲述以下几个选项:--requirement、--no-deps、--dest。
这个选项指定下载文件中包含的安装包,假如有个文件download.txt,内容如下:
当我执行以下命令时:
就会下载文件内的安装包及其依赖,最后一行输出如下:
这个选项告诉pip只下载指定的安装包即可,无需下载依赖,如果我执行以下命令:
就只会下载文件内容中的3个安装包,最后一行输出如下:
在我们不指定这个选项时,pip默认把安装包保存在当前工作目录,我们可以通过这个选项指定安装包的保存位置,如下命令:
就会把安装包保存在当前目录下的downloads子目录中了。
‘肆’ python包管理工具pip install详解
pip install用来安装python第三方库,使用时有比较多的选项蔽穗仔祥,这里我们选几个常用的来讲解下,包括以下几个: --requirement,--no-deps,--target,--user,--upgrade,--force-reinstall,--ignore-installed。
这个选项允许我们指定一个文件,pip会安装此文件里指定的第三方库,比如我的电脑上有个文件 requirements.txt,内容如下:
当我执行pip install -r requirements.txt时就会安装上面的3个库,输出内容的最后两行如下:
我们看到安装的库多于3个,那是因为pip也会同时安装依赖,这个就是下面要讲的。
这个选项告诉pip不安装依赖,只安装指定的库,如果执行以下语句:
则会只安装3个库,最后两行输出如下:
这个选项指定安装目录,比如指定 --target /pip/install/directory 就会安装到/pip/install/directory目录。
这个选项指定安装到特定目录,linux上是 ~/.local/,windows上是 %APPDATA%Python。
当一个库有新版本时,我们可以指定这个参数对其进行升级。
如果我们已经安装过某个库,再次安装时不会重新安装,这时指定 --force-reinstall 可以强制安装。
这个选项告诉pip忽略已经安装的库,宏戚卜导致pip会覆盖它们。这个选项与force-reinstall不同的是,如果某个库已安装,force-reinstall会先卸载再安装,ignore-installed不会卸载会直接覆盖。
‘伍’ 怎么查看python安装的依赖包
Python使用pip包管理器来安装、删除、管理软件包,使用pip安装软件包会自动安装包所依赖的其它包,而无需手动安装。
最新版本的Python中已经默认安装了pip包管理器,老版本的需要自己手动安装。pip包管理器的使用方法如下:
依次点击开始>运行,输入cmd打开命令提示符
pip install 包名称
通过以上两步即可实现包的安装,同样在命令提示符下输入:
pip list
可以查看所有已经安装的包。
‘陆’ Python包管理工具pip的安装和使用
Python有两个着名的包管理工具easy_install.py和pip。在Python2.7的安装包中,easy_install.py是默认安装的,而pip需要我们手动安装。
方法1:利用常用curl获取
>>后面是指定获取的pip脚本的名字,也可以是curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
方法2:利用wget获取,先要安装wget
备注:看网上还有利用easy_install安装pip,但是我尝试了并没有成功
原因是 Python.org sites 终止支持TLS1.0和1.1版本,TLS需要>=1.2
参考: https://stackoverflow.com/questions/49768770/not-able-to-install-python-packages-ssl-tlsv1-alert-protocol-version
主要命令:
所有命令中,最重要的两个命令是install和uninstall。
pip支持四种方式安装python包。
从PyPI安装一个包
安装一个全局区域的包,一般需要sudo权限。在mac系统上,即使是管理员也无法安装,自从OS X El Capitan及以后的版本包含了一套伍竖安全技术(System Integrity Protection简称为SIP)来防止恶意软件修改系统保护区域。具体可参考SIP。因此,我们有时候需要将PyPI包安装到用户区,这个时候,可以用.
pip在升级软件包之前会自动卸载旧的软件包。
可以将所有需要安装的包放入一个requirements.txt文件中,然后可以一次安枝知装。requirements.txt 文件的每一行都要表明安装的内容,而且尽量不要依赖文件中指定包的前后安装顺序。
从git安装
从svn安装
从一个分支安装
还有很多其他的包安装功能,但是上面的已经满足了大部分需求。其他的请参考 文档 。
pip uninstall可以卸载大部分的包,除了一下两种情况
使用方式主要有两种:
卸载单个包
卸载多个包
pip check用来验证已安装的包是否有兼容的依赖性问题。
上面的结果说明matplotlib包有两个依赖包没有安装。
pip search用来腔搭大搜索名字或者摘要中包含搜索关键字的PyPI包。
选项只有一个,就是指定PyPI的url,默认url为 https://pypi.python.org/pypi
例如,search frida
以下两者都可以用,结果同上。
pip list命令会按照字典序排列列举已安装的包,包括可编辑的包。
主要有如下选项:
输出格式:
legacy:将要被废弃
freeze
columns
json
当某些时候debug的时候,需要提供一个完整的python环境,python freeze提供了此功能,它能够输出机器上python环境的快照(所有已安装的包)。
下面是freeze命令的选项:
输出用户区安装的前5个安装包:
pip show可以用来显示每个包的具体信息。show命令只有一个选项 -f,用来显示安装包的文件列表。
$ pip show -f|--files packageName
更多命令请参考 文档
pip默认的index-url是 https://pypi.python.org/pypi/ ,
为了提高速度,我们可以更改pip源为国内的阿里云源。更改方法如下:
创建配置文件
添加阿里源
pip.conf内容如下:
‘柒’ python3离线安装第三方模块及其依赖包
以管理员权限启动cmd命令窗口,执行pip命令安装所需要的模块。例如:
以管理员权限启动cmd命令窗口,执行以下命令打包pip第三方安装包及安装索引。
将 packages 文件夹和 requirements.txt 文件拷贝至离线机器任意同级目录下,以管理员权限启动cmd命令窗口进入该目录,执行下述命令进行离线安装。
按照部署1、2、3导出外网机python环境list,可以批量安装python第三方依赖。若只需安装一个python包,可以使用下属方法: