摘要:最近在上使用遇到了问题,由于使用了库,其同时存在于和,的库中,版本为,而最新的为。建议使用参数将上的开发目录挂载到容器中,这样仅仅使用了容器提供的环境,而代码跟容器本身并没有关系。支持多种,,,之类,的确非常方便。
最近在Mac上使用Python遇到了问题,由于使用了pyOpenSSL库,其同时存在于/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python和/Library/Python/2.7/site-packages,Mac python的库中,pyOpenSSL版本为0.13,而最新的pyOpenSSL为0.15.1。使用sudo pip install --upgrade pyopenssl==0.15.1无法将Mac python的库升级,所以无法使用0.15.1的pyopenssl。
尝试了Docker, vagrant, virtualenv,这几个东西都可以实现创建一个较为干净的python开发环境,在尝试了他们之后在这里分享一下心得,仅供参考,这里假定读者也有以上工具的相关经验,不喜勿喷。
1. 基于Docker其实docker的出现,一定程度上就是为了解决这类问题,我把所有的代码,库文件,二进制,配置文件之类的,放到集装箱里,一并打包给你,所以你就得到了一个跟我环境一模一样的环境,不管是在开发,测试还是生成环境,对于应用来说,周围的环境都一模一样,减少了部署,迁移之类的不必要的麻烦。
如果想要用Docker搭建一个Python开发环境,极为简单,只需要去官方下载Python的docker image即可,启动后,你可能需要安装一些包,然后记得commit保存下你对镜像的修改,下次启动或者把镜像导给你的同事,得到的环境都是一模一样的。
但是千万记得,别把你的代码直接放到docker image中,这是个很不好的选择,万一哪次忘记commit就躲墙角里哭去吧。
建议使用-v参数将Host上的开发目录挂载到容器中,这样仅仅使用了容器提供的环境,而代码跟容器本身并没有关系。
OK,说到这,你可能觉得我说了一大堆的废话,的确废话,因为这一切在Docker中太简单了。
2. 基于VagrantVagrant是什么鬼?前段时间我一直想问这个问题,后来用RancherOS,官方推荐用这货来启动RancherOS,就试了一下。这货实际上就是一个Wrapper,你看到的是统一的接口,但是其背后是各种虚拟机,默认是VirtualBox。
说白了,用Vagrant享受的服务是虚拟机提供的,其box的概念,实际上就是虚拟机的镜像文件。Vagrant支持多种provider,VB,VMWare,AWS之类,的确非常方便。它对环境的打包比Docker更凶猛,直接打包的Virtual machine,和Vagrant的配置,想来并不是那么高效,但是的确方便可行。
如何在Vagrant上,也就是虚拟技术搭建Python环境,就变得很简单了,就跟在一个独立的系统上一样,又是一大堆的废话就不在重复了
3. Buildout一个致力于给Python提供友好干净的开发环境的工具,网上说这厮已经到了机械时代,virtualenv+pip还处于手工时代,但是个人感觉比virtualenv+pip还复杂,看了一眼,就不想看了
4. Virtualenv恩,这家伙差不多解决了我的问题,所以非常有好感。
Mac上可以通过pip或代码安装virtualenv,不详细说了。安装之后,通过命令创建一个新的环境,假定我们要创建的环境是叫test-cloud-env,执行如下命令:
$ virtualenv test-cloud-env
这会再当前目录创建test-cloud-env这个目录,并在其下创建bin/,lib/,include/
接下来,你会发现有不少东西放在了bin/目录下,其中有python的解释器,以及一些脚本以及我们的activate脚本。现在,我们马上就要创建一个虚拟的独立Python开发环境了,一个命令也就搞定,为了有个直观的体验,请看以下实例:
$ env python -c "import OpenSSL as a; print a.__version__" 0.13.1 $ source test-cloud-env/bin/activate $ env python -c "import OpenSSL as a; print a.__version__" 0.15.1
看到区别了吧,启用之前Python使用的是系统的库,启用之后使用新创建的库。
如何给这个env安装依赖库?我使用了requirements.txt来保存需要安装的库及其版本,剩下的交给pip去搞定就行了
$ cat requirements.txt pexpect pyOpenSSL == 0.15.1 requests $ pip install -r requirements.txt
安装完成后,一个虚拟的独立的Python开发环境就OK了。你可以为不同项目创建不同的env。
5. something else?写到这就打住就没什么意思了,网上不是都搜得到么。。。
我比较喜欢Sublime Text,定制性比较高,已经成为我主要的编辑器了。为了能够让编辑器里的代码直接在Sublime Text里使用我们定制的env执行,我们得开始定制一个build system。
打开编辑器,Tools->Build System->New Build System,添加代码:
{ "cmd": ["/path/test-cloud/pyenv.sh", "$file"], "file_regex": "^[ ]*File "(...*?)", line ([0-9]*)", "selector": "source.python" }
保存为Python-Virtualenv.sublime-build。
这里用到一个脚本pyenv.sh,这个脚本所做的事情就是激活env,然后执行当前脚本,我们再看看pyenv.sh的内容
#!/bin/bash pyfile=$1 source /path/to/env/bin/activate # echo $PWD env python -u $pyfile
记得给这个脚本加个可执行权限。最后在sublime text 的build system里选择Python-Virtualenv,然后你的脚本就会再自己定制的env中执行了。
另外,对于使用其他环境的Python环境,比如Docker之类,同样可以通过定制Build system来实现远程执行,具体可以参照我的另一篇文章。基本思路是一样的,随意定制。
virtualenv还有个管理器virtualenvwrapper,个人觉得用处不大,因为virtualenv实在是太轻量级了,以至于没有必要折腾复用,当然大型项目除外,呵呵。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/37573.html
摘要:另一个好处是,虚拟环境不需要管理员权限。当一个虚拟环境被激活后,程序的位置会被添加到中。比如,安装到虚拟环境中,使用如下命令安装过程会将和它的依赖集安装到虚拟环境中。 简介 在开发不同的应用时,我们可能需要不同的 Python 版本,同时可能还需要处理包的依赖、版本和间接权限问题。在同系统中,要解决这些问题往往非常棘手。在 Python 的开发环境中,为解决这样的问题最常用的方法是使用...
摘要:本文最早发表于个人博客配置环境在工作开发中,一直使用来管理的包环境。很好的解决了不同项目使用不同包的需求。建议路径为添加环境变量。设置面向程序的本地版本,通过将版本号写入当前目录下的文件的方式。若找不到,就用版本。 本文最早发表于个人博客Pylixmwiki: http://pylixm.cc 配置环境: CentOS release 6.8 pyenv 20160509 在工作开...
摘要:如果应用需要,应用需要怎么办这种情况下,每个应用需要各有一个独立的运行环境。虚拟环境是一个创建隔离开发环境的工具。创建一个包含所有必要的可执行文件的文件夹,用来使用工程所需要的依赖包。 Python应用程序开发中,如果系统只安装了Python3.6.6。当开发者使用pip安装第三方包时,所安装的包会进入Python安装目录下的site-packages目录中。Python的优势之一是有...
摘要:为了安装科学计算环境,控制好版本,今天上午总算折腾好了。切换和使用新的虚拟环境这样就能切换为这个版本的虚拟环境。通过输入查看现在版本,可以发现处于虚拟环境下了。指定包的版本多个版本并存,尤其是和的并存。下面用创建一个名叫的版本为的环境。 为了安装Anaconda科学计算环境,控制好python版本,今天上午总算折腾好了。 学习python有时希望在python2.7环境下,有时希望在...
摘要:打开命令提示符输入出现下面提示说明已经安装成功安装添加的环境变量环境变量中加上的路径,例如。在命令提示符输入安装完成,建立一个全新的环境,例如我们想建立一个叫的开发环境,路径为,那么我们输入安装完成。 工欲善其事,必先利其器。首先我们需要花费一些时间来搭建开发环境。 1.安装python。python是人工智能开发首选语言。 2.安装virtualenv。virtualenv可以为一个...
阅读 3734·2021-11-11 11:02
阅读 3451·2021-10-11 10:57
阅读 3567·2021-09-22 16:00
阅读 1807·2021-09-02 15:15
阅读 1269·2019-08-30 15:56
阅读 971·2019-08-30 15:54
阅读 2692·2019-08-30 12:43
阅读 3500·2019-08-29 16:06