导航:首页 > 编程语言 > python多版本管理

python多版本管理

发布时间:2023-08-26 12:25:21

‘壹’ 如何管理python项目

Virtual Environments
首先Python似乎没有类似Maven/Ant这样的项目管理工具。那么当一台机器上有多个python项目,且这些python项目各自有不同的依赖,不想互相干扰时怎么办呢?
官方做法是使用Virtual Environments将每个项目互相隔离开。一般情况下,我们使用python解释器运行python脚本或mole:
>python myScript.py
运行的目录就是安装的python解释器,即python.exe所在的目录。而Virtual Environments就是给每个项目都生成一个项目独有的目录,这个目录里包含python解释器,python标准类库和其他各式各样的必要文件。这样每个项目就可以使用不同的解释器和类库,且互不干扰。
创建过程也很简单。首先找到pyvenv.py所在的目录,这个文件通常在安装目录的自目录\Tools\scripts下。这是一个生成Virtual Environments的工具。然后运行:
>pyvenv tutorial-env
运行后就会生成一个名为“tutorial-env”的目录。找到这个目录,可以发现正如官网所说,这个目录包含运行python项目所必须的一切文件。使用在各自Virtual Environments目录里包含的解释器来运行特定的python项目就可以了。同时,对于那些每个项目使用的特定的依赖(packages或mole),则加入到各自Virtual Environments目录的类库子目录中就可以了。这里需要注意的是。创建完Virtual Environments后,还需要激活。做法很简单,在上例tutorial-env目录下执行下的命令即可:
>tutorial-env/Scripts/activate
PIP
PIP是官方提供的安装python第三方类库(packages/mole)的工具。它可以去PPI(python packages index)查找或下载第三方类库。网址是:https://pypi.python.org/pypi
找到上例Virtual Environments目录下的pip.exe并运行:
>pip install lib_name
即可安装,其他功能请自行查看手册。如果是在python的安装目录下运行pip,则类库可以被非Virtual Environments的所有项目使用。PIP安装的其实是package。
Requirements.txt
在Virtual Environments目录下运行:
>pip freeze > requirements.txt
可以生产一个当前项目所有依赖类库及其版本的list文件,文件名就是requirements.txt(当然也可以用别的名字)。文件内容大致如下:
novas==3.1.1.3
numpy==1.9.2
requests==2.7.0
使用requirements.txt的好处就是:
The requirements.txt can then be committed to version control and shipped as part of an application. Users can then install all the necessary packages with “install -r“:
>pip install -r requirements.txt
这样就可以方便的管理项目依赖了。如果不使用requirements.txt,直接使用version control存储Virtual Environments目录,其他程序员直接下载该目录就可以开始项目开发的做法也可以。

‘贰’ 如何在vscode使用指定版本的python

正儿八经开始使用的第一个编辑器就是VS Code,所以基本没怎么用过Sublime,比较是无从谈起,不过VS Code用起来真是顺手啊。配置好的话,直接在VS Code里面进行Python开发、调试,完全不是问题。
不过使用Python难免需要用到多个Python版本,讲一下如何在VS Code中进行配置。

系统中Python多版本管理

之前一直用Anaconda,直接用conda创建并管理多版本Python。最近用着总出现一些莫名其妙的问题,于是卸载了直接换回了官方“纯净版”。
在默认使用Python3.5的情况下,系统中环境变量指向Python3.5,同时在(假如)“C:\Python27”目录下装有Python2.7。可以在Python3.5的根目录中创建名为py2.bat的文件,文件内容:

@ echo off
C:\Python27\Python.exe %*

这样直接在命令行中输入py2就可以使用Python2.7开发环境,输入Python则是默认的Python3.5开发环境。文件名称py2可以更换成个人习惯的名称,命令行中输入相应名称即可(参考 ART^{9} 的一篇文章)。

安装第三方库的话,以下命令安装到默认Python开发环境:

pip install somelib

安装到Python2开发环境:

py2 -m pip install somelib

VS Code配置Python开发环境

使用VS Code打开一个文件夹,这个文件夹在VS Code中便是一个工作空间。VS Code会在文件夹中自动创建一个.vscode文件夹,里面是一些配置文件。

VS code setting

在.vscode中有一个tasks.json文件,这个文件就是进行配置运行环境的,最简单和常用的配置为(参考 xin053 的一篇文章):

{
"version": "0.1.0",
"command": "python",
"isShellCommand": true,
"args": ["${file}"],
"showOutput": "always"
}

其中command是python可执行文件的路径,在添加的系统环境变量中之后可以直接写python,否则需要给出完整路径。args就是command运行的参数,即当前文件。
在安装上述方法配置了Python双版本运行环境后,对tasks.json进行简单修改就可以了:

{
"version": "0.1.0",
// 在linux和Mac系统中使用"sh".
"command": "cmd",
"isShellCommand": true,
// global args
// 在Linux和Mac系统中使用"-c"(注意大小写).
"args": ["/C"],
"showOutput": "always",
"suppressTaskName": false,
"tasks": [
{
"taskName": "py2",
// task args
"args": ["${file}"],
},
{
"taskName": "python",
"args": ["${file}"]
}
]
}

