场景1:如果我们想在python3上运行2.x版本的代码,就需要对代码进行大量的修改,产生不必要的工作量。
步骤 1:官网 (速度慢)或者国内镜像(速度快)下载Python 对应版本;
步骤 2: 点击可执行文件安装 Python,注意选择“Add python.exe to Path”;
步骤 3: 打开 CMD,查看当前电脑下有哪些 Python 版本和安装位置;
> where python
C:\Users\***\AppData\Local\Programs\Python\Python39\python.exe
C:\Users\***\AppData\Local\Programs\Python\Python37\python.exe
> python --version # 查看默认版本 或者python -V
Python 3.9.4
打开 python 的文件路径,或者右键 python 快捷方式打开 “打开文件位置” 找到 Python 的安装位置;
步骤 4 : 打开任意版本的 Python,并执行脚本命令;
方法1: 修改环境变量,将目标版本的 Python 路径添加到环境变量中,调用参数打开对应版本。
> py -3.9 # 快速启动 python 3.9
> py -3.7 # 快速启动 python 3.7
> py -3.9 -V # 查看详细版本
> py -3.7 helloworld.py # 打开 python 2 脚本
方法2:复制一份重命名为python39.exe。注意是复制一份重命名,而不是直接重命名。
步骤 5 : 多版本共存对应版本的 pip 管理;
# 多版本共存查看 pip 版本
> python -m pip -V / pip -V # 查看默认 pip 版本
pip 21.1.1 from C:\Users\***\AppData\Local\Programs\Python\Python39\lib\site-packages\pip (python 3.9)
> py -3.7 -m pip -V
pip 20.1.1 from C:\Users\***\AppData\Local\Programs\Python\Python37\lib\site-packages\pip (python 3.7)
# 卸载pip
> python -m pip uninstall pip setuptools
# 多版本共存升级pip
> python -m pip install --upgrade pip
> py -3.7 -m pip install --upgrade pip # python 3.7 的pip更新
若更新好,重新运行命令,发现
Requirement already satisfied: pip in c:\users\octob\appdata\local\programs\python\python37\lib\site-packages (21.1.1)
# 多版本共存如何 pip 安装
> pip install requests # 默认 python 关联的 pip 命令安装,安装在python3.9(默认)下
> py -3.7 -m pip install requests # python3.7 关联 pip 命令安装,安装在python3.7下
> python -m pip list # 查看 list ,安装在C:\Users\***\AppData\Local\Programs\Python\Python39\Lib\site-packages
> python -m pip list --outdated # 检查哪些包需要更新
步骤 1: 查看 Linux 默认安装的 Python 位置
$ whereis python # 多版本 python 安装位置
$ which python # 默认 python 的位置
$ ls -l /usr/bin/python* # 了解软链接
步骤 2: 安装目标版本 Python
$ wget http://python.org/ftp/python/2.7/Python-2.7.tar.bz2
$ tar -zxvf Python-3.6.5.tgz
$ yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel $ readline-devel tk-devel gcc make
# 编译安装(进入 Python-3.6.5 目录)
$ ./configure --prefix=/root/training/Python-3.6.5
$ make && make install
步骤 3: 多版本 Python 管理
$ sudo rm /usr/bin/python
$ python
~bash: /usr/bin/python: No such file or directory # 删除后没有对应
$ ln -s /usr/bin/python2.7 /usr/bin/python # 建立软链接
$ # 建立目标对应链接
$ python
$ python3
步骤 4: 多版本 Pip 管理
# 安装pip前需要前置安装setuptools
$ wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26
$ tar -zxvf setuptools-19.6.tar.gz
$ cd setuptools-19.6
$ sudo python3 setup.py build
$ sudo python3 setup.py install
# 安装pip
$ wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb
$ tar -zxvf pip-8.0.2.tar.gz
$ cd pip-8.0.2
$ sudo python3 setup.py build
$ sudo python3 setup.py install
# 检查
$ pip -V
# 不同版本 pip 下载包
$ pip install numpy
$ pip3 install numpy
# 配置环境变量(直接使用pip,easy——install, 制订pip安装路径)
$ vi ~/.bash_profile
export PYTHON_HOME=/root/training/Python-3.6.5
export PATH=$PYTHON_HOME/bin:$PATH
保存退出(:wq)
$ source ~/.bash_profile
$ echo $PYTHON_HOME
虚拟环境并不是什么新技术,主要是利用了操作系统中环境变量以及进程间环境隔离的特性
可以为程序提供信息和做信息交换介质,进程可以共享操作系统中的环境变量,也可以为进程指定环境变量,其中 PATH 是很重要的环境变量,用于为操作系统和程序提供可执行文件的访问路径,例如写一个程序 a.exe,存放在 D:\MyProgram 中,在命令行中执行 a.exe ,会得到提示“ 无法找到程序 a.exe”,为了让系统找到,可以将 D:\MyProgram 路径加入到 PATH 环境变量中,当输入 a.exe 时,操作系统就会从 PATH 所提供的路径中逐个查找,这时就可以找到了。Linux 和 MacOS 具有相似的特性,甚至比 Windows 的功能更丰富。
Python 虚拟环境就是利用这个特性构建的,在激活虚拟环境之时,激活脚本会将当前命令行程序的 PATH 修改为虚拟环境的,这样执行命令就会在被修改的 PATH 中查找,从而避免了原本 PATH 可以找到的命令,从而实现了 Python 环境的隔离。
“操作系统级别的” Python解释器
;一一对应
;pip工具和site-packages
。要点:
> pip install virtualenv # 默认 Python 位置安装 virtualenv
> virtualenv --no-site-packages myvenv # 创建在当前目录
--no-site-packages: 复制主环境中安装的第三方包
-p: 用于指定 Python 解析器,就是安装好的 Python 应用程序,默认为当前环境中的 Python
–no-pip:不需要安装 pip,默认为安装
–clear:如果创建虚拟环境的目录已经有了其他虚拟环境,清楚重建
要点:
> python -m venv myvenv
–without-pip: 不需要安装 pip,默认为安装
–clear:如果创建虚拟环境的目录已经有了其他虚拟环境,清楚重建
pipenv是Python官方推荐的包管理工具。 它综合了 virtualenv , pip 和 pyenv 三者的功能。能够自动为项目创建和管理虚拟环境。 pipenv使用 Pipfile 和 Pipfile.lock 来管理依赖包,并且在使用pipenv添加或删除包时,自动维护 Pipfile 文件,同时生成 Pipfile.lock 来锁定安装包的版本和依赖信息,避免构建错误。相比pip需要手动维护requirements.txt 中的安装包和版本,具有很大的进步。详细使用方法,可参考这篇文章45。
# 下载
$ pip install pipenv
# 创建环境并安装
$ cd myproject
$ pipenv install # 创建环境
$ pipenv install requests # 或者直接安装库
# 如果不存在pipfile,会生成一个pipfile,并且如果有的库添加会自动编辑该文件,不会我们手动更新requirements.txt文件了。
# 激活
$ pipenv shell
$ python --version
通过 virtualenv 和 模块 venv 创建的虚拟环境,激活方式是一样的,即运行激活脚本
\Scripts\activate.bat
,如果是 powershell 命令行,脚本换成 Activate.ps1
, 注意将
换成你自己的虚拟环境目录/bin/activate
,默认脚本没有执行权限,要么设置脚本为可执行,要么用 source
命令执行,例如source myvenv/bin/activate
检验是否已激活
$ echo $PATH # linux 下
> echo %PATH% # window 下
退出虚拟环境很简单,只需要执行 deactivate
命令就行
linux:
$ deactivate
Windows 10:
> .\Scripts\deactivate.bat
conda可以直接创建不同python版本的虚拟环境。前面讲的virtualenv只是指定创建不同python版本的虚拟环境,前提是你的电脑上已经安装了不同版本的python,与conda相比没有conda灵活。
# 查看 Python 环境
conda info --env
# 创建一个python3.5的环境,我们把它命名为python35
conda create --name python35 python=3.5 # 安装
conda create --name python35 python=3.5 # numpy scipy #创建环境并安装包
conda create --name python37 --clone python37 # 克隆方式闯将环境
# 激活环境并在环境中安装必要包( mac/linux 系统中需命令首加上 source)
conda activate python35 # 物理路径在D:\Anaconda\envs
conda deactivate python35
conda/pip install numpy
# 迁移环境
conda list --explictit > bio-env.txt
conda env export > py36.yaml
conda env create -f py36.yaml # conda 安装的
pip freeze > requirements.txt
pip install -r requirements.txt # pip 安装的
pip install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
# 删除 python35
conda remove -n python35 --all
# help
conda --help
详细命令见conda Cheet Sheet
按下 Ctrl+Shift+P, 在弹出的命令窗口中输入 “解析器”,然后在下拉列表中选择 “Python:选择解析器”,这里会缓存一些已经创建好的解析器,如果没有想要的,可以选择 “Enter interpreter path” 来选择解析器路径,即已经创建好的虚拟环境脚本文件夹中的 Python 程序,就可以创建一个新的解析器。
创建项目时,在项目创建对话框中,可以创建或者选择已经已有的解析器
其他参考67
此部分拷贝自Python 虚拟环境 看这一篇就够了
之所以在开发时选择虚拟环境,除了避免库之间的冲突,还有重要的原因时方便部署,因为虚拟环境时独立的,仅包含了项目相关的依赖库,所以部署的效率更高,风险更小
一般部署流程是:
pip freeze > requirements.txt
命令将项目的库依赖导出,作为代码的一部分pip install -r requirements.txt
,安装项目依赖怎么运行项目,需要看项目的具体情况
在 comb_analyser.py 下 想调用 config 下配置文件。
方法1:在 comb_analyser.py 中添加 如下片段
import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # __file__获取执行文件相对路径,整行为取上一级的上一级目录
sys.path.append(BASE_DIR)
方法2:在setting.json中添加自动寻找路径(此方法测试不成功)
"python.autoComplete.extraPaths": [
"e:/engine-fault-diagnosis-signal_processing",
"e:/engine-fault-diagnosis-signal_processing/config"
]
python多版本安装 ↩︎
Linux下多版本python与多版本pip以及对应安装库包管理 ↩︎
virtualenv 虚拟环境 ↩︎
Pipenv:新一代Python项目环境与依赖管理工具 ↩︎
Pipenv——最好用的python虚拟环境和包管理工具 ↩︎
最全的Python虚拟环境使用方法 ↩︎
Python 虚拟环境 看这一篇就够了 ↩︎