Linux下 虚拟环境管理
virtualenv安装
- 安装
pip install virtualenv
- 查看是否安装成功
virtualenv --version
- 查看帮助
virtualenv --help
virtualenv 使用
-
创建一个测试用的虚拟环境
virtualenv my_test_env -p python3
-p 用来指定python版本 如果python添加了软连接可以像我一样指定,如果没有添加软连接,可以直接定位到python执行文件 /usr/local/python3/bin/python
如果创建虚拟环境时不选择指定的python版本, 那么虚拟环境创建后默认就是系统默认的python版本. -
激活虚拟环境
cd my_test_env source ./bin/activate
-
查看虚拟环境python版本,pip版本
python -v pip -v
-
退出虚拟环境
deactivate
-
删除虚拟环境 只需要删除my_test_env 目录即可
如果没有启动虚拟环境,系统环境也安装了pip工具,那么packages将被安装在系统环境
为了避免发生此事,可以在~/.bashrc文件中加上
vim ~/.bashrc
export PIP_REQUIRE_VIRTUALENV=true
使配置生效 source ~/.bashrc
如果在没开启虚拟环境时, 在虚拟环境之外的系统上运行pip,就会提示错误:“Could not find an activated virtualenv (required)”.
virtualenv 用法小总结
-
创建环境
virtualenv [新环境名] :这会再当前目录下创建一个新环境目录
可使用 virtualenv --help 来查看如何使用。可以使用参数 --python=/usr/bin/python3 来创建一个已经安装的的Python环境。 -
使用环境
切换到项目的新环境目录
执行:source ./bin/activate 来激活环境,激活后在命令行的前面会出现新环境名称
接下来可使用pip命令安装新环境需要的各种包。(pip命令在创建新环境时自带) -
退出虚拟环境
deactivate
如果要删除虚拟环境,只需退出虚拟环境后,删除对应的虚拟环境目录即可。不影响其他环境。 -
注意事项
如果没有启动虚拟环境,系统也安装了pip工具,那么套件将被安装在系统环境中,为了避免发生此事,可以在~/.bashrc文件中加上:export PIP_REQUIRE_VIRTUALENV=true
或者让在执行pip的时候让系统自动开启虚拟环境:export PIP_REQUIRE_VIRTUALENV=true -
保证环境一致性
用pip freeze查看当前安装版本
pip freeze
另外:
pip freeze > requirements.txt
这将会创建一个 requirements.txt 文件,其中包含了当前环境中所有包及 各自的版本的简单列表。
可以使用 "pip list"在不产生requirements文件的情况下, 查看已安装包的列表。
这将会使另一个不同的开发者(或者是你本人,如果你本人需要重新创建这样的环境) 在以后安装相同版本的相同包变得容易。
将这个requirements.txt拷贝到新的机器环境下执行:
#pip install -r requirements.txt
这能帮助确保安装、部署和开发者之间的一致性。
虚拟环境管理工具 - Virtualenvwrapper
virtualenv使用起来不是很方便,因为virtual的启动、停止脚本都在特定目录,可能一段时间后,你可能会有很多个虚拟环境散落在系统各处,你可能忘记它们的名字或者位置。鉴于virtualenv不便于对虚拟环境集中管理,所以推荐直接使用virtualenvwrapper。
virtualenvwrapper提供了一系列命令使得和虚拟环境工作变得便利。它把你所有的虚拟环境都放在一个地方。
Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做:
- 将所有虚拟环境整合在一个目录下;
- 管理(新增,删除,复制)虚拟环境;
- 切换虚拟环境等等.
-
安装virtualenvwrapper (确保virtualenv已提前安装)
pip install virtualenvwrapper
-
设置环境变量
export WORKON_HOME=~/Envs
-
创建虚拟环境管理目录. 即创建的虚拟环境都会放到上面设置的~/Envs目录下面
mkdir -p $WORKON_HOME
-
在~/.bashrc文件里配置环境变量, 添加下面两行
vim ~/.bashrc export WORKON_HOME=~/Envs source /usr/bin/virtualenvwrapper.sh
-
使得以上环境变量的配置生效
source ~/.bashrc
-
现在开始使用Virtualenvwrapper 管理虚拟机
(可以删除上面之前创建的虚拟环境 my_test_env 了, 后续都将使用Virtualenvwrapper创建和管理虚拟环境)-
使用mkvirtualenv 命令创建虚拟环境
mkvirtualenv my_test_env_new --python python3
mkvirtualenv project_hui --python=/usr/local/python3/bin/python3.6.1
-
deactivate
退出虚拟环境 -
使用
lsvirtualenv
查看所有虚拟环境 -
使用
workon
切换虚拟环境 -
删除虚拟环境
rmvirtualenv my_test_env_new
-
使用
lssitepackages
命令显示 虚拟环境的 site-packages 目录中的内容。 -
使用
cdvirtualenv
命令导航到当前激活的虚拟环境的目录中,比如说这样就能够浏览它的site-packages。 -
使用
cdsitepackages
命令直接进入到 site-packages 目录中, 和上面的cdvirtualenv 类似
为了方便运维管理, 可以进行一些别名设置, 如下:
vim ~/.bashrc
#virtualenv
alias vte=‘virtualenv’
alias mkvte=‘mkvirtualenv’
alias deact=‘deactivate’
alias rmvte=‘rmvirtualenv’
alias lsvte=‘lsvirtualenv’
alias won=‘workon’
使得上面配置生效 source ~/.bashrc
使用别名进行操作 lsvte -
virtualenv使用时遇到的一个坑点, 经常排查验证, 得出结论如下:
-
root用户和普通用户都可以创建虚拟环境(比如虚拟环境名称为venv),venv虚拟环境的相关文件和文件夹的owner都是该用户,
如果是非root的其他用户激活该venv虚拟环境的话,会因为文件权限的问题导致python库安装失败!!
所以说: 非root用户不要去激活使用其他用户创建的venv虚拟环境! -
一旦以用户A的身份激活venv虚拟环境后,在虚拟环境中就不能再通过su命令切换其他用户,否则会自动退出虚拟环境!
所以说: 在虚拟环境中不要通过su切换用户! -
以用户A的身份激活某venv虚拟环境后,在虚拟环境中所有通过"sudo + cmd"执行的命令,都等同于在虚拟环境外执行。
所以说: 在虚拟环境中不要通过sudo执行命令
win10环境下搭建virtualenvwrapper-win
pip install virtualenv
pip install virtualenvwrapper-win
- 设置系统环境变量
WORKON_HOME= '设置你想统一管理虚拟环境的路径'
- 创建虚拟环境
mkvirtualenv test
( 此环境在你刚才配置的环境变量路径下) - 创建指定python版本的虚拟环境 mkvirtualenv -p python3 test
- 查看所有虚拟环境
workon
- 进入虚拟环境
workon xxx
- 退出虚拟环境
deactivate
- 删除虚拟环境
mvirtualenv test
(虚拟环境名称) - 查看虚拟环境下的安装包
pip list
生成项目所需要的的第三方包依赖文件
pip freeze >requirements.txt
安装
pip install -r requirements.txt