GVKun编程网logo

Python模拟补丁os.environ并返回值(python模拟reversed功能)

13

想了解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模拟补丁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 环境 ##

## 人生苦短我用 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

#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

CentOs 7 同时安装python2、python3,如何创建独立的python3运行环境:virtualenv

  1. 安装完成python3
  2. pip3 install virtuallenv
  3. 检查virtualenv已安装,我的路径 /usr/local/python3/lib/python3.6/site-packages/virtualenv.py 
  4. python3   /usr/local/python3/lib/python3.6/site-packages/virtualenv.py /home/py3new (其中/home/py3new为独立运行环境目录)
  5. 进入/home/py3new/bin/检查python的版本 python3 

centos6.2 安装virtualenv 来隔离python2 和python3 以及部署Django

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等相关内容,可以在本站寻找。

本文标签: