【Tools】python环境操作笔记

python环境操作笔记

1.安装Python虚拟环境

2.python pip 添加清华镜像

3.Ubuntu卸载python后出现系统崩溃以及各种问题的解决方法

4.Python下关于 tkinter 错误的解决方法

5. 字符串前面加u、r、b的含义

6. 中文的unicode编码转换为中文

7.运行python文件,给命令行加参数,指定某几块GPU

8.python中argparse模块介绍

9. import numpy 和 from numpy import * 的区别

10.python进程被kill掉后GPU显存不释放的问题

11.Python中复制与移动的代码

1.安装Python虚拟环境

可参考 https://www.cnblogs.com/technologylife/p/6635631.html
Python虚拟环境的主要目的是为了给不同的工程创建互相独立的运行环境。在虚拟环境下,每一个工程都有自己的依赖包,而与其它的工程无关。不同的虚拟环境中同一个包可以有不同的版本。并且,虚拟环境的数量没有限制,我们可以轻松地用virtualenv或者pyenv等工具来创建多个虚拟环境。

方法1:使用virtualenv (不推荐,进入虚拟环境的命令也比较长,麻烦。可直接使用方法2)

1.安装虚拟环境工具的方法
pip install virtualenv
2.创建一个名字叫“zhz”的虚拟环境:

选择使用一个Python解释器:

virtualenv -p /usr/bin/python3.5 zhz # -p参数指定Python解释器程序路径,这将会使用 /usr/bin/python3.5 中的Python解释器。

下面这种简单方法不推荐

virtualenv zhz

这条命令会自动创建一个叫“zhz”的目录.

3.进入虚拟环境

在“zhz”目录下的bin目录下有一个重要的脚本文件activate,这个脚本就是用来将其所在的虚拟环境设置为当前Python的运行环境:

source zhz/bin/activate

在运行完这行命令后,shell的提示符前会出现虚拟环境"zhz"的名字,表示我们已经进入了这个环境中。
这里要注意区分Anaconda里面的命令,anaconda里面进入tensorflow或者pytorch虚拟环境的命令是 source activate zhz

4.安装各种Python包

使用 “pip install” 命令安装,例如安装numpy包

pip install numpy
5.退出虚拟环境

直接使用deactivate命令即可退出虚拟环境

deactivate

这里要注意区分Anaconda里面的命令,anaconda里面退出tensorflow或者pytorch虚拟环境的命令是 source deactivate

6.删除虚拟环境

要删除一个虚拟环境,只需删除它的文件夹。执行

rm -rf venv

方法2:使用virtualenvwrapper管理虚拟环境 (推荐)

在Ubuntu下使用workon时出现workon: command not found错误。解决方案如下:

鉴于virtualenv不便于对虚拟环境集中管理,所以推荐直接使用virtualenvwrapper。 virtualenvwrapper提供了一系列命令使得和虚拟环境工作变得便利。它把你所有的虚拟环境都放在一个地方。

虚拟环境的引入解决了我们关于环境冲突的问题,但是它同时也带来了一个问题,就是虚拟环境过多所带来的管理问题。virtualenvwrapper就是专门用来解决虚拟环境管理问题的一个工具。我们可以很方便地用它来实现对虚拟环境的创建,删除,拷贝,并且可以轻松地在不同环境间进行切换。

1.安装virtualenvwrapper:
pip install virtualenvwrapper

使用

which virtualenvwrapper.sh

查找到上一步得到的virtualenvwrapper.sh文件的位置,然后把该路径(设为path)填到下面一步的第二句话。

2.配置 ~/.bashrc

将 virtualenv 添加进去:将下面两句话复制到 ~/.bashrc中,保存退出。
下面第二句句需要修改路径为上一步的virtualenvwrapper.sh所在路径path/virtualenvwrapper.sh

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh  #这一句需要修改路径
3.让 bashrc 生效

执行以下命令

source ~/.bashrc
注意:

安装virtualenvwrapper后(即执行完第6步后)就可以使用 workon 命令了。
但是我们会发现使用workon zhz并不能进入我们在第3步使用virtualenv zhz创建的环境zhz中去,并且提示我们使用mkvirtualenv zhz命令创建。

4.创建虚拟环境

指定python版本,可通过"–python"指定python解释器(使用 whereis python命令或者which python可以查看系统中的Python解释器路径)

whereis python
mkvirtualenv --python=/usr/local/python3.5.3/bin/python zhz # 这句话需要更改路径

