- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python多版本开发环境管理工具介绍由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前言 。
在Python开发中,有些情况下,我们可能面临在一台机器上同时安装多版本Python的需求。比如:
有多个Python项目,每个项目依赖不同的Python版本.
有一个Python项目,它需要同时支持多个Python版本.
那么,如何高效地在单台机器上实现多个版本Python(具体来说,这里Python指的是Python解释器)的安装和维护呢?
除此之外,我们还可能面临在一台机器上安装多个版本的某个Python第三方库的需求。比如:有多个Python项目,每个项目依赖于不同版本的Python第三方库requests。这时候,如何在单台机器上实现多版本Python requests库的安装和维护呢?
本文介绍一款神器。它提供了最简洁的方法,让上述两种需求同时得到满足.
多版本Python管理 。
实现多版本Python管理的工具叫做pyenv。它的安装命令为:
1
|
curl https:
//pyenv
.run |
bash
|
安装完成后,需要进行简单配置。将下面几行配置信息添加到文件~/.bashrc中,然后执行命令exec "$SHELL",让配置生效.
1
2
3
|
export
PATH=
"$HOME/.pyenv/bin:$PATH"
eval
"$(pyenv init -)"
eval
"$(pyenv virtualenv-init -)"
|
接着,可以通过查看pyenv版本来检查安装和配置是否成功:
1
2
|
root@hzettv53:~
# pyenv -v
pyenv 1.2.12
|
由于pyenv是基于源代码进行Python的编译和安装的。因此,我们需要先安装编译相关的一些依赖包。由于这些依赖是操作系统相关的。因此,不同的操作系统,安装命令不同.
以常见的Ubuntu/Debian系统为例,安装命令为:
1
|
sudo
apt-get
install
-y
make
build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl
|
现在就可以使用pyenv安装Python了。安装新版本之前,我们先查看系统当前安装的Python版本:
1
2
3
4
|
root@hzettv53:~
# pyenv versions
* system (
set
by
/root/
.pyenv
/version
)
root@hzettv53:~
# python -V
Python 2.7.12
|
可见,当前使用的是操作系统自带的Python,其版本为2.7.12。这时,如果我们需要安装一个新的版本,例如Python 3.7.2, 只需执行命令:
1
|
pyenv
install
-
v
3.7.2
|
注意,由于pyenv是基于Python源代码进行编译安装,因此这一步骤会有点慢,需要耐心等待。安装完成后,查看系统中的Python版本:
1
2
3
4
5
|
root@hzettv53:~
# pyenv versions
* system (
set
by
/root/
.pyenv
/version
)
3.7.2
root@hzettv53:~
# python -V
Python 2.7.12
|
可以看到,系统中已经有两个版本的Python了。但是当前使用的仍然是系统版本。如果想要使用新安装的版本,只需:
1
2
3
4
5
6
|
root@hzettv53:~
# pyenv global 3.7.2
root@hzettv53:~
# pyenv versions
system
*
3.7
.
2
(
set
by
/
root
/
.pyenv
/
version)
root@hzettv53:~
# python -V
Python
3.7
.
2
|
这里命令pyenv global 3.7.2改变了全局的Python版本。如果只想在当前文件夹中使用Python 3.7.2,那么可以执行:pyenv local 3.7.2;如果只想在当前Shell环境中使用Python 3.7.2,那么可以执行:pyenv shell 3.7.2.
如果同时设置了global, local和shell三种Python版本,那么哪一种会真正生效呢?这里有一个优先级排序,即shell > local > global。举例来说,如果先后执行了pyenv local 3.7.2和pyenv global 3.7.3,那么由于local的优先级高于global,所以当前生效的Python版本是3.7.2.
这样,我们便很方便地实现了单一机器上安装多个版本的Python,并且可以根据实际需要,灵活地切换Python版本.
多虚拟环境管理 。
不同项目之间,不仅依赖的Python版本可能不同,而且依赖的Python第三方库的版本也可能不同。我们将项目所依赖的Python及其第三方库统一称为虚拟环境。如果同时存在多个Python项目,各自依赖不同的虚拟环境,如何有效管理呢?
这时,我们仍然可以使用pyenv来达成我们的目标。使用下述命令可以创建一个指定Python版本的虚拟环境.
1
|
pyenv virtualenv <python_version> <environment_name>
|
虚拟环境的名称建议体现Python项目名称。例如,我们有一个叫做myproject的项目,并且基于Python 3.7.2进行开发,那么可以执行命令
1
|
pyenv virtualenv 3.7.2 myprojectenv
|
这样,我们便创建了一个名为myprojectenv的虚拟环境。那么如何使用它呢?我们在需要使用这个虚拟环境的地方(例如,cd到项目myproject的文件夹路径),执行以下命令即可:
1
|
pyenv
local
myprojectenv
|
这时,我们可以看到,当前使用的Python和pip都指向的是虚拟环境myprojectenv:
1
2
3
4
|
root@hzettv53:~
/workspace/test
# pyenv which python
/root/
.pyenv
/versions/myprojectenv/bin/python
root@hzettv53:~
/workspace/test
# pyenv which pip
/root/
.pyenv
/versions/myprojectenv/bin/pip
|
这意味着,我们此时用pip命令安装的所有Python第三方包,都是安装到了虚拟环境myprojectenv的路径下,而不是系统路径。这样,我们便实现了Python项目和其所依赖的Python开发环境(即虚拟环境)的绑定。不同的Python项目,完全可以各自使用不同的Python虚拟环境,互不影响.
那么,如果一个Python项目需要使用两种Python虚拟环境呢?我们只需要创建两个虚拟环境(例如myprojectenv和myprojectenv2),并且在使用时进行切换即可:
1
2
3
4
5
6
|
root@hzettv53:~
/workspace/myproject
# pyenv local myprojectenv
root@hzettv53:~
/workspace/myproject
:~
# python -V
Python 3.7.2
root@hzettv53:~
/workspace/myproject
# pyenv local myprojectenv2
root@hzettv53:~
/workspace/myproject
:~
# python -V
Python 2.7.12
|
总结 。
开发环境的高效管理是软件工程中的一个难题,尤其是需要同时维护多个环境的时候。pyenv提供了在单台机器上实现多版本Python和多类型Python虚拟环境的有效管理。pyenv的使用十分简单,易于上手.
github地址 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://juejin.im/post/5d0b17575188252ea55fe818 。
最后此篇关于Python多版本开发环境管理工具介绍的文章就讲到这里了,如果你想了解更多关于Python多版本开发环境管理工具介绍的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在文档中找不到答案,所以我在这里问。 在 Grails 中,当您创建应用程序时,您会默认获得生产、开发等环境。 如果您想为生产构建 WAR,您可以运行以下任一命令: grails war 或者 gr
我们组织的网站正在迁移到 Sitecore CMS,但我们正在努力以某种方式为开发人员 (4)、设计师 (4)、QA 人员 (3)、作者 (10-15) 和批准者 (4-10) 设置环境在他们可以独立
如何在WinCVS中设置CVSROOT环境变量? 最佳答案 简单的回答是:您不需要。 CVSROOT 环境变量被高估了。 CVS(NT) 只会在确定存储库连接字符串的所有其他方法都已用尽时才使用它。人
我最近完成了“learnyouahaskell”一书,现在我想通过构建 yesod 应用程序来应用我所学到的知识。 但是我不确定如何开始。 关于如何设置 yesod 项目似乎有两个选项。一是Stack
在这一章中,我们将讨论创建 C# 编程所需的工具。我们已经提到 C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。因此,在讨论运行 C# 程序的可用工具之前,让我们先了解一下 C#
运行Ruby 代码需要配置 Ruby 编程语言的环境。本章我们会学习到如何在各个平台上配置安装 Ruby 环境。 各个平台上安装 Ruby 环境 Linux/Unix 上的 Ruby 安装
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我有一个这样的计算(请注意,这只是非常简化的、缩减版的、最小的可重现示例!): computation <- function() # simplified version! { # a lo
我使用环境作为哈希表。键是来自常规文本文档的单词,值是单个整数(某个其他结构的索引)。 当我加载数百万个元素时,更新和查找都变慢了。下面是一些代码来显示行为。 看起来从一开始的行为在 O(n) 中比在
我正在构建一个 R 包并使用 data-raw和 data存储预定义的库 RxODE楷模。这非常有效。 然而,由此产生的.rda文件每代都在变化。某些模型包含 R 环境,并且序列化似乎包含“创建时间”
(不确定问题是否属于这里,所以道歉是为了) 我很喜欢 Sublime Text ,我经常发现 Xcode 缺少一些文本/数据处理的东西。我可能有不止一个问题—— 'Command +/' 注释代码但没
我正在使用 SF2,并且创建了一些有助于项目调试的路由: widget_debug_page: path: /debug/widget/{widgetName} defau
我创建了一个名为 MyDjangoEnv 的 conda 环境。当我尝试使用 source activate MyDjangoEnv 激活它时,出现错误: No such file or direct
有没有办法区分从本地机器运行的包和从 Cordova 应用商店安装的包? 例如,我想像这样设置一个名为“evn”的 JavaScript 变量: if(cordovaLocal){ env = 'de
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我的任务是使用 java 和 mysql 开发一个交互式网站:使用 servlet 检索和处理数据,applet 对数据客户端进行特殊处理,并处理客户端对不同数据 View 的请求。 对于使用 jav
这按预期工作: [dgorur@ted ~]$ env -i env [dgorur@ted ~]$ 这样做: [dgorur@ted ~]$ env -i which date which: no
我想进行非常快速的搜索,看来使用哈希(通过环境)是最好的方法。现在,我得到了一个在环境中运行的示例,但它没有返回我需要的内容。 这是一个例子: a system.time(benchEnv(), g
我想开始开发 OpenACC 程序,我有几个问题要问:是否可以在 AMD gpu 上执行 OpenACC 代码? 如果是这样,我正在寻找适用于 Windows 环境的编译器。我花了将近一个小时什么也没
这可能看起来很奇怪,但是有没有办法制作机器(linux/unix 风格 - 最好是 RHEL)。我需要控制机器的速度以确保代码在非常慢的系统上工作并确定正确的断点(在时间方面)。 我能做到的一种方法是
我是一名优秀的程序员,十分优秀!