前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >python3 virtualenv

python3 virtualenv

作者头像
Devops海洋的渔夫
发布于 2019-05-30 13:51:51
发布于 2019-05-30 13:51:51
3.4K011
代码可运行
举报
文章被收录于专栏:Devops专栏Devops专栏
运行总次数:11
代码可运行

在安装了python3之后,在项目开发的过程中,使用pip3进行库安装都会下载安装到环境变量设置好的地方,也就是python3安装的根目录下。 但是如果同时要开发多个不同的应用项目,而不同应用项目对于同一个库需要适配不同的版本,这种情况怎么办呢?

一般解决的方式有多种。 一种是采用docker镜像,一个应用使用一个镜像进行独立环境运行。 另一种则是安装virtualenv,实现环境的隔离,将第三方库下载到特定的隔离路径下即可。

下面,我这里使用Centos7要演示一下。

现在看看默认Centos7安装第三方库之后的存放路径

第一个就是/usr/local/python3/bin目录下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 python3]# ls
bin  include  lib  share
[root@server01 python3]# pwd
/usr/local/python3
[root@server01 python3]# ls bin/
2to3              idle3.7   pip3         python3            pyvenv
2to3-3.7          iptest    pip3.7       python3.7          pyvenv-3.7
django-admin      iptest3   __pycache__  python3.7-config   sqlformat
django-admin.py   ipython   pydoc3       python3.7m
easy_install-3.7  ipython3  pydoc3.7     python3.7m-config
idle3             pip       pygmentize   python3-config
[root@server01 python3]# 

可以看到,这里面有安装好的djangoipython等工具。 下面来看看,安装好了virtualenv之后,我再下载这些第三方库,看看存放的路径。

安装virtualenv

pip3 install virtualenv

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 python3]# pip3 install virtualenv
Collecting virtualenv
  Downloading https://files.pythonhosted.org/packages/ca/ee/8375c01412abe6ff462ec80970e6bb1c4308724d4366d7519627c98691ab/virtualenv-16.6.0-py2.py3-none-any.whl (2.0MB)
     |████████████████████████████████| 2.0MB 14kB/s 
Installing collected packages: virtualenv
Successfully installed virtualenv-16.6.0
WARNING: You are using pip version 19.1, however version 19.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
[root@server01 python3]# 
[root@server01 python3]# cd bin/
[root@server01 bin]# ls
2to3              idle3.7   pip3         python3            pyvenv
2to3-3.7          iptest    pip3.7       python3.7          pyvenv-3.7
django-admin      iptest3   __pycache__  python3.7-config   sqlformat
django-admin.py   ipython   pydoc3       python3.7m         virtualenv
easy_install-3.7  ipython3  pydoc3.7     python3.7m-config
idle3             pip       pygmentize   python3-config
[root@server01 bin]# ./virtualenv -v
You must provide a DEST_DIR
Usage: virtualenv [OPTIONS] DEST_DIR

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -v, --verbose         Increase verbosity.
  -q, --quiet           Decrease verbosity.
  -p PYTHON_EXE, --python=PYTHON_EXE

可以看到已经安装好了二进制执行文件在python3的bin目录下。

软链接virtualenv到/usr/bin目录

上面虽然已经安装好了,但是如果到其他路径下执行命令,就会如下报错:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 ~]# virtualenv -v
-bash: virtualenv: command not found

执行将virtualenv的二进制可执行文件软链接到/usr/bin目录即可。 ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv

执行如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 ~]# ls /usr/local/python3/bin/virtualenv 
/usr/local/python3/bin/virtualenv
[root@server01 ~]# ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
[root@server01 ~]# 
[root@server01 ~]# virt
virtualenv  virt-what   
[root@server01 ~]# virtualenv -v
You must provide a DEST_DIR
Usage: virtualenv [OPTIONS] DEST_DIR

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -v, --verbose         Increase verbosity.
  -q, --quiet           Decrease verbosity.

软链接到usr/bin目录之后,就可以在全局目录下执行了。

创建一个python3独立的运行环境

在上面安装好了virtualenv工具之后,下面就可以来创建一个独立安装第三方库的运行环境了。

首先创建一个运行独立环境的项目目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 ~]# mkdir myproject
[root@server01 ~]# cd myproject/
[root@server01 myproject]# ls
[root@server01 myproject]# 

创建这个目录的独立第三方库安装环境,命名为venv

virtualenv --no-site-packages venv

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 myproject]# virtualenv --no-site-packages venv
Using base prefix '/usr/local/python3'
New python executable in /root/myproject/venv/bin/python3.7
Also creating executable in /root/myproject/venv/bin/python
Installing setuptools, pip, wheel...
done.
[root@server01 myproject]# 