这样会在WORKON_HOME变量指定的目录下新建名为zhz的虚拟环境,在.virtualenvs/目录下。
查看该环境下都安装了哪些软件

workon zhz
pip list
pip3 list

会发现他们都在只有这几个包才对

Package       Version
------------- -------
pip           19.1.1 
pkg-resources 0.0.0  
setuptools    41.0.1   
wheel         0.33.4 

如果接着要安装pytorch,需要先安装numpy之后才会import torch成功,因为torch依赖numpy

注意:

mkvirtualenv zhz这种不指定python解释器的方法不推荐,因为没有指定python解释器,默认是系统默认的python环境,因此该虚拟环境下有所有python 包,都是之前系统中pip安装的。

使用mkvirtualenv创建虚拟环境之后后,会发现zhz环境创建在/home/zhz/.virtualenvs/目录下,即创建在.virtualenvs/目录下。而方法一是把环境’zhz’创建在/home/zhz/目录下。

5.退出虚拟环境,直接使用deactivate命令即可退出虚拟环境
deactivate
6.删除虚拟环境
rmvirtualenv zhz

2.python pip 添加清华镜像

搜到两篇博客写的:
(1)使用pip 安装python 库时连接国外库时,下载需要很长时间,在配置文件中设置国内镜像可以提高速度。
在linux 下创建 ~/.pip/pip.conf 文件。文件内容如下

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com

原文:https://blog.csdn.net/carbon06/article/details/80392248

(2)网上搜到的pip国内镜像大部分是豆瓣的:
http://pypi.douban.com/simple/
但是根本不全,很多包没有,所以推荐清华大学的:
https://pypi.tuna.tsinghua.edu.cn/simple

临时使用
可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple 例如:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gevent 

,这样就会从清华这边的镜像去安装gevent库。

永久修改
Linux下,修改 ~/.pip/pip.conf (没有就创建一个), 修改 index-url至tuna,内容如下:

 [global]
 index-url = https://pypi.tuna.tsinghua.edu.cn/simple

windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini,内容如下

 [global]
 index-url = https://pypi.tuna.tsinghua.edu.cn/simple

原文:https://blog.csdn.net/kwame211/article/details/85773260

(3)安装tensorflow时,如果使用直接安装速度相对较慢,采取清华大学的镜像会提高速度。

pip3 install tensorflow-gpu -i https://pypi.tuna.tsinghua.edu.cn/simple

由系统自动选择tensorflow-GPU的版本

pip3 install tensorflow-gpu==1.8 -i https://pypi.tuna.tsinghua.edu.cn/simple

人为指定tensorflow版本是1.8,并且是GPU版本

(4) 使用国内镜像下载python库的办法
以下载pandas为例,终端输入命令(前提是python正确安装):

pip  install --index https://pypi.mirrors.ustc.edu.cn/simple/ pandas

注:–index后面也可以换成别的镜像,比如http://mirrors.sohu.com/python/

3.Ubuntu卸载python后出现系统崩溃的解决方法

卸载python进入系统后,如果只有一个桌面,解决方法:
1.按ctrl+alt+f1进入控制台
2.在控制台登录,然后输入

sudo apt-get install ubuntu-minimal ubuntu-standard ubuntu-desktop

3.等待安装结束,重启,问题解决

4.Python下关于tkinter错误的解决方法

(1) Python下"No module named _tkinter"解决方法

当Python出现"No module named _tkinter"的情况,解决方法如下(适用于Ubuntu 16.04、18.04):

sudo apt-get install python-tk python3-tk tk-dev

然后安装我想要的Python版本(这一步一定要在上一步的后面才行,否则还是会导入失败):

pyenv install 3.5.6

然后就可以导入tkinter:

import tkinter

(2)出现"tkinter.TclError: no display name and no $DISPLAY environment variable"的错误

不同的系统有不同的用户图形接口,默认的接口在windows下跑是没有问题的,问题是我们很多的webapp都不在windows上跑,一般在linux上面,所以要更改它的默认配置,把模式更改成Agg。

方法1:(我使用这种方案成功解决问题)

在引入pyplot、pylab之前,要先更改matplotlib的后端模式为”Agg”。直接贴代码:

Import matplotlib
matplotlib.use('Agg')   # 添加这一行
import matplotlib.pyplot asplt

如果不能把 matplotlib.use(‘Agg’)这句代码放在正确的位置上,就解决不了错误。

