自动安装anaconda(conda)

想实现自动安装anaconda(conda)python多版本环境,就用了expect实现自动应答。
脚本如下:

#!/usr/bin/expect
set timeout -1
spawn sh Anaconda2-2019.10-Linux-x86_64.sh
expect "press ENTER to continue"
send "\r"

expect "from Microsoft Corporation"
send "q"

expect "Do you accept the license terms"
send "yes\r"

expect "/root/anaconda2"
send  "/usr/local/anaconda2\r"

expect "by running conda init"
send "no\r"

expect eof

[root@MiWiFi-RA69-srv ~]# chmod 777 conda.sh
[root@MiWiFi-RA69-srv ~]# ./conda

测试通过。

最后发现anaconda支持静默安装。。。

# Anaconda 静默安装
官文:https://conda.io/projects/conda/en/latest/user-guide/install/macos.html#install-macos-silent
-b: Batch mode with no PATH modifications to shell scripts. Assumes that you agree to the license agreement. Does not edit shell scripts such as , , , etc..bashrc.bash_profile.zshrc

-p: Installation prefix/path.

-f: Force installation even if prefix already exists.-p

# 静默安装方法

[root@MiWiFi-RA69-srv ~]# sh Anaconda2-2019.10-Linux-x86_64.sh -b -p /usr/local/anaconda2/

conda版本下载归档:
https://repo.anaconda.com/archive/

python3 requests配置socks5代理访问

采集数据时,访问次数过多会被封IP,所以加上socks5代理去请求。

#!/usr/bin/python
# coding=utf-8

import requests

headers = {
    'Host': 'www.rootop.org',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',
}

# socks5无认证
#proxies = {'https': 'socks5://61.97.x.x:20115','http': 'socks5://61.97.x.x:20115'}

# socks5带密码认证
proxies = {'https': 'socks5://user111:pass111@61.97.x.x:20115','http': 'socks5://user111:pass111@61.97.x.x:20115'}
page = requests.get("https://www.rootop.org/pages/4927.html", headers=headers, proxies=proxies)
print(page.text)

nginx日志可以看到来源ip变成代理服务器的ip。

{
"remote_addr":"61.97.x.x",
"time_local":"31/Mar/2021:09:54:02 +0800",
"method":"GET","uri":"/index.php",
"server_protocol":"HTTP/1.1",
"request":"GET /pages/4927.html HTTP/1.1",
"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36"
}

python virtualenv虚拟环境

virtualenv比较合适同一个python版本下,同软件包不同版本的环境独立。

# 通过pip安装功能
[root@MiWiFi-RA69-srv]# pip install virtualenv

# 创建一个文件夹,在此生成虚拟环境
[root@MiWiFi-RA69-srv]# mkdir new && cd new

# 创建
[root@MiWiFi-RA69-srv new]# virtualenv env
ImportError: No module named zipp 得到一个报错
[root@MiWiFi-RA69-srv new]# pip install zipp==1.2.0

# 重新创建
ImportError: No module named configparser 得到一个报错
[root@MiWiFi-RA69-srv new]# pip install configparser==3.5.0

[root@MiWiFi-RA69-srv new]# virtualenv env

# 创建一个不包含任何第三方包的独立环境 --no-site-packages
[root@MiWiFi-RA69-srv new]# virtualenv --no-site-packages venv

# 进入环境
[root@MiWiFi-RA69-srv new]# source env/bin/activate
# 离开环境
(env) [root@MiWiFi-RA69-srv new]# deactivate 

# 删除环境
[root@MiWiFi-RA69-srv new]# rm -rf env

如果需要其他python版本,则需要在系统中先安装目标版本,再通过-p参数指定创建环境。
virtualenv -p /usr/bin/python2.7 env

之前有写过conda实现多个py版本,它有个好处就是可以直接指定python版本,会自己下载,免去单独安装的步骤。

python元组只有一个元素

print( ('aaa') )

返回字符串 aaa

print( ('aaa',) )

返回一个元组 (‘aaa’,)

# 列表包元组

print( [('aaa')] )

返回列表 [‘aaa’]

print( [('aaa',)] )

返回列表包元组 [(‘aaa’,)]

所以要实现单个元素的元组,就需要在元素后面加一个逗号。

centos7中利用conda实现多python版本

conda可以用来解决系统中多个python版本共存,也支持其他语言。
这里主要用来解决python3.8下写的脚本在centos7中运行。

conda安装需要 Anaconda 或 Miniconda,推荐安装Anaconda。区别去下面官方看。

下载地址:https://www.anaconda.com/distribution/#download-section
安装文档:https://conda.io/projects/conda/en/latest/user-guide/install/linux.html
Anaconda2 用于系统中python版本为2.x
Anaconda3 用于系统中python版本为3.x
我这里为centos7,下载Anaconda2版本的。

[root@localhost ~]# wget -c https://repo.anaconda.com/archive/Anaconda2-2019.10-Linux-x86_64.sh
[root@localhost ~]# bash Anaconda2-2019.10-Linux-x86_64.sh

最后他会提示是否init,输入yes初始化,重新ssh登录服务器。

(base) [root@localhost ~]# 

会看到前面有个 (base) ,这就是进去了conda环境中了。

# 创建一个python3.8的环境

(base) [root@localhost ~]# conda create --name py3 python=3.8

# 查看已有的环境

(base) [root@localhost ~]# conda info --envs
# conda environments:
#
base                  *  /root/anaconda2
py3                      /root/anaconda2/envs/py3

# 切换版本

(base) [root@localhost ~]# source activate py3
(py3) [root@localhost ~]# python -V
Python 3.8.2

# 退出conda环境

(base) [root@localhost ~]# source deactivate base
[root@localhost ~]# 

# 移除环境

[root@localhost ~]# conda remove -n py3 --all

这样就很方便把py3的脚本在centos中运行,而且不用更改系统python版本。

PS:清华镜像及加速配置:https://mirror.tuna.tsinghua.edu.cn/help/anaconda/