因为最近在做安全帽检测的项目,下载的yolov4源码使用的python3.6,但是实验室服务器上的python是3.5,因为某些原因不能更新实验室的python3.5,所以打算pyenv和pipenv创建一个python3.6的虚拟环境。我的想法是通过pyenv管理多个版本的Python,然后在自己的项目中,设置该项目的python环境为3.7(主环境是3.5,但是我需要3.7);使用pipenv创建3.7的虚拟环境(因为如果要使用python3.7,就必须下载python3.7)
系统:ubuntu 16.04
python版本:python3.5
第一部分:安装pyenv
1 pyenv
pyenv可以在多个python版本之间进行转换。它允许你的ubuntu系统中存在多个python,使用pyenv可以在多个python版本之间轻松地进行转换。转换有两层意思:
(1)使用pyenv改变当前系统的python版本:比如,目前ubuntu的python版本是python3.5,你可以在下载python3.6之后,将系统的python版本由3.5转换成3.6。
(2)使用pyenv可以控制某个项目的python版本。比如,目前ubuntu中多个项目需要使用不同的python版本,有的项目使用python3.5,有的项目使用python3.6,你可以使用pyenv为每个单独的项目创建其合适的python版本,而且每个项目之间的python环境是相互独立的。
2 安装
项目源码:https://github.com/pyenv/pyenv
(1)下载pyenv源码
在这里,我们从github中直接下载pyenv源码,我们讲源码保存在~/.pyenv隐藏目录下,你可以使用ctrl+h找到这个文件。
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
(2)定义一个PYENV_ROOT环境变量,让其指向pyenv repo的下载地址,并且在你的$PATH中添加$PYENV_ROOT/bin,让pyenv获得命令行的使用权。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
(3)向你的shell中添加pyenv init
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
注意:如果在使用pyenv的过程中,出现了死循环,你你需要讲~/.bashrc修改维~/.bash_profile
(4)重启shell,让修改之后的路径生效
exec "$SHELL"
(5)安装相关依赖
sudo apt-get update; sudo apt-get install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
安装相关依赖之后,你可以检查一下自己的pyenv是否安装了。
# (1) 检查pyenv的安装路径
which pyenv
# /home/lupeng/.pyenv/bin/pyenv
# (2) 检查pyenv的shim目录
echo $PATH | grep --color=auto "$(pyenv root)/shims"
#/home/lupeng/.pyenv/shims:/home/lupeng/.pyenv/bin:/opt/ros/kinetic/bin:/home/lupen#g/bin:/home/lupeng/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/s#bin:/bin:/usr/games:/usr/local/games:/snap/bin
(6)安装你需要的python及其对应的版本(假设我要安装python3.7.7)
pyenv install 3.7.7
pyenv rehash
(7) 如果下载python的网速太慢,可以参考下面的方式:
参考了这位老哥的博客
# 如果你要下自己需要的版本,请修改。
# 可以先去http://mirrors.sohu.com/python看看有没有自己要的版本
export PYTHON_BUILD_MIRROR_URL="http://mirrors.sohu.com/python/2.7.12/"
pyenv install 3.7.7
3 卸载
如果你需要pyenv了,你可以卸载
rm -rf ~/.pyenv
4 切换Python版本
在这一部分,借鉴了这位老哥的博客
(1)改变整个系统的python版本(改变全局的python版本)
慎用!慎用!慎用!
重要的事情说三遍,因为可能会有意想不到的事情发生
# (1) 将整个系统的python版本改变成python3.7.7
pyenv global 3.7.7
# (2)检查一下pyenv的python版本
pyenv versions
# * system (set by /home/lupeng/.pyenv/version)
# 3.7.7
# (3) 使用python查看当前的python版本
python3
# Python 3.7.7 (default, Jun 2 2020, 15:09:34)
(2)切换某个项目的python版本(改变局部的版本)
# (1) 切换到某个目录下面
cd something/
# (2)切换到你需要的python版本
pyenv local 3.5.2
# (3) 检查一下
pyenv versions
# system
#* 3.5.2 (set by /home/lupeng/something/.python-version)
# 3.7.7
# 我们可以看到,pyenv一共下载了两个版本,*表示当前的版本
第二部分:安装pipenv
1 pipenv
pipenv可以创建多个虚拟环境,虚拟环境之间和真实的python环境都是分别独立的。这样做有一个好处,每个项目之间依赖的模块和环境都是独立的,不会相互影响。比如在一个服务器中,多个人使用的模块是不同的,如果要将整项目封装成一个exe文件,显然会封装一些多余的模块,这显然会增加exe文件的大小。
2 安装
(1)安装python和pip(如果安装过了,请跳过;如果没有安装,请搜索相关博客下载安装python和pip)
- 你可以使用下面两行代码看看自己是否下载了python和pip
# (1) 查看python版本,如果报错说明你没有安装python
python3 --version
# (2) 查看pip版本,如果报错说明没有安装pip
pip3 --version
下载pip只需要下面两行代码就行(相关链接)
# (1)
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# (2)
python get-pip.py
(2)安装pipenv
sudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pipenv
3 创建虚拟环境
# (1) 创建一个项目工程(如果有,就忽略这一步)
mkdir myproject
# (2) 进入到项目工程路径中
cd myproject
# (3) 创建你需要的python版本
pipenv --python 3.7.7
# (4) 修改pyenv在这个项目中的python版本
pyenv local 3.7.7
经过第三步之后,你会发现myproject工程项目下中会新增一个Pipfile文件
4 安装相关模块
大多数的模块都是国外的,因此下载速度会慢很多,所以在安装模块之前,我们需要修改一下pipenv的镜像源。打开Pipfile文件,将其修改成下面的格式:
[[source]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
verify_ssl = true
name = "pypi"
假设需要安装numpy模块
pipenv install numpy
5 运行你的py代码
(1)首先进入到虚拟环境中
进入虚拟环境之前:
进入虚拟环境之后
我们发现在前面出现了(myproject),这是虚拟环境的名称
(2)运行py文件
假设在myproject工程目录下面有一个hello.py的文件,我们想要运行这个py文件,我们可以这样做
# 运行hello.py文件
python hello.py
(3) 退出虚拟环境
如果我们想要退出虚拟环境,我们可以使用exit退出
6 安装requirements.txt中的安装包
pipenv install -r requirements.txt
7 卸载pipenv
pip3 uninstall pipenv
8 其他命令
使用pipenv --help可以查看使用,下面我列举了常用的命令:
参考了这位兄弟的博客:
# (1) 启动pipenv shell(用于在终端运行)
pipenv shell
# (2) 退出虚拟环境
exit
# (3) 查看所有的安装包
piplist
# (4) 环境内包的依赖展示
pipenv graph
# (5) 查看虚拟环境路径
pipenv --venv
# (6) 卸载安装包
pipenv uninstall
第三部分:将pycharm和pipenv连用
参考了这位老哥的博客
(1)第一种情况:
如果使用pycharm新创建一个项目,在创建项目的时候,选择使用pipenv
然后在设置中选择interpreter,这时候我们就可以选择3.7.7的版本加载Interpreter了
注意:
(1)一定要是Pipenv Environment,而不是Virtualenv Environments,只有通过pipenv安装的模块才可以在pycharm中使用
(2)Base interpreter: /home/lupeng/.pyenv/versions/3.7.7/bin/python
(2)第二种情况:
如果是一个项目是移植过来的(比如从github下载下来的)的项目,我们只需要使用pyenv给这个项目设置一个局部的python环境,然后使用pipenv --python 3.7.7来创建一个虚拟环境就行(python版本视具体情况而定)
配置完环境之后,我们需要给项目文件添加一个interpreter。如下图所示,点击Ok就行。(勾掉 Install packages from Pipfile,这是因为在我添加interpreter的时候,在安装requirements.txt的时候,总是会报错,我索性就先勾掉了)