方法2: (我使用这种方案没成功)

更改配置文件方案:
它的配置文件就是matplotlibrc,在哪里呢?不同系统不一样,系统是ubuntu,运行命令whereis matlotlibrc,可以找到。找不到也没关系,一般在/etc目录下,按如下方法找:

cd ~
cd /etc 
ls

ls后即可以找到matplotlibrc文件。

编辑一下:

sudo vim /etc/matplotlibrc

找到backend这里,然后将其改成Agg.

5. 字符串前面加u、r、b的含义

(1) u/U:表示unicode字符串
不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码。
一般英文字符在使用各种编码下, 基本都可以正常解析, 所以一般不带u;但是中文, 必须表明所需编码, 否则一旦编码转换就会出现乱码。
建议所有编码方式采用utf8
(2) r/R:非转义的原始字符串
与普通字符相比,其他相对特殊的字符,其中可能包含转义字符,即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”\n”表示换行,”\t”表示Tab等。而如果是以r开头,那么说明后面的字符,都是普通的字符了,即如果是“\n”那么表示一个反斜杠字符,一个字母n,而不是表示换行了。
以r开头的字符,常用于正则表达式,对应着re模块。
(3) b:bytes
python3.x里默认的str是(py2.x里的)unicode, bytes是(py2.x)的str, b”“前缀代表的就是bytes
python2.x里, b前缀没什么具体意义, 只是为了兼容python3.x的这种写法

6. 中文的unicode编码转换为中文

在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8"转换为中文,实际上这是unicode的中文编码。可用以下方法转换:

s = u'\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8'
print(s)

以上代码输出:“人生苦短,py是岸”

s = r'\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8'
s = s.decode('unicode_escape')
print (s)

以上代码在Python2输出:“人生苦短,py是岸”,在Python3会出错:AttributeError: ‘str’ object has no attribute ‘decode’

解决方法:直接去掉decode(‘unicode_escape’)

tips:str通过encode()方法可以编码为指定的bytes。反过来,当从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法。反之,则使用encode()方法即可!
python在bytes和str两种类型转换,所需要的函数依次是encode(),decode()

7.运行python文件,给命令行加参数,指定某几块GPU

(1) 在代码中指定GPU的方式为,并非在命令行中这么指定:
os.environ["CUDA_VISIBLE_DEVICES"] = '3'    # 指定一块GPU
os.environ["CUDA_VISIBLE_DEVICES"] = '3,4'  # 指定多块GPU,逗号隔开
切记不要单独分开指定,例如下面这种方法4号会把3号GPU给覆盖,因为这是给变量赋值,只能一次性赋值,没有追加的做法:
os.environ["CUDA_VISIBLE_DEVICES"] = '3'    # 指定一块GPU
os.environ["CUDA_VISIBLE_DEVICES"] = '4'    # 指定一块GPU
(2) 在命令行中添加参数:

在代码中分开添加下面代码:

parser.add_argument('--gpus', default=0, type=str, help='assign gpus')
os.environ["CUDA_VISIBLE_DEVICES"] = opt.gpus

值得说明的是opt.gpus的这个gpu就是取自’–gpus’,没有指定dest所以默认去掉了横杠。有疑问可参考下面一节argparse模块的介绍。

8.argparse模块

摘自:https://blog.csdn.net/weixin_33720452/article/details/88280651

argparse模块是Python中最重要的模块之一,其用于命令行参数解析。此模块的内容非常复杂,本文只选取其中较为实用的部分进行讨论。

使用argparse主要分为三个部分:

【第一部分】 是创建一个解析器实例:
parser = argparse.ArgumentParser()
【第二部分】 为多次调用add_argument函数添加命令行参数,每一次add_argument函数的调用都对应于一个命令行参数的配置。

add_argument函数的主要参数如下:

第一、二位置参数:用于设定一个参数的单横线或双横线参数名,或同时设定这二者。注意,单横线参数名只能使用单个字母,多于一个字母的参数名则必须使用双横线。

以下参数均为add_argument函数的关键字参数:

action:主要用于将普通参数修改为开关参数。当此参数被设定为字符串store_true时,当前命令行参数变为无需参数的开关参数,如果给出此命令行参数,则参数值解析为True,如果不给出,则解析为False。反之,如果action设定为字符串store_false,则开关参数给出时,参数被解析为False,不给出时,才解析为True。