这里使用了--no-site-packages参数,就是不带任何python环境下的第三方库过来。这样就创建了一个纯净的python环境了。

查看新建的venv环境

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 myproject]# ls
venv
[root@server01 myproject]# ls venv/
bin  include  lib
[root@server01 myproject]# 

可以看到,在当前目录下多了一个venv的目录,这个目录里面有基础的python环境。

那么怎么使用呢?

使用source进入该环境

source venv/bin/activate

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 myproject]# source venv/bin/activate
(venv) [root@server01 myproject]# 
(venv) [root@server01 myproject]# ls
venv
(venv) [root@server01 myproject]# 

可以看到进入环境之后,命令多了(venv)的前缀。此时,如果再这个环境想要使用ipython3能不能使用呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(venv) [root@server01 myproject]# ipython3
/usr/local/python3/lib/python3.7/site-packages/IPython/core/interactiveshell.py:925: UserWarning: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
  warn("Attempting to work in a virtualenv. If you encounter problems, please "
Python 3.7.1 (default, May  2 2019, 14:58:59) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import django                                                            

按照验证来看,这样是不影响使用的。但是其实是跳到了全局环境去操作了,所以import django也没有报错。

如果不使用ipython3,直接使用python3,则会如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(venv) [root@server01 myproject]# python3
Python 3.7.1 (default, May  2 2019, 14:58:59) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'django'
>>> 

说明原生的python3并没有使用全局环境的第三方库,如果要使用的话,就要在venv下安装对应的第三方库。

在venv环境下安装django库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(venv) [root@server01 myproject]# pip3 install django
Collecting django
  Using cached https://files.pythonhosted.org/packages/b1/1d/2476110614367adfb079a9bc718621f9fc8351e9214e1750cae1832d4090/Django-2.2.1-py3-none-any.whl
Collecting pytz (from django)
  Using cached https://files.pythonhosted.org/packages/3d/73/fe30c2daaaa0713420d0382b16fbb761409f532c56bdcc514bf7b6262bb6/pytz-2019.1-py2.py3-none-any.whl
Collecting sqlparse (from django)
  Using cached https://files.pythonhosted.org/packages/ef/53/900f7d2a54557c6a37886585a91336520e5539e3ae2423ff1102daf4f3a7/sqlparse-0.3.0-py2.py3-none-any.whl
Installing collected packages: pytz, sqlparse, django
Successfully installed django-2.2.1 pytz-2019.1 sqlparse-0.3.0
(venv) [root@server01 myproject]# 

安装之后,django库则会保存在venvbin目录下,如下:

此时,在用原生的python3导入django库,看看会不会报错。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(venv) [root@server01 myproject]# ls venv/bin/
activate       activate_this.py  easy_install      pip3.7       python3.7
activate.csh   activate.xsh      easy_install-3.7  __pycache__  python-config
activate.fish  django-admin      pip               python       sqlformat
activate.ps1   django-admin.py   pip3              python3      wheel
(venv) [root@server01 myproject]# python3
Python 3.7.1 (default, May  2 2019, 14:58:59) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> 
>>> django.get_version()
'2.2.1'
>>> 

可以看到已经可以使用了django库了。

那么如何退出这个venv的环境呢?

使用deactivate命令,退出venv的环境

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(venv) [root@server01 myproject]# deactivate
[root@server01 myproject]# 
[root@server01 myproject]# 

可以看到左边已经没有显示(venv)的环境了。说明已经退出了独立运行的虚拟环境,回到了系统环境。

其他更多用法

  • 指定 Python 版本创建虚拟环境 virtualenv -p /usr/bin/python py2venv
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 ~]# mkdir project_python2
[root@server01 ~]# cd project_python2/
[root@server01 project_python2]# ls -ll /usr/bin/python
lrwxrwxrwx. 1 root root 7 Mar 31 11:53 /usr/bin/python -> python2
[root@server01 project_python2]# 
[root@server01 project_python2]# virtualenv -p /usr/bin/python py2venv
Running virtualenv with interpreter /usr/bin/python
  No LICENSE.txt / LICENSE found in source
