python:virtualenv(Centos6.8)

6 篇文章 0 订阅
5 篇文章 0 订阅
1. 前言
  • 继安装好python2.7和pip2.7之后(安装方法可以戳这里),为了更好地在centos上区分python2.6和python2.7的使用,决定学习使用virtualenv,我真的不想再重装系统了=。=
  • vitualenv是用于隔离python工程的packages等环境的,有时候不同的python工程所需的package的版本不同、甚至python版本不同(2.7和3等),这样的情况下使用virtualenv就能很好地隔离这些环境,方便管理
  • 准备系统环境
    • centos6.8(64bit)
    • 自带的python2.6和pip2.6
    • 源码安装的python2.7.14和pip2.7
    • python2.7的安装位置:/usr/local/python2.7.14
2. 安装virtualenv
  • 经过测试验证,使用pip2.6安装virtualenv的版本和使用pip2.7安装的virtualenv的版本都是15.2.0,因此我选择使用pip2.6来安装virtualenv-15.2.0,这样virtualenv是被安装在/usr/lib/python2.6/site-packages
[ding@host ~]$ sudo pip2.6 install virtualenv

[ding@host ~]$ pip2.6 list | grep virtualenv
virtualenv (15.2.0)
[ding@host ~]$ whereis virtualenv
virtualenv: /usr/bin/virtualenv

[ding@host ~]$ pip2.7 list
Package    Version
---------- -------
pip        10.0.0 
setuptools 39.0.1 
wheel      0.31.0
  • 使用pip2.6安装了vitualenv之后,可以看到,pip2.7的安装位置中是没有vitualenv的,并且virtualenv的指令是会默认安装在/usr/bin(环境变量)下的,可以直接使用,省去很多麻烦
3. 创建需要隔离环境的工程目录
[ding@host ~]$ mkdir spiderMyCsdn
[ding@host ~]$ cd spiderMyCsdn
[ding@host spiderMyCsdn]$ vi test.py

# coding=utf-8
import numpy as np
a = np.arange(12).reshape([3,4])
print 'hello virtualenv~'
print a

:wq
4. 在需要隔离的工程根目录下创建独立的Python运行环境(命名为venv

创建名为venv的虚拟环境,选择Python解释器为/usr/local/python2.7.14/bin/python2.7

[ding@host spiderMyCsdn]$ virtualenv -p /usr/local/python2.7.14/bin/python2.7 venv

Running virtualenv with interpreter /usr/local/python2.7.14/bin/python2.7
New python executable in /home/ding/spiderMyCsdn/venv/bin/python2.7
Also creating executable in /home/ding/spiderMyCsdn/venv/bin/python
Installing setuptools, pip, wheel...done.
  • 默认情况下,虚拟环境会依赖系统环境中的site-packages,就是说系统中已经安装好的第三方package也会安装在虚拟环境中,如果不想依赖这些package,那么可以加上参数--no-site-packages建立虚拟环境

    virtualenv --no-site-packages [虚拟环境名称]
  • 这就是为什么安装完python2.7、pip2.7和virtualenv之后我不再使用任何版本的pip安装任何package的原因,这样,我能确保外部系统环境不会有什么奇怪的冲突,而在虚拟环境创建的时候也不用担心默认使用外部的package,每个虚拟环境内的package独立安装,能够最大限度确保各个项目能正常运行(我是真的怕了重装系统=。=勉为其难给自己找个理由)
  • 创建虚拟环境成功之后可以看到工程根目录下多了一个文件夹venv/,大概长这样:
.
├──bin
│   ├── activate
│   ├── activate.csh
│   ├── activate.fish
│   ├── activate_this.py
│   ├── easy_install
│   ├── easy_install-2.7
│   ├── f2py
│   ├── pip
│   ├── pip2
│   ├── pip2.7
│   ├── python -> python2.7
│   ├── python2 -> python2.7
│   ├── python2.7
│   ├── python-config
│   └── wheel
├──include
│   └── python2.7 -> /usr/local/python2.7.14/include/python2.7
└──lib
    └──python2.7
5. 启动虚拟环境venv
[ding@host spiderMyCsdn]$ source venv/bin/activate
(venv) [ding@host spiderMyCsdn]$ 

启动虚拟环境后,会发现前面多了一个(venv),这时候就已经在虚拟python环境中啦,愉快地安装所需的package吧~

6. 在虚拟环境venv中使用pip2.7安装package
(venv) [ding@host spiderMyCsdn]$ pip install numpy
Collecting numpy
  Downloading https://files.pythonhosted.org/packages/b9/84/513dc190113249244b3027ffebc6bf8ddcce1843cc471620ea179dc5613c/numpy-1.14.2-cp27-cp27m-manylinux1_x86_64.whl (12.1MB)
    100% |████████████████████████████████| 12.1MB 1.7MB/s 
Installing collected packages: numpy
Successfully installed numpy-1.14.2
7. 在虚拟环境venv中测试
(venv) [ding@host spiderMyCsdn]$ python2.7 test.py 
hello vitualenv~
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
8. 退出虚拟环境
(venv) [ding@host spiderMyCsdn]$ deactivate
[ding@host spiderMyCsdn]$ 

退出虚拟环境后,可以看到前面的(venv)就不见啦,这时候就不是虚拟环境了,那么执行python2.7 test.py是会出错的:

[ding@host spiderMyCsdn]$ python2.7 test.py 
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    import numpy as np
ImportError: No module named numpy
9. 删除虚拟环境

如果想删除虚拟环境,那么直接运行 rm -rf venv/ 命令即可。

10. 启用仅在虚拟环境中才能使用pip安装的功能
  • 如果没有启动虚拟环境,一不小心就直接在系统环境执行了pip安装指令,那么packages就会被安装在系统环境中。为了避免发生这种情形,可以在环境变量文件中加上 export PIP_REQUIRE_VIRTUALENV=true,然后source一下即可
  • 由于pip都不是安装在某一用户下的软件,都是使用root用户来安装的,因此在使用pip来安装package的时候也是要加上sudo才能执行,所以如果仅仅修改自己用户的环境变量文件.bashrc是不能根治上述情形的。因此只能修改系统的环境变量文件
  • 又因为查看到/etc/bashrc文件中前面有个描述是最好不要更改它,而是去/etc/profile.d/目录下创建一个叫custom.sh的文件,在里面添加一些需要的配置,然后source一下即可:
[root@host /home]# cd /etc/profile.d/
[root@host profile.d]# touch custom.sh
[root@host profile.d]# vi custom.sh

export PIP_REQUIRE_VIRTUALENV=true

:wq

[root@host profile.d]# source /etc/profile
  • 完成后,不论是root用户还是普通用户,都无法在系统环境中使用pip指令啦:
[root@host profile.d]# pip2.7 list
Could not find an activated virtualenv (required).
[root@host profile.d]# exit
exit
[ding@host ~]$ pip2.7 list
Could not find an activated virtualenv (required).
  • 假如突然又不想启用这个功能了,把custom.sh清空之后再source一下,如果发现还是不能用pip指令,那么有可能是ssh没有重启,关闭ssh连接,重连一次就可以了。
11. 关于virtualenvwrapper

这是一个统一管理系统中所有virtualenv的东西,以后再学习=。=,先记录一个链接,有兴趣的小伙伴也可以先自行学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值