nargs:默认情况下,一个命令行参数只能接一个后续参数值,而如果将nargs设定为字符串星号或加号时,当前参数将自动被解析为列表,且可以在一个命令行参数后给出多个值。星号与加号的区别类似于正则表达式:星号代表能够接受0到任意数量的参数,而加号则表示参数至少需要给出一个。此参数也可给定为一个具体的整数,则参数数量必须严格等于该值。

default:用于设定默认值。当没有为这个命令行参数给出值时,就使用此默认值。

type:给定为一个函数,默认为str。一般可给定为int或float,可将字符串形式的参数通过指定的函数转换为其他类型。

required:默认为False,此时当不给出这个参数时,命令行参数就将被解析为None。而如果指定为True,则该命令行参数必须给出,否则程序将报错。

help:指定为一个帮助字符串。这个字符串将显示在调用-h命令时。

dest:指定为一个变量名,用于后续的parse_args函数。

【第三部分】 为通过parse_args函数将参数解析。

此函数返回一个对象,对此对象进行属性访问即可获取到各个命令行参数。而属性的名称遵循以下规则:如果某个参数定义了 dest 参数,则使用这个参数作为属性名,如果没有,则使用 去掉横线 的位置参数名作为属性名,如-i参数就对应于i属性。

以下通过一个完整的函数说明上文的各种用法:

import argparse

def _inputArguments():

   parser = argparse.ArgumentParser()   # 第一部分

   # 第二部分
   parser.add_argument('-a', '--aa', help = 'Argument: A')
   parser.add_argument('-b', dest = 'bbb', required = True, nargs = '*', help = 'Argument: B')
   parser.add_argument('-c', action = 'store_true', help = 'Argument: C')
   parser.add_argument('-d', type = int, default = 1, help = 'Argument: D')

   args = parser.parse_args()   # 第三部分

   return args.aa, args.bbb, args.c, args.d

print(_inputArguments())

首先,argparse将自动定义-h与—help参数,用于生成帮助信息。

而上述代码定义了四个参数,A参数为较普通的参数,通过-a或—aa进行给定。

B参数为一个必须给出的不定长参数,给出的各个参数之间以空格隔开即可,如:-b 1 2 3,则此参数就将被解析为:[‘1’, ‘2’, ‘3’]。如果不给出b参数,程序将报错,且由于设定了 dest参数,故解析时此参数应使用dest参数所给出的属性名,本例为bbb,而不是b。

C参数为一个开关参数,如果给出-c,则解析出的args.c为True,否则为False。

D参数为一个类型为整形的参数,默认值为1,如果给出D参数,则参数将自动套用int函数转为整数,否则如果不给出此参数,则默认为1。

9. import numpy 和 from numpy import * 的区别

import numpy用numpy的属性时,需要这么使用numpy.func()
from numpy import *用numpy属性时,不需要加上numpy.;

以调用numpy中的random模块为例,第一种方式要用numpy.random,第二种方式直接用random即可。
但是请特别注意:pep标准推荐使用第一种方式,请在日常使用中尽量使用第一种方法,就比如numpy中random,标准库中也有random,但是两者的功能是不同的,使用第二种方式容易造成混淆。

所以一般只在自己定义的python包中使用from ? import *这种方式,自己定义的函数不要与标准库中的函数名相同即可。

注意自己写Python包或者模块的时候需要在文件夹下创建一个__init__.py 的空文件,否则会导入包失败。

10.python进程被kill掉后GPU显存不释放的问题

kill掉服务器里两个python进程,结果发现GPU的显存并没有被释放,使用top或者ps -A命令也查看不到是那些进程。
解决方法:
1 重新开一个shell,然后输入:ps aux|grep user_name|grep python,(注意:这里需要把user_name替换成自己电脑的用户名),所有该用户下的python程序就会显示出来(很多在用watch命令都不会显示的进程在这里可以看到);

2 然后再一个个用kill命令清理:

kill -9 pid	# 或者下面的命令
kill-s 9 pid

11.Python中复制与移动的代码

import shutil
shutil.copy('/home/zhz/a.txt', dst_path)	# 把a.txt文件复制到dst-path路径下
shutil.move('/home/zhz/a.txt', dst_path)	# 把a.txt文件移动到dst-path路径下
shutil.copyfile(filename, dst_path + 'b.txt')	# 把filename文件复制到dst_path路径下,并改名为b.txt

你可能感兴趣的:(Tools,python)