注意suppressTaskName属性,VS Code官网上的解释为:

If suppressTaskName is true, the command line is command 'global args' 'task args'.
If suppressTaskName is false, it is command 'global args' taskName 'task args'.

也就是说,当把suppressTaskName = false的时候,taskName属性也被当做command line的参数传入了。因此,当选择不同的task的时候,相当于在命令行(或终端)中执行了相应的py2 file.py或python file.py。效果相当棒。
F1输入run task,选择py2。

Run task

Choose tas

‘叁’ 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

‘肆’ python利器——pipenv和pyenv介绍

也可以看我CSDN的博客:
https://blog.csdn.net/u013332124/article/details/90049921

在写python程序时,经常会被版本管理以及第三方包管理搞的很头疼。这两天看了业内相关的解决方案,觉的很不错。

我们经常在开发时会需要用到多个python版本,为了解决版本问题,比较常见的做法是修改环境变量来切换版本,但是修改环境变量终究比较麻烦。另外,我们在安装新的python版本时也会小心翼翼,避免影响到系统自带的python版本。这个问题都可以通过pyenv来解决。

pyenv可以在系统中安装多个python版本,并且不影响到系统自带的python,而且通过pyenv我们可以快速的在多个python版本之间来回切换

安装pyenv之前需要保证电脑上已经安装了git:

安装好了之后,使用很简单,比如我们要安装python3.7.3的版本,可以直接通过pyenv安装

之后可以通过以下命令快速切换python命令

其实pyenv的原理也很简单,就是对python版本进行统一管理,之后也是通过修改环境变量来切换python命令的指向。但是通过pyenv我们只要执行一个命令就可以了,我们可以看到所有通过pyenv安装的python版本都放在 ~/.pyenv/versions 目录下,也更加方便管理

pyenv 支持的参数也比较少:

shell表示切换的版本仅当前版本有效,session关闭后就失效了

global表示全局,重启也不会影响更改

local表示临时生效,但是系统重启后就不会生效了

pyenv虽然解决了python版本切换的问题,但是依旧无法解决各个项目的第三方包管理的问题。比如说A项目需要用requests版本是1.0,而B项目需要requests版本是2.0。这时候pipenv就派上用场了。值得一提的是,pipenv也是写requests的那位大佬写的。

pipenv可以为我们的项目自动创建和管理一个虚拟环境 。并且会在项目目录下创建一个Pipfile来管理第三方包。

pipenv的安装很简单:

使用也很简单,进入项目目录后,使用以下任一命令创建一个虚拟环境:

创建成功后会在项目目录下生产一个Pipfile文件来管理第三方包。之后可以通过以下命令安装requests

这样requests的安装只对当前项目生效 。之后可以通过以下命令进行虚拟环境运行相关脚本:

或者通过以下命令直接使用虚拟环境运行命令:

pipenv的原理也很简单,我们输入 pipenv -venv 就可以得到虚拟环境的目录。然后在执行pipenv shell时,会看到以下输出语句:

其实就是激活虚拟环境的activate,设置一下相关环境变量。通过pipenv安装的第三方包也都在 ~/.local/share/virtualenvs/monitor-9E5KrdNU/lib 目录下。

有了pipenv后,其实virtualenv已经没什么用了。但是也有人在线上部署的时候结合virtualenv和pipenv来部署,因此这里做个简单的介绍。

安装virtualenv也很简单:

之后创建一个虚拟环境:

其实就是创建了一个venv的目录,这个目录下有bin、lib、include,其中通过虚拟环境安装的第三方包都会放在lib下。

通过以下命令进入虚拟环境:

和pipenv基本一样,就是通过activate设置了环境变量。

之后通过 deactivate 退出虚拟环境,其实就是恢复了环境变量。

使用pipenv在本地开发好后,总要部署到线上。如果线上也能直接安装pipenv固然最好,但是不好在服务器安装pipenv的情况,怎么办呢?

1、如果线上使用的是virtualenv管理虚拟环境的话

可以直接在virtualenv的虚拟环境中安装pipenv,这样就可以直接运行我们基于pipenv构建的项目了

2、 如果线上连virtualenv都没有的话

通过pipenv导出requirements.txt,然后到线上安装第三方包

pipenv介绍

pyenv介绍

virtualenv介绍

‘伍’ python中有很多包管理工具有哪些yolk

1、pip是python的管理工具,是一个现代的,通用的Python包管理工具,提供了对 Python 包的查找、下载、安装、卸载的功能。

如以下命令:

$ pip install requests,

$ pip search xml,

$ pip show beautifulsoup4,

$ pip uninstall requests。

2、Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项,Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等。

(5)python多版本管理扩展阅读:

pip的快捷按键使用:

install:安装包安装 (Install packages.)

downloa:下载下载包 (Download packages.)

