想了解Python模拟补丁os.environ并返回值的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于python模拟reversed功能的相关问题,此外,我们还将为您介绍关于##人生苦短我
想了解Python模拟补丁os.environ并返回值的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于python模拟reversed功能的相关问题,此外,我们还将为您介绍关于## 人生苦短我用 python [0x09] 使用 virtualenv 隔离 python 环境 ##、#Python学习#python虚拟环境——virtualenv、CentOs 7 同时安装python2、python3,如何创建独立的python3运行环境:virtualenv、centos6.2 安装virtualenv 来隔离python2 和python3 以及部署Django的新知识。
本文目录一览:- Python模拟补丁os.environ并返回值(python模拟reversed功能)
- ## 人生苦短我用 python [0x09] 使用 virtualenv 隔离 python 环境 ##
- #Python学习#python虚拟环境——virtualenv
- CentOs 7 同时安装python2、python3,如何创建独立的python3运行环境:virtualenv
- centos6.2 安装virtualenv 来隔离python2 和python3 以及部署Django
Python模拟补丁os.environ并返回值(python模拟reversed功能)
使用模拟进行单元测试conn():
app.py
import mysql.connectorimport os, urlparsedef conn(): if "DATABASE_URL" in os.environ: url = urlparse(os.environ["DATABASE_URL"]) g.db = mysql.connector.connect( user=url.username, password=url.password, host=url.hostname, database=url.path[1:], ) else: return "Error"
test.py
def test_conn(self): with patch(app.mysql.connector) as mock_mysql: with patch(app.os.environ) as mock_environ: con() mock_mysql.connect.assert_callled_with("credentials")
错误:未调用 断言 mock_mysql.connect.assert_called_with
。
我认为这是因为’Database_url’不在我打补丁的os.environ中,并且因为没有对mysql_mock.connect进行该测试调用。
问题:
1为了使此测试代码有效,我需要进行哪些更改?
2.我还必须修补’urlparse’吗?
答案1
小编典典您可以尝试此解决方案。只需调用conn
一个dummy
参数即可:
import mysql.connectorimport os, urlparse@mock.patch.dict(os.environ, {"DATABASE_URL": "mytemp"})def conn(mock_A): print os.environ["mytemp"] if "DATABASE_URL" in os.environ: url = urlparse(os.environ["DATABASE_URL"]) g.db = mysql.connector.connect( user=url.username, password=url.password, host=url.hostname, database=url.path[1:], ) else: return "Error"
或者,如果您不想修改原始功能,请尝试以下解决方案:
def func(): print os.environ["mytemp"]def test_func(): k = mock.patch.dict(os.environ, {"mytemp": "mytemp"}) k.start() func() k.stop()test_func()
## 人生苦短我用 python [0x09] 使用 virtualenv 隔离 python 环境 ##
<font color=red> 文章内容为原创,欢迎转载请注明出处 </font>
作者: EflyPro-> 晦明禅师
1. 背景
在开发 python 项目中,我们可能会遇到一种场景,在同一台机器上的 python 运行环境需要隔离,特别是在多人使用和存在不同版本库情况下,比如 A 开发人员用了库 1.0,B 开发人员用了库 2.0,为了使系统默认的 python 环境不受污染,需要一个工具,能对 python 开发运行环境进行有效隔离。
2.virtualenv
virtualenv 则是解决了 python 开发运行环境隔离问题的一种解决方案,具体可以参考官网
<a href="https://virtualenv.pypa.io/en/stable/"> 点击访问官网 </a>
virtualenv 实现了安装包的隔离,在某一环境下安装包不会影响其他的环境,还可以针对不同的环境设置不同版本的 python 解析器,比如可以选择 python2 的,也可以选择 python3,下面我们通过简单的例子来示范 virtualenv 的安装与使用。
3. 安装与使用
安装 virtualenv 很简单,只需要使用 python 包管理工具 pip 安装即可
pip install virtualenv
安装顺利完成之后,我们可以开始创建 python 运行环境了
#我们在/tmp目录下进行我们的示范试验
cd /tmp
mkdir test
cd test
#先创建一个test01的环境
virtualenv test01
#再创建一个test02的环境
virtualenv test02
#我们可以使用ls命令,可以看到test01,test02文件夹下面都有各自的python运行环境所需要的目录和文件
ls test01
ls test02
#下面我们演示设置不同python解析器,默认情况下采用的是python2,我们对test02设置采用python3的解析器
virtualenv -p /usr/bin/python3.5 test02
#在使用test01,test02环境之前,我们需要执行激活脚本
#使用test01环境
source test01/bin/activate
#执行完后,你会发现终端名称发生了变化,比如本机返回
(test01) root@iZwz9fz5sbmqiuiukgse8pZ:/tmp/test#
#这样我们就可以清晰得知当前是在test01环境下,我们看看python版本号
python -V
#返回以下内容
Python 2.7.12
#执行deactivate退出当前环境回到普通终端状态
deactivate
#我们再进去test02环境看看
source test02/bin/activate
#返回终端切换成test02
(test02) root@iZwz9fz5sbmqiuiukgse8pZ:/tmp/test#
#查看python解析器版本
python -V
#返回以下内容
Python 3.5.2
#从上面的实例,我们可以看到使用virtual确实实现了python运行环境的隔离,下面我们在不同环境下安装包看看是否隔离
#我们在test02环境下用pip安装daemon库
(test02) root@iZwz9fz5sbmqiuiukgse8pZ:/tmp/test# pip install daemon
#安装成功后,我们看看当前安装的库
(test02) root@iZwz9fz5sbmqiuiukgse8pZ:/tmp/test# pip list
appdirs (1.4.3)
daemon (1.1)
packaging (16.8)
pip (9.0.1)
pyparsing (2.2.0)
setuptools (35.0.1)
six (1.10.0)
wheel (0.29.0)
#我们看到test02环境已经安装了daemon库了,我们切换过去test01环境,看看
appdirs (1.4.3)
packaging (16.8)
pip (9.0.1)
pyparsing (2.2.0)
setuptools (35.0.1)
six (1.10.0)
wheel (0.29.0)
#我们可以看到test01环境没有daemon,证明环境的包是隔离的
由睿江云提供,想了解更多,请登陆 www.eflycloud.com
#Python学习#python虚拟环境——virtualenv
前言
在Ubuntu系统中,系统一般会默认安装python2.x和3.x,像我近期买的阿里云ECS默认安装了2.7.2和3.5.2,所有pip安装的第三方包都会被放在默认的site-apckages目录下。
如果我们在同一台机器上同时开发多个应用程序,问题一:python的版本问题,不同程序可能需要不同的版本;问题二:需要的不同第三方包管理,如果都放在一起总感觉不太好,强迫症。
如果可以为每一个应用程序开辟一个独立的python运行环境就好了,所以就有了 virtualven。
下载virtualenv
apt更新
sudo apt-get update //更新软件源中的所有软件列表
sudo apt-get upgrade //对照列表,更新已安装的软件
pip安装virtualenv
pip install virtualenv //不讨论pip和pip3问题,
使用virtualenv
新建项目目录
sudo mkdir myproject
cd myproject
创建虚拟环境
virtualenv -p /usr/bin/python3.5 --no-site-packages venv
一般项目的虚拟环境命名为venv。参数解释:
- -p /usr/bin/python3.5,-p指定解释器路径,可以指定虚拟环境python版本。
- --no-site-packages,已经安装到系统Python环境中的所有第三方包都不会复制过来,得到一个不带任何第三方包的“干净”的Python运行环境。
激活虚拟环境
source venv/bin/activate
通过source命令进入虚拟环境,注意到命令提示符有所变化,前面多了一个(venv),表示当前环境是一个名为venv的Python环境。
安装第三方包
pip install django
在venv环境下,用pip安装的包都被安装到venv这个环境下,系统Python环境不受任何影响。也就是说,venv环境是专门针对myproject这个应用创建的。
退出虚拟环境
deactivate
回到正常系统环境后,再使用pip安装的第三方包就会放在系统python环境中。
virtualenv是如何创建“独立”的Python运行环境的?
原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境。所以想要创建虚拟环境,系统应该先安装该版本的python环境。
项目移植
在项目打包移植时可以抛弃虚拟环境(一般很大),利用命令生成项目所引用的第三方包,在项目部署时新建虚拟环境,重新下载这些第三方包即可。
pip list //查看当前环境中安装的第三方库
pip freeze > requirements.txt //导出当前环境第三方库信息
pip install -r requirements.txt //移植机器重新安装第三方库
总结
virtualenv为应用程序提供了隔离的Python运行环境,解决了不同应用间多版本的冲突问题。如果一台机子上有太多太多的项目,可以考虑使用virtualenvwrapper来统一管理。
Python最强的IDE——PyCharm在创建项目时会自动创建虚拟环境,安装第三方包可以通过左上角file-settings-project interpreter,点击"+"号,搜索第三方包直接安装就好。
参考链接
virtualenv - 廖雪峰的官方网站:virtualenv
python虚拟环境:virturlenv
本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
CentOs 7 同时安装python2、python3,如何创建独立的python3运行环境:virtualenv
- 安装完成python3
- pip3 install virtuallenv
- 检查virtualenv已安装,我的路径 /usr/local/python3/lib/python3.6/site-packages/virtualenv.py
- python3 /usr/local/python3/lib/python3.6/site-packages/virtualenv.py /home/py3new (其中/home/py3new为独立运行环境目录)
- 进入/home/py3new/bin/检查python的版本 python3
centos6.2 安装virtualenv 来隔离python2 和python3 以及部署Django
下载Python-3.6.0
https://download.csdn.net/download/linxi7/10328013
安装软件
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel xz gcc zlib zlib-devel
安装
解压Python-3.6.0.tar.gz mkdir /usr/local/python3 cd Python-3.6.0 ./configure --prefix=/usr/local/python3 make make install
虽然python3.6.0安装完了,但是目前直接python进去还是默认系统自带的2.6.6的。
安装virtualenv 和建立隔离的python3.6环境
#安装virtualenv pip3 install virtualenv / pip install virtualenv #创建项目环境 mkdir /tmp/test #为目录创建虚拟环境 virtualenv -p /usr/local/python3/bin/python3 /tmp/test/ #激活虚拟环境 source /tmp/test/bin/activate #测试结果 [root@roe_jump_sg test]# source bin/activate (test) [root@roe_jump_sg test]# python Python 3.6.0 (default,Apr 4 2018,18:00:04) [GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux Type "help","copyright","credits" or "license" for more information. >>> #退出环境变量 deactivate
安装Django
https://download.csdn.net/download/linxi7/10328031
解压Django-1.11.6.tar.gz 进入刚刚解压的目录 python setup.py install 进入python,import django测试看是否成功
这样就可以进行基于python3.6的Django项目开发或者环境部署了。
关于Python模拟补丁os.environ并返回值和python模拟reversed功能的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于## 人生苦短我用 python [0x09] 使用 virtualenv 隔离 python 环境 ##、#Python学习#python虚拟环境——virtualenv、CentOs 7 同时安装python2、python3,如何创建独立的python3运行环境:virtualenv、centos6.2 安装virtualenv 来隔离python2 和python3 以及部署Django等相关内容,可以在本站寻找。
本文标签: