pyenv 是一个python多版本控制工具,每一个python版本,在pyenv中都是一个虚拟环境,可以安装相关包而不会影响其他环境。
官网 https://github.com/pyenv/pyenv
快捷安装 https://github.com/pyenv/pyenv#the-automatic-installer
方便以后使用,使用docker安装。
1.0先run 一个centos环境
docker run -itd -p 8888:8888 -v /home/python/projects/py-27/:/data/ --name jupyter centos:7
8888端口是jupyter使用端口 /data 是jupyter 的数据目录
登录到jupyter容器:
docker exec -it jupyter bash
修改字符集:
export LANG="en_US.UTF-8"
echo 'export LANG="en_US.UTF-8"' >>/etc/bashrc
2.0安装pyenv
yum install git curl -y
python编译依赖如下
yum install -y gcc make patch gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel
创建普通用户
useradd python
切换到python用户:
su - python
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
由于某些原因,浏览器可以访问,可以下载下来保存为shell脚本执行
https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer
也可下载 https://share.mcabana.com/share/python/pyenv-installer使用
安装完,按照提示处理,把下面的脚本放到当前用户的.bashrc文件末尾
# the following to ~/.bashrc:
export PATH="/home/python/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
加载环境变量:
. ~/.bashrc
2.1 pyenv缓存
在pyenv中安装各个版本,可以要使用pyenv安装,由于连接国外网址比较慢,所以可以利用pyenv的包缓存,提前下载安装包,然后直接安装。
# 缓存目录
~/.pyenv/cache
此cache目录不存在,要自行创建。
mkdir ~/.pyenv/cache
安装python多版本
pyenv install -l # 列出所有可以安装的版本
pyenv install 3.6.9 -vvv # -vvv 列出安装过程,安装时会先去缓存文件中找安装包,找不到再去下载
pyenv install 3.8.0 -vvv
pyenv version # 查看当前的python版本
pyenv versions # 查看所有安装的python版本
* 当前的python版本,system表示当前操作系统使用的版本
pyenv是源代码编译安装Python解释器,所以一定要安装gcc等依赖。
3.0 pyenv使用
3.0.1 pyenv 虚拟环境
pyenv 可以将一个python版本及相关库封装成一个独立的“虚拟环境”,然后将这个虚拟环境应用到某个目录,此目录及其子目录就会继承这个虚拟环境,单个虚拟环境的配置不会影响到其他版本的虚拟环境。
pyenv virtualenv 3.6.9 py369 # 先创建一个虚拟环境,py369是别名
然后切换到项目目录,应用这个py369的环境
可以看到版本已经切换到了 3.6.9,这个python版本只对此目录以及其子目录生效,再目录外面,python版本依然是 系统默认的python版本
这种虚拟环境可以同时创建多个,互不影响。
4.0 pip 包管理工具
pip是Python包管理器,以后安装Python第三方包都需要它,它从3.x开始就集成在Python安装包里面
了。 相当于yum。
查看pip版本,可以看到这个版本只是再py369 这个虚拟环境中的版本。
4.0.1 pip 切换国内源
修改pip配置文件
windows配置文件: ~/pip/pip.ini 。windows家目录,在“运行”中键入 .
Linux配置文件: ~/.pip/pip.conf
内容,可参照 http://mirrors.aliyun.com的pypi帮助
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
(py369) [python@2118050e0593 py-27]$ mkdir ~/.pip (py369) [python@2118050e0593 py-27]$ vi ~/.pip/pip.conf (py369) [python@2118050e0593 py-27]$ cat ~/.pip/pip.conf [global] index-url = https://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com (py369) [python@2118050e0593 py-27]$
pip install pkgname 命令,是安装python包的命令
更新pip
pip install --upgrade pip
更新setuptools
pip install --upgrade setuptools
4.0.2 导出包
这里导出的是pip 安装的包的列表及版本号列表,不是包的安装文件。
项目中开发完毕,要部署前,可以先导出当前使用的各种包的版本。在目标机器上安装这些包。
安装导出的包:
pip install -r requirement.txt
5.0 安装jupyter
jupyter 是基于WEB的交互式笔记本,其中可以非常方便的使用Python。
https://jupyter.org/ 初学python时不建议使用pycharm等IDE工具,因为他们用起来太方便了。
jupyter 使用ipython(python的增强版)
安装Jupyter,也会依赖安装ipython的
pip install jupyter
jupyter 帮助:
jupyter notebook help
5.0.1 启动jupyter
启动时需要注意使用的端口号,默认8888,同时会打开一个浏览器,服务器上一般不会安装浏览器。
可以指定数据目录.
# 使用root 创建数据目录,并授权给python账户
mkdir -p /data/jupyter
chown -R python.python /data/jupyter
cd /data/jupyter
pyenv local py369
# 设置密码
# 启动jupyter
jupyter notebook --ip=0.0.0.0 --no-browser --notebook-dir=/data/jupyter
宿主机上映射的8888 端口已经监听了,使用浏览器访问这个ip的8888端口。
输入密码,即可登录。
注意:
启动时可以使用nohup & 不间断放到后台执行。
nohup jupyter notebook --ip=0.0.0.0 --no-browser --notebook-dir=/home/python/projects/py-27/jupyter &
常用快捷键
a之前插入代码块、b之后插入代码块
L 增加行号
运行代码块 shift + enter,选择下面的代码块
运行当前代码块 ctrl + enter
6.0 使用nignx代理 jupyter
因为我这个jupyter 是部署再一台ECS上的,为了方便使用就用个域名代理,这样就不用每次都输入IP了。
nginx 配置upstream
再http标签内,配置一个upstream
upstream jupyter { server 127.0.0.1:8888; }
再配置一个jupyter的虚拟主机,根据域名将请求发到jupyter 这个upstream
server { listen 172.26.1.178:80; server_name jy.lastack.top; location / { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_pass http://jupyter; } error_log /data/nginx_logs/jy.error.log debug; }
nginx -t 测试下语法
nginx -s relaod 重载配置
最后使用域名访问就可以了。
https://www.hugbg.com/archives/1406.html
2020-02-20 3:27 下午 1F
伤害别人的人,就要有被伤害的觉悟! —《罪恶王冠》
2020-03-19 11:02 上午 2F
有多少人以友谊的名义,爱着一个人,认为拥有,就是失去的开始。
2020-03-19 11:06 上午 3F
我们终会相遇相知,在那悠远的苍穹。