virtualenv是python的一个虚拟化环境工具,可以帮助我们在同一台host上创建多套纯净的python解释器环境并实现相互隔离,各个环境下安装的库仅限于自己的环境,不会影响到别人。

在使用virtualenv的过程中碰到了一些跟linux用户相关的问题,记录到这里帮助和我一样的新手更好的理解virtualenv的使用,避免再走弯路。

最初遇到的问题是这样的:

我用root身份创建了一个虚拟环境test,然后以普通用户lcheng身份激活了该虚拟环境:
这里写图片描述
然后我想在test环境中装个click库,提示我权限不够,我就只好sudo安装
这里写图片描述
看起来很正常,安装成功了,然而导入的时候提示我不存在。。
这里写图片描述
怎么回事? 退出解释器后用pip list看了下,确实没有!!
这里写图片描述
然而,当我用sudo执行pip list时,发现加不加sudo,两次pip list的结果差别很大,sudo pip list显示click是已经安装了的!!
这里写图片描述
问题到底出在哪了呢? 当我退出virtualenv后再用pip list看下,结果怎么样呢?
这里写图片描述
发现问题没有? 在虚拟环境中sudo pip list看到的结果跟退出虚拟环境的结果完全一样,也就是说在虚拟环境中执行sudo pip install命令并没有把库装在虚拟环境里面,而是装在外面了。

后来我又测试了几次,总结如下:

  1. root用户和普通用户都可以创建虚拟环境(记作venv),venv的相关文件和文件夹的owner都是该用户,所以如果是非root的其他用户激活该venv的话,会因为文件权限的问题导致python库安装失败
    tips:非root用户不要去激活使用其他用户创建的venv
  2. 一旦以用户A的身份激活某venv后,在虚拟环境中就不能再通过su命令切换其他用户,否则会自动退出虚拟环境,如:
    这里写图片描述
    tips:在虚拟环境中不要通过su切换用户
  3. 以用户A的身份激活某venv后,在虚拟环境中所有通过sudo + cmd执行的命令,都等同于在虚拟环境外执行,这个就是我之前碰到的问题了。
    tips:在虚拟环境中不要通过sudo执行命令

上面提到的3个tips,在使用virtualenv的时候一定要注意。

Logo

更多推荐