python-virtualenv

http://www.nowamagic.net/academy/detail/1330228
http://www.nowamagic.net/academy/detail/1330231
//www.greatytc.com/p/3abe52adfa2b

virtualenv

官网: https://virtualenv.pypa.io/en/stable/
在Python的开发环境的最常用的方法是使用 virtualenv 包。 Virtualenv是一个用来创建独立的Python环境的包。简单地说,你可以为每个项目建立不同的/独立的Python环境,你将为每个项目安装所有需要的软件包到它们各自独立的环境中, 最重要的是:在没有权限的情况下安装新套件

安装:

pip install virtualenv

使用:

mkdir nowamagic_venv
virtualenv --distribute nowamagic_venv
virtualenv  -p  /usr/local/bin/python3.4 ENV3.4  # 指定版本的python环境
virtualenv -p /usr/bin/python2.7 ENV2.7

New python executable in /Users/fengxiang01/test/envtest_env/bin/python2.7
Also creating executable in /Users/fengxiang01/test/envtest_env/bin/python

-distribute (15版本已废弃)选项使virtualenv使用新的基于发行版的包管理系统而不是 setuptools 获得的包。 你现在需要知道的就是 --distribute 选项会自动在新的虚拟环境中安装 pip ,这样就不需要手动安装了

文件下面出现四个文件:


屏幕快照 2017-05-19 16.35.49.png

打开bin可以发现virtualenv自动在这个虚拟环境中部署了一套package:

屏幕快照 2017-05-19 16.38.31.png
  • activate:这个virtualenv的激活文件
  • pip:这个virtualenv的独立pip
  • python:python解释器的一个副本
  • lib/python2.7:所有的新包会被存在这

激活环境:

cd nowamagic_venv
source bin/activate    #  激活

部署环境可以用:

 # 在系统环境
 pip freeze > requirment.txt
 cd nowamagic_venv
 source bin/activate
 pip install -r requirment.txt # 根据requirment.txt生成相同的环境

virtualenv拷贝了Python可执行文件的副本,并创建一些有用的脚本和安装了项目需要的软件包,你可以在项目的整个生命周期中安装/升级/删除这些包。 它也修改了一些搜索路径,例如PYTHONPATH,以确保:

  • 当安装包时,它们被安装在当前活动的virtualenv里,而不是系统范围内的Python路径。
  • 当import代码时,virtualenv将优先采取本环境中安装的包,而不是系统Python目录中安装的包。

这样,不同的项目可以使用一套不同版本的package而互不影响,同时又能共享一些系统的paceage

virtualenv  --no-site-packages  env  # 已废弃, 默认如此, 选项的virtualenv就不会读取系统包
virtualenv --system-site-packages env  # 和上面的相反的意思
virtualenv –clear  # 清空非root用户的安装 并从头开始创建环境

最后离开虚拟环境:

deactivate     # 离开虚拟环境

virtualenvwrapper

virtualenvwrapper 是一个建立在 virtualenv 上的工具,通过它可以方便的创建/激活/管理/销毁虚拟环境,没它的话进行上面的操作将会相当麻烦。 可以通过下面命令安装 virtualenvwrapper 。

配置:.bashrc添加:

export WORKON_HOME=~/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

新建/激活/关闭/删除虚拟空间需要执行下面的命令:

mkvirtualenv nowamagic_venv
workon nowamagic_venv: 切换虚拟环境
workon nowamagic_venv
deactivate
rmvirtualenv nowamagic_venv

workon:列出虚拟环境列表
lsvirtualenv:同上
mkvirtualenv nowamagic_venv:新建虚拟环境
workon nowamagic_venv:切换虚拟环境
cdvirtualenv: 切换到当前虚拟环境目录
cdsitepackages: site-packages目录
toggleglobalsitepackages:控制环境是否使用global site-packages
rmvirtualenv  nowamagic_venv:删除虚拟环境
deactivate nowamagic_venv: 离开虚拟环境
virtualenv --relocatable  nowamagic_venv   生成可打包环境(把绝对地址改为相对地址,线下环境下开发完连同所有依赖打包到线上环境)
cpvirtualenv env1 env3 复制虚拟环境

Tab补全在virtualenvwrapper中是可用的。更多信息可以前往 virtualenvwrapper 的首页:http://www.doughellmann.com/projects/virtualenvwrapper/

关于离线打包部署

virtualenv --relocatable nowamagic_venv 生成可打包环境(把绝对地址改为相对地址

--relocatable 官方的说法currently has a number of issues, and is not guaranteed to work in all circumstances. It is possible that the option will be deprecated in a future version of virtualenv.

再打包压缩的前用此命令, 迁移到新环境后, 还需要修改 env/python2.7/orig-prefix.txt, 这个文件记录了所依赖的系统python版本的前缀, 这个需要改为新环境的python位置, 但是如果有C++的动态链接库的依赖就很棘手了


PS:

今天开始用虚拟环境的时候, 出现个问题, pip新包一直提示: requirement already satisfied virtualenv in /library/python/2.7/site-packages, 一看pip list,系统的都添加进来了(virtualenv的版本是15, 默认--no-site-packages), 查看sys.path, /usr/local/lib/python2.7/site-packages路劲都加进来了, 找了半天原因, 终于参考下面解决, 之前在etc/profile 中设置过全局的PYTHONPATH, 删掉解决

https://virtualenv.pypa.io/en/stable/userguide/#making-environments-relocatable

注意: virtualenv 是包的管理工具, 其依赖的还是指定的系统python版本

####### 迁移虚拟环境时,

遇到一个问题
Cannot find libpython2.7.so.1.0
这是由于系统无法找到动态库的路径导致的
修改 /etc/ld.so.conf 文件加入python库的路径
在/etc/ld.so.conf中加入新行/usr/local/lib
(libpython2.7.so.1.0 的位置,不一定是这个位置 locate libpython2.7.so.1.0 查找)
然后 run ldconfig
参考:
https://stackoverflow.com/questions/20842732/libpython2-7-so-1-0-cannot-open-shared-object-file-no-such-file-or-directory

http://www.ithao123.cn/content-622257.html

** 如果没有权限修改/etc/ld.so.conf, 那也可以,就是export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。

参考: http://blog.csdn.net/unix21/article/details/12119861

还有一个问题是 注意 activate 中的VIRTUAL_ENV 的地址需要重新配置

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,042评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,996评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,674评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,340评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,404评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,749评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,902评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,662评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,110评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,577评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,258评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,848评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,726评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,952评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,271评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,452评论 2 348

推荐阅读更多精彩内容