uninstall:卸载卸载包 (Uninstall packages.)

Anaconda默认安装:

python-3.6.0-0 ...

_license-1.1-py36_1 ...

alabaster-0.7.9-py36_0 ...

anaconda-client-1.6.0-py36_0 ...

anaconda-navigator-1.4.3-py36_0 ...

astroid-1.4.9-py36_0 ...

astropy-1.3-np111py36_0 ...

babel-2.3.4-py36_0 ...

backports-1.0-py36_0 ...

beautifulsoup4-4.5.3-py36_

‘陆’ python多版本和虚拟环境(pyenv+conda or virtualenv)

2.7.X
3.X
Anaconda2
Anaconda3

pyenv是一个管理各个python版本的管理器。可以在系统里同时保留多个python版本,等需要时定义需要的版本。

项目地址

看项目地址中的readme

查看pyenv可安装的版本列表

安装和卸载指定版本,会将python版本安装在 $(pyenv root)/versions/ 中

查看当前已经安装了的python版本。输出内容中,system关键字是系统python版本。 *表示当前环境所处的版本。

全局切换为anaconda科学计算环境(不建议这么做),做了如果要恢复,则将最后一个参数改为--unset

当前环境接环。在当前目录以下。如果要恢复,则将最后一个参数改为--unset

本来这是一个单独的软件用来虚拟一个python版本环境,让每个工作环境都有一套独立的python各自的第三方插件互不影响。然而在 pyenv 下有一个插件 pyenv-virtualenv 他可以在 pyenv 的环境下担负起 virtualenv 的事情。(如果使用的是原生python可以用这个工具,如果用的是anaconda则不用这个,用下一章说的conda工具来完成虚拟环境)

项目地址

看项目地址中的readme

在当前目录下创建一个 python 版本为2.7.1的环境,环境名字为 env271。 这个环境的真实目录位于 ~/.pyenv/versions/

(创建时并不激活)激活当前环境。此时已经进入虚拟环境,在当前环境下所有pip等操作都不会影响系统环境和系统路径。

离开已激活的环境,切换回系统环境。但并没有被删除,下次依旧可以启动。

删除一个环境,当然也可以到真实目录下删除文件夹。

本来不想用这个的,但是因为 pyenv-virtualenv 有一些问题,无法很好的管理conda环境,比如有一些anaconda 自带的一些命令(例如pylint)无法被使用。因此还是老老实实使用 conda 来管理虚拟环境。

conda 是自带于 anaconda 的所以并不需要额外安装,如果在 anaconda 环境中就可以使用。conda 不仅可以进行 环境管理 ,还可以 包管理 ,和对 anaconda和conda 进行 版本升级

由于conda使用方法太多,因此这里罗列一些常用的主要是一些虚拟环境的命令。具体的到 官网文档 去查看一下。

首先conda工具是需要在anaconda环境下的,因此先执行 pyenv local anaconda3-4.2.0 进入anaconda环境后就可以执行conda工具了。

创建一个虚拟环境。可以指定名字,指定包,甚至制定python(这样的话就python版本管理了所以不建议使用,python版本管理交给pyenv),所以命令中 python=x.x 可以不写

罗列已经创建的环境,两条命令是一样的。

激活一个环境。和virtualenv一样,创建不等于激活。激活后才能真正使用虚拟环境。
如果发生错误 Error: activate must be sourced. Run 'source activate envname' 说明activate命令没有找对,导致错误。吧命令改成

这样就能成功建立虚拟环境了。

删除一个虚拟环境。

复制一个虚拟环境。这个是个不错的好功能。

conda还能吧环境配置文件导出,在另一台机器上重新读入配置文件,就能复刻你的环境了。

conda 还能进行包的管理。调用的是 pip 所以也很棒。

查看当前环境已安装包,用-n指定后,就是查看某个环境下的已安装包

为某个指定的环境安装包,升级包,删除包。

它还能升级自身和anaconda和python的版本。

它和pip一样也能设置安装包的镜像位置。其余还有能使用R命令等等,都到官网文档中搜索一下。

阅读全文

与python多版本管理相关的资料

热点内容
装修时加密地暖 浏览:410
android开发辅助功能 浏览:246
linux程序设计第3版pdf 浏览:570
程序员会两班倒吗 浏览:743
php制作网易云页面 浏览:902
玫瑰原液可以和压缩面膜一起用吗 浏览:604
zabbix监控系统pdf 浏览:431
pdf的注释颜色 浏览:541
pdf阅读器下载下载 浏览:13
sip注册到多个服务器地址 浏览:898
linuxwifi扫描命令 浏览:418
德玛西亚服务器为什么排队 浏览:121
深入浅出linux设备驱动编程 浏览:848
pdf文档怎么做加密 浏览:817
为什么小米app运动登录就闪退 浏览:893
云更新账号能登录几台服务器 浏览:181
为什么大学总是要求下各种App 浏览:327
柱上部怎么加密 浏览:454
php写文件管理 浏览:857
压缩机油加热器 浏览:26