一文读懂 Python 开发环境配置

Python 多版本管理

1. 多版本使用需求

场景1:如果我们想在python3上运行2.x版本的代码,就需要对代码进行大量的修改,产生不必要的工作量。

2. Windows 下多版本管理[1]

步骤 1:官网 (速度慢)或者国内镜像(速度快)下载Python 对应版本;

步骤 2: 点击可执行文件安装 Python,注意选择“Add python.exe to Path”

步骤 3: 查看当前电脑下有哪些 Python 版本和安装位置;
方法1 :打开 CMD,输入 where 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

方法2: python 快捷方式右键打开 “打开文件位置” 找到 Python 的安装位置;

Python 的安装位置
图1 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,就可以以默认方式直接打开对应版本。

重命名为python39.exe
图2 重命名为python39.exe
注意是复制一份重命名,而不是直接重命名。

步骤 5 : 多版本共存对应版本的 pip 管理;

(通过切换软件源,可以加快 pip 下载速度,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  # 检查哪些包需要更新

3. Linux 系统下多版本管理[2] - 建立一个对照表

流程

步骤 1: 查看 Linux 默认安装的 Python 位置

$ whereis python # 多版本 python 安装位置
$ which python  # 默认 python 的位置
$ ls -l /usr/bin/python*  # 软链接

步骤 2: 安装目标版本 Python

  1. 官网 (速度慢)或者国内镜像(速度快)下载Python 对应版本;
  2. 解压;
  3. 准备编译环境;
  4. 编译安装;
$ 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 管理

  1. 创建软链接;
  2. 配置环境变量
# 安装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

Python 虚拟环境配置

1. 原理和配置需求

虚拟环境并不是什么新技术,主要是利用了操作系统中环境变量以及进程间环境隔离的特性

操作系统的环境变量

可以为程序提供信息和做信息交换介质,进程可以共享操作系统中的环境变量,也可以为进程指定环境变量,其中 PATH 是很重要的环境变量,用于为操作系统和程序提供可执行文件的访问路径,例如写一个程序 a.exe,存放在 D:\MyProgram 中,在命令行中执行 a.exe ,会得到提示“ 无法找到程序 a.exe”,为了让系统找到,可以将 D:\MyProgram 路径加入到 PATH 环境变量中,当输入 a.exe 时,操作系统就会从 PATH 所提供的路径中逐个查找,这时就可以找到了。Linux 和 MacOS 具有相似的特性,甚至比 Windows 的功能更丰富。

虚拟环境运行和 PATH 修改

Python 虚拟环境就是利用这个特性构建的,在激活虚拟环境之时,激活脚本会将当前命令行程序的 PATH 修改为虚拟环境的,这样执行命令就会在被修改的 PATH 中查找,从而避免了原本 PATH 可以找到的命令,从而实现了 Python 环境的隔离。

Python 解释器和虚拟环境关系

Python 解释器和虚拟环境关系
图3 Python 解释器和虚拟环境关系
  • 一个操作系统下,可以有多个“操作系统级别的” Python解释器
  • 每个Python解释器有一个指向自己的pip工具,两者一一对应
  • 通过virtualenv可以虚拟任何一个“操作系统级别的”Python解释器成为一个“虚拟级别”的解释器;
  • 每个“虚拟级别”的解释器又拥有自己独立的pip工具和site-packages

2. 安装 & 配置

使用 Virtualenv 管理[3]

要点:

  1. python3.3 之前,只能通过 virtualenv 创建虚拟环境
  2. virtualenv 可以指定 python解析器版本,但必须是在本地已安装。
> pip install virtualenv # 默认 Python 位置安装 virtualenv
> virtualenv --no-site-packages myvenv # 创建在当前目录
--no-site-packages: 复制主环境中安装的第三方包
-p: 用于指定 Python 解析器,就是安装好的 Python 应用程序,默认为当前环境中的 Python
–no-pip:不需要安装 pip,默认为安装
–clear:如果创建虚拟环境的目录已经有了其他虚拟环境,清楚重建

使用 venv 管理

要点:

  1. 因为 venv 是依附于一个 Python 解析器创建的,所以不需要指定 Python 解释器版本
  2. python 3.3 以后版本,可以通过自带模块 venv 创建虚拟环境
> python -m venv myvenv
–without-pip: 不需要安装 pip,默认为安装
–clear:如果创建虚拟环境的目录已经有了其他虚拟环境,清楚重建

使用 pipenv 管理

pipenv是Python官方推荐的包管理工具。 它综合了 virtualenv , pip 和 pyenv 三者的功能。能够自动为项目创建和管理虚拟环境。 pipenv使用 Pipfile 和 Pipfile.lock 来管理依赖包,并且在使用pipenv添加或删除包时,自动维护 Pipfile 文件,同时生成 Pipfile.lock 来锁定安装包的版本和依赖信息,避免构建错误。相比pip需要手动维护requirements.txt 中的安装包和版本,具有很大的进步。详细使用方法,可参考这篇文章[4][5]

# 下载
$ pip install pipenv
# 创建环境并安装
$ cd myproject
$ pipenv install # 创建环境
$ pipenv install requests # 或者直接安装库
# 如果不存在pipfile,会生成一个pipfile,并且如果有的库添加会自动编辑该文件,不会我们手动更新requirements.txt文件了。
# 激活
$ pipenv shell
$ python --version

Anaconda 虚拟环境管理

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

3. 激活 & 退出

通过 virtualenv 和 模块 venv 创建的虚拟环境,激活方式是一样的,即运行激活脚本

  • Windows 系统中,激活脚本路径是 <myvenv>\Scripts\activate.bat,如果是 powershell 命令行,脚本换成 Activate.ps1 , 注意将 <myvenv> 换成你自己的虚拟环境目录
  • Linux 系统中,激活脚本路径是 <myvenv>/bin/activate,默认脚本没有执行权限,要么设置脚本为可执行,要么用 source 命令执行,例如source myvenv/bin/activate

检验是否已激活

$ echo $PATH # linux 下
> echo %PATH% # window 下

退出虚拟环境很简单,只需要执行 deactivate 命令就行

linux:

$ deactivate

Windows 10:

> .\Scripts\deactivate.bat

4. 与开发工具配合

Visual Studio Code

按下 Ctrl+Shift+P, 在弹出的命令窗口中输入 “解析器”,然后在下拉列表中选择 “Python:选择解析器”,这里会缓存一些已经创建好的解析器,如果没有想要的,可以选择 “Enter interpreter path” 来选择解析器路径,即已经创建好的虚拟环境脚本文件夹中的 Python 程序,就可以创建一个新的解析器。

Pycharm

创建项目时,在项目创建对话框中,可以创建或者选择已经已有的解析器

选择 Python 解析器
图4 选择 Python 解析器

其他参考[6][7]

4. 开发环境快速部署

此部分拷贝自Python 虚拟环境 看这一篇就够了

之所以在开发时选择虚拟环境,除了避免库之间的冲突,还有重要的原因时方便部署,因为虚拟环境时独立的,仅包含了项目相关的依赖库,所以部署的效率更高,风险更小

一般部署流程是:

  1. 开发完成后,使用 pip freeze > requirements.txt 命令将项目的库依赖导出,作为代码的一部分
  2. 将代码上传到服务器
  3. 在服务器上创建一个虚拟环境
  4. 激活虚拟环境,执行 pip install -r requirements.txt,安装项目依赖

怎么运行项目,需要看项目的具体情况

  • Web 项目 Web 项目一般使用 Django、Flask 的 Web 开发的提供 Web 服务的项目,部署时需要一个 Web 容器,作为程序的运行环境,容器的配置中都有一个虚拟环境的设置,其实是指定 Python 解析器的路径,将其设置为虚拟环境的目录或者 Python 解析器就可以了,启动时就用使用虚拟环境,并与其他环境隔离。例如 uWSGI 配置文件中 home 参数是用来指定解析器的。
  • 服务类项目 服务类项目就是需要以服务的形式长时间运行的,例如之前介绍的 公交闹钟,或者一些定时爬虫之类的,对于 Linux 而言,当前主流的服务方式是 Systemd,是一种比 init 更先进的服务管理工具,在服务脚本中, 设置 ExecStart 执行命令为全路径的虚拟环境的 Python 解析器,服务启动时,使用独立的虚拟环境了。 Windows 服务,对于达成 EXE 包的,不需要配置虚拟环境,因为打包时已经考虑了环境问题了,如果时脚本运行的话,需要指定全路径的 Python 解析器
  • 单次运行项目 对于一些测试或者实验性质的项目,大多数情况下手动执行,只要在激活的虚拟环境下,或者用特定的 Python 解析器运行就好了,和在开发过程中运行区别不大

VS Code开发环境常见问题

同级目录模块调用

在 comb_analyser.py 下 想调用 config 下配置文件。
image

方法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"
    ]

  1. python多版本安装 ↩︎

  2. Linux下多版本python与多版本pip以及对应安装库包管理 ↩︎

  3. virtualenv 虚拟环境 ↩︎

  4. Pipenv:新一代Python项目环境与依赖管理工具 ↩︎

  5. Pipenv——最好用的python虚拟环境和包管理工具 ↩︎

  6. 最全的Python虚拟环境使用方法 ↩︎

  7. Python 虚拟环境 看这一篇就够了 ↩︎

posted @ 2022-04-06 17:00  Oddpage  阅读(614)  评论(0编辑  收藏  举报