New python executable in /root/project_python2/py2venv/bin/python
Installing setuptools, pip, wheel...
done.
[root@server01 project_python2]# 

  • 继承系统三方库 --system-site-packages 添加参数--system-site-packages,项目检索库的时候,也会到系统的三方库中找 不添加时,默认只到虚拟环境中查找库
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 ~]# mkdir project_python3
[root@server01 ~]# cd project_python3/
[root@server01 project_python3]# ls
[root@server01 project_python3]# virtualenv --system-site-packages py3venv
Using base prefix '/usr/local/python3'
New python executable in /root/project_python3/py3venv/bin/python3.7
Also creating executable in /root/project_python3/py3venv/bin/python
Installing setuptools, pip, wheel...
done.
[root@server01 project_python3]# 
[root@server01 project_python3]# source py3venv/bin/activate
(py3venv) [root@server01 project_python3]# python3
Python 3.7.1 (default, May  2 2019, 14:58:59) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django    # 直接继承了系统的python第三方库
>>> django.get_version()
'2.2.1'
>>> exit()
(py3venv) [root@server01 project_python3]# 
# 在虚拟环境下,安装redis库
(py3venv) [root@server01 project_python3]# pip3 install redis
Collecting redis
  Downloading https://files.pythonhosted.org/packages/ac/a7/cff10cc5f1180834a3ed564d148fb4329c989cbb1f2e196fc9a10fa07072/redis-3.2.1-py2.py3-none-any.whl (65kB)
     |████████████████████████████████| 71kB 32kB/s 
Installing collected packages: redis
Successfully installed redis-3.2.1
(py3venv) [root@server01 project_python3]# 
# 在虚拟环境下,导入redis库
(py3venv) [root@server01 project_python3]# python3
Python 3.7.1 (default, May  2 2019, 14:58:59) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import redis
>>> 
(py3venv) [root@server01 project_python3]# deactivate 
[root@server01 project_python3]# 
# 退出虚拟环境之后,导入redis失败,说明虚拟环境安装的redis库,是不会安装到系统环境的。
[root@server01 project_python3]# python3
Python 3.7.1 (default, May  2 2019, 14:58:59) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import redis
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'redis'
>>> 
  • 删除虚拟环境 直接删除虚拟环境所在目录即

  • 项目交接

场景:确保共享的项目能够在其他电脑上正常运行 解决:

方案一: 连同虚拟环境和项目一起拷贝给他人

方案二: 在虚拟环境中,冻结依赖需求文本 把项目和依赖需求文本给他人 他人在本地创建一个新的虚拟环境,并根据依赖需求文本安装相关库

技能点: 冻结项目需求文本 pip3 freeze > requirements.txt 根据需求文本,安装项目依赖库 pip3 install -r requirements.txt (在激活的虚拟环境中)

示例操作如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 project_python3]# pip3 freeze > requirements.txt
[root@server01 project_python3]# ls
py3venv  requirements.txt
[root@server01 project_python3]# cat requirements.txt 
backcall==0.1.0
decorator==4.4.0
Django==2.2.1
ipython==7.5.0
ipython-genutils==0.2.0
jedi==0.13.3
parso==0.4.0
pexpect==4.7.0
pickleshare==0.7.5
prompt-toolkit==2.0.9
ptyprocess==0.6.0
Pygments==2.3.1
pytz==2019.1
six==1.12.0
sqlparse==0.3.0
traitlets==4.3.2
virtualenv==16.6.0
wcwidth==0.1.7
[root@server01 project_python3]# pip3 install -r requirements.txt

  • windows下操作 使用Git Bash工具,执行如下:

生成的步骤,就要用cmd来执行了。

virtualenv的官方文档

更加详细的内容可以访问官方文档

在pycharm使用

  • 创建项目
  • 创建后的文件结构
  • pycharm默认直接就是使用虚拟环境的库
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.05.17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Pandas数据结构之Series
本节介绍 Pandas 基础数据结构,包括各类对象的数据类型、索引、轴标记、对齐等基础操作。首先,导入 NumPy 和 Pandas:
用户1564362
2019/11/27
9780
Pandas 之: 深入理解 Pandas 的数据结构
本文将会讲解 Pandas 中基本的数据类型 Series 和 DataFrame,并详细讲解这两种类型的创建,索引等基本行为。
子润先生
2021/06/18
4100
Python 数据处理:Pandas库的使用
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的博客 🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 🥭本文内容:Python 数据处理:Pandas库的使用 ---- Python 数据处理:Pandas库的使用 1.Pandas 数据结构 1.1 Series 1.2 DataFrame 2.基本功能 2.1 重新索引 2.2 丢弃指定轴上的项 2.3 索引、选取和过滤 2.4 用 loc 和 iloc 进行选取 2.5
小嗷犬
2022/11/15
23K0
初探pandas——安装和了解pandas数据结构
Series是一种一维的数组型对象,包含一个值序列(与numpy中的数据类型相似),数据标签(称为索引(index))。
LRainner
2020/07/15
5760
Pandas之:深入理解Pandas的数据结构
本文将会讲解Pandas中基本的数据类型Series和DataFrame,并详细讲解这两种类型的创建,索引等基本行为。
程序那些事
2021/06/11
5740
pandas基础和应用(1)
pandas提供了三种数据对象,分别是Series,DataFrame和Panel。Series用于保存一维数据,DataFrame用于保存二维的数据,Panel用于保存三维类或者可变维度的数据。 系列(Series)是能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组。轴标签统称为索引。
用户1359560
2018/11/07
6740
python pandas 基础之一
pandas的两大数据结构:Series和DataFrame. Series用于储存一个序列一样的一维数据;DataFrame用于多维数据。
小末快跑
2019/07/03
1.4K0
pandas(一)
data= pd.Series([0.25,0.5,0.75,1.0])   默认索引是数字
py3study
2020/01/16
9930
上手Pandas,带你玩转数据(1)-- 实例详解pandas数据结构
昨天写一个小项目的时候,想用pandas把数据写入到Excel中去,结果发现我原先写的那套pandas教程是真的垃圾啊。 痛定思痛,我决定重写一份。
看、未来
2021/09/18
6.7K0
Python数据分析之pandas基本数据结构
Python数据分析之numpy数组全解析 Python数据分析之Pandas读写外部数据文件
统计学家
2019/12/23
1.3K0
Python数据分析之pandas基本数据结构
基础知识篇(一)Pandas数据结构
本文介绍pandas的基本数据类型,要熟练使用pandas,需要熟悉它的两种主要数据结构:Series和DataFrame 1.Series Series 形如于一维矩阵的对象,通常用来存储一列数值,其包含数值列(与numpy数据格式相似)和标签列(与数值列相对应,称之为index列) 1.1 Series生成 最简单的Series可以由一个数值list生成 import pandas as pd from pandas import Series, DataFrame import numpy as np
秋枫学习笔记
2023/01/30
8770
Pandas数据结构之DataFrame
DataFrame 是由多种类型的列构成的二维标签数据结构,类似于 Excel 、SQL 表,或 Series 对象构成的字典。DataFrame 是最常用的 Pandas 对象,与 Series 一样,DataFrame 支持多种类型的输入数据:
用户1564362
2019/11/27
1.6K0
Pandas的数据结构Pandas的数据结构
Pandas的数据结构 import pandas as pd Pandas有两个最主要也是最重要的数据结构: Series 和 DataFrame Series Series是一种类似于一维数组的 对象,由一组数据(各种NumPy数据类型)以及一组与之对应的索引(数据标签)组成。 类似一维数组的对象 由数据和索引组成 索引(index)在左,数据(values)在右 索引是自动创建的 [图片上传失败...(image-3ff688-1523173952026)] 1. 通过list构建Series
王小婷
2018/05/31
9020
【Pandas】pandas的主要数据结构
pandas是数据分析领域的常用库,它被专门设计来处理表格和混杂数据,这样的设计让它在数据清洗和分析工作上更有优势。
树枝990
2020/08/19
1.4K0
python 数据分析工具包 pandas(一)
pandas 是专为 python 编程语言设计的高性能,简单易用的数据结构和数据分析工具库,它建立在 numpy 之上,可以许多第三方库完美集成在同一个科学计算环境中。pandas 被广泛应用于金融,统计,社会科学和许多工程技术领域,处理典型数据分析案例。
我是一条小青蛇
2019/10/23
9590
python 数据分析工具包 pandas(一)
Pandas | 数据结构
上一期介绍了将文件加载到Pandas对象,这个对象就是Pandas的数据结构。本次我们就来系统介绍一下Pandas的数据结构。
生信real
2022/12/20
1.6K0
Pandas | 数据结构
Pandas 数据结构
一、Series 数据结构 1.是什么? Series 是一种类似于一维数组的对象,由一组数据及一组数据标签(即索引)组成。 第一列是 数据标签(索引);第二列是 具体数据。 2.为什么? 3.怎么做? 导包: import pandas as pd (1)创建一个Series:使用 Series()方法 1)传入一个列表list: 只传入一个列表不指定数据标签,那么 Series会默认使用从0开始的数作为数据标签(索引)。 import pandas as pd s1 = pd.Serie
见贤思齊
2020/08/05
1.1K0
pandas(series和读取外部数据)
pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
用户7886150
2020/12/26
1.2K0
【Python环境】Python中的结构化数据分析利器-Pandas简介
Pandas是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。panel data是经济学中关于多维数据集的一个术
陆勤_数据人网
2018/02/27
15.2K0
数据分析篇 | Pandas基础用法1
看本文之前先看看Panda是概览,大致了解一下:数据分析篇 | Pandas 概览
龙哥
2019/12/02
2.3K0
相关推荐
Pandas数据结构之Series
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档