目录

介绍

背景

多少个Python?

多种解释器

多个软件包安装程序

多个搜索路径

虚拟环境

创建一个虚拟环境

激活虚拟环境

在虚拟环境中安装软件包

PIP冻结

VSC集成

Flask & Gunicorn

使用Nginx进行负载平衡


  • 下载源17.5 KB

介绍

这是有关Python&Virtualenv&Visual Studio Code 的说明。

背景

Python被认为是一种易于学习且易于使用的语言,但是本说明与Python语言无关。这是关于创建一个隔离的环境,使我们可以确定地运行Python程序。

在本说明中,我附加了一些简单的Python文件。我将使用它们向您展示拥有一个隔离的环境来运行Python程序的好处。

多少个Python?

要运行Python程序,通常在计算机上需要3个组件。

  • Python解释器
  • Python软件包安装程序(pip)的实例,用于安装依赖项软件包
  • 解释器寻找依赖包以运行我们的程序的搜索路径

多种解释器

Python宣称的优势之一是,它在所有计算机上都可以轻松获得。这也意味着我们可能不知道就拥有一个版本的Python解释器。在我的Linux Mint 17.2 Cinnamon 64位中,我至少有3个Python解释器。

当我们安装操作系统时,它会附带某些预先安装的Python解释器。这些Python解释器对于操作系统正常运行很重要。我们不应该在不确切知道我们正在做什么的情况下删除它们。

多个软件包安装程序

为了使事情变得更复杂,我们实际上在计算机上有多个pip实例。

多个搜索路径

在运行Python程序时,我们需要确保使用了正确的解释器实例。让我们看一下“python-search-path.py”文件。

# https://docs.python.org/3/tutorial/modules.html#the-module-search-path
import sysfor item in sys.path:print(item)

如果通过以下命令运行程序,则可以找到“python”解释器使用的包搜索路径。

python python-search-path.py

如果我们通过“python3.4”解释器运行它,我们将看到完全不同的路径。

python3.4 python-search-path.py

现在我们知道计算机上的Python版本很复杂。更不稳定的是,我们可能使用的操作系统也使用相同版本的Python。如果我们更新操作系统也使用的某个程序包,则可能会导致操作系统出现问题。在最坏的情况下,它甚至可能无法启动。在使用某些版本的Python之后,我个人在操作系统上遇到了问题。

虚拟环境

我们可以努力工作,以确保我们正在使用所需的Python解释器。我们还可以努力将软件包安装到正确的搜索路径中,以使Python程序平稳运行。但是我们也可以创建一个虚拟环境来轻松确定地运行Python程序。

  • 虚拟环境可确保我们使用所需的Python解释器。
  • 虚拟环境可确保我们使用所需的Python软件包安装程序(pip)。
  • 虚拟环境可确保我们在环境中安装软件包,并在运行程序时在环境中寻找它们。

从物理上讲,虚拟环境是一个文件夹。这个文件夹几乎包含所有运行Python程序的内容。当我们安装软件包时,它也安装在此文件夹中。

创建一个虚拟环境

要创建虚拟环境,我们需要安装“virtualenv”工具。在计算机上,我使用以下命令安装“virtualenv”。

sudo python3 -m pip install virtualenv

然后,我们可以验证安装是否成功。

安装“virtualenv”后,我们可以通过以下命令创建虚拟环境:

virtualenv -p /usr/bin/python3.4 environment-3.4
  • 创建虚拟环境时,我们指定了Python解释器的执行路径,当我们使用虚拟环境时,它将是python解释器。
  • 创建虚拟环境时,我们指定了文件夹名称。它是保存虚拟环境的物理文件夹。

激活虚拟环境

要激活虚拟环境,我们可以发出以下命令:

source environment-3.4/bin/activate

激活虚拟环境后,我们可以检查Python和pip的执行路径。

python python-search-path.py

激活虚拟环境后,我们可以看到所有python,pip和搜索路径都位于虚拟环境文件夹内。我们可以通过以下命令停用虚拟环境:

deactivate

如果要完全删除虚拟环境,我们可以简单地删除“environment-3.4”文件夹。

在虚拟环境中安装软件包

出于实验目的,我在“python-flask-api.py”文件中创建了一个小的“flask”应用程序。

from flask import Flask, request, jsonifyapp = Flask(__name__)@app.route('/')
def message():name = 'Song Li'return jsonify(username = name,email = 'song.li@email.com',)if __name__ == '__main__':app.run(host='0.0.0.0', port=3000)

此应用程序需要“flask”软件包。激活虚拟环境后,我们可以使用以下命令来安装软件包:

python -m pip install flask

安装“flask”后,我们可以运行“python-flask-api.py”文件。

python python-flask-api.py

我们可以通过运行“python-inspect-path.py”文件来进一步验证虚拟环境中是否安装了“flask”软件包。

import inspect
from flask import Flaskprint(inspect.getfile(Flask))

PIP冻结

在虚拟环境上工作一段时间后,您可能已经安装了许多软件包。如果要让其他人运行您的程序,则需要告诉他们这些软件包和版本。激活虚拟环境后,可以发出以下命令:

python -m pip freeze > requirements.txt

它创建一个名为“requirements.txt”的文件,其中包含有关虚拟环境中软件包的所有信息。

Click==7.0
Flask==1.0.4
itsdangerous==1.1.0
Jinja2==2.10.3
MarkupSafe==1.1.1
Werkzeug==0.16.1

我们可以使用以下命令在新的虚拟环境中安装所有软件包:

python -m pip install -r requirements.txt

我们还可以通过以下命令删除“requirements.txt”文件中的所有软件包:

python -m pip uninstall -r requirements.txt -y

VSC集成

Visual Studio Code是用于Python程序的不错的IDE。如果您不熟悉VSC,可以看一下我以前的笔记。为了支持Python,我只需要安装Microsoft的Python扩展。

为了能够在虚拟环境中使用Python解释器运行和调试程序,我们可以简单地创建一个“launch.json”文件,如下所示。它将“pythonPath”指向虚拟环境。

{"version": "0.2.0","configurations": [{"name": "python-search-path.py","pythonPath": "${workspaceFolder}/environment-3.4/bin/python","type": "python","request": "launch","program": "${workspaceFolder}/python-search-path.py","console": "integratedTerminal"},{"name": "python-inspect-path.py","pythonPath": "${workspaceFolder}/environment-3.4/bin/python","type": "python","request": "launch","program": "${workspaceFolder}/python-inspect-path.py","console": "integratedTerminal"},{"name": "python-flask-api.py","pythonPath": "${workspaceFolder}/environment-3.4/bin/python","type": "python","request": "launch","program": "${workspaceFolder}/python-flask-api.py","console": "integratedTerminal"}]
}

如果愿意,您实际上可以在“settings.json”文件中将路径添加到python可执行文件。

{"files.exclude": {"**/.git": true,"**/.gitignore": true,"**/environment-3.4": true},"python.pythonPath": "${workspaceFolder}/environment-3.4/bin/python3.4"
}

在这种情况下,无论何时打开终端,虚拟环境都会自动激活。

Flask & Gunicorn

Flask和  Django是在Python环境中的web框架。“python-flask-api.py”是一个简单的flask应用程序。

import sys, os
from flask import Flask, jsonifyapp = Flask(__name__)@app.route('/')
def message():return jsonify(pid = os.getpid())if __name__ == '__main__':app.run(host='0.0.0.0', port=3000)

我们可以通过以下命令启动该应用程序。

python python-flask-api.py

但是,当我们启动应用程序时,我们看到以下警告。

我们需要找到一个好的服务器来托管应用程序。我们有很多选择,但Gunicorn是受欢迎的选择。实际上,我们可以在虚拟环境中安装  Gunicorn。

python -m pip install gunicorn

安装Gunicorn之后,我们可以在虚拟环境中运行它。

gunicorn --bind 0.0.0.0:8000 python-flask-api:app

如果一切顺利,我们现在可以通过“8000”端口号访问该应用程序。我们还可以添加“-w”选项以指定工作进程数。通常,服务器中每个内核的工作进程数为2-4。

gunicorn --bind 0.0.0.0:8000 -w 4 python-flask-api:app

使用Nginx进行负载平衡

Nginx是一种流行的负载平衡器。通常使用Nginx对多个Flask实例进行负载平衡。要在我的Linux Mint计算机上安装Nginx,我们可以使用以下命令。

apt-cache policy nginx
sudo apt-get install nginx

安装后,我们可以使用以下命令来操作Nginx服务器。

sudo service nginx start
sudo service nginx restart
sudo service nginx reload
sudo service nginx stop
service nginx status

因为我正在个人计算机上试验Nginx,所以我不想在启动计算机时启动它,所以我使用以下命令禁用该服务。

sudo update-rc.d nginx disable

为了设置负载平衡,我创建了一个名为“loadbalance.conf”的文件。

upstream pythonweb {server localhost:4000;server localhost:3000;server localhost:2000;
}# This balances all the requests
# It also disable caching
server {listen 80;location / {proxy_pass "http://pythonweb/";add_header Cache-Control'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';}
}# nginx.conf file
# Comment out this line - include /etc/nginx/sites-enabled/*;
#include /home/song/sandbox/p-virtualenv-excercise/loadbalance.conf;

在我的计算机中,我需要将该文件“包含”在“/etc/nginx/nginx.conf”文件中,并注释掉默认的“/etc/nginx/sites-enabled/*”。

#include /etc/nginx/sites-enabled/*;
include /home/song/sandbox/p-virtualenv-excercise/loadbalance.conf;

准备好配置后,我们可以重新启动或重新加载Nginx服务器。我们还需要在不同终端的端口号2000/3000/4000上启动Flask应用程序的3个实例。以下是在端口号2000上启动实例的命令。

gunicorn --bind 0.0.0.0:2000 python-flask-api:app

如果一切顺利,则可以通过端口号80访问应用程序,并且在3个Flask实例之间平衡请求。

关于Python,虚拟环境和Visual Studio Code集成的说明相关推荐

  1. vscode 离线安装python插件_vscode for Python插件下载-Visual Studio Code Python插件下载0.9.1 官方版-西西软件下载...

    Visual Studio Code免费编程工具可以进行python开发学习,当然Python本身的安装也是必须的,打开VisualStudioCode,按下Ctrl+P打开命令行,然后输入ext i ...

  2. visual studio code python插件下载_visual studio code 的必装推荐插件plugin, vscode, vsc

    An Old Hope Theme     (theme, 推荐,且推荐它的 classic theme,安装后在颜色选项里选择,该插件的定制见文末) Cobalt2     (theme) Drac ...

  3. azure web应用部署_使用Visual Studio Code将Python应用程序部署到Azure Functions

    azure web应用部署 In this article, we are going to build a small python application and deploy it to Azu ...

  4. 使用跨平台的visual studio code 进行python 开发

    文章大纲 简介 安装扩展参考 安装python 扩展 设置终端 环境基本设置 工程化设置 Visual Studio Code 添加文件头注释 Visual Studio Code自动添加函数注释模板 ...

  5. visual studio code Python终端运行_黄哥Python:VS Code 10个Python 插件

    转载自 https://medium.com/issuehunt/10-visual-studio-code-extensions-for-python-development-de0be51bbee ...

  6. java visual linux,如何在 Linux 中安装 Visual Studio Code

    你们好,今天咱们一块儿来学习如何在 Linux 发行版中安装 Visual Studio Code.Visual Studio Code 是基于 Electron 优化代码后的编辑器,后者是基于 Ch ...

  7. 在linux安装编译vscode,Linux中安装 Visual Studio Code 详解

    一起来学习如何在 Linux 发行版中安装 Visual Studio Code.Visual Studio Code 是基于 Electron 优化代码后的编辑器,后者是基于 Chromium 的一 ...

  8. visual studio 与 visual studio code

    Visual Studio Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品.VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具, ...

  9. visual studio 和visual studio code 的区别

    区别有三: 区别一:含义不一样. Visual Studio(简称VS)是美国微软公司的开发工具包系列产品,是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具.代码 ...

最新文章

  1. 关于刘冬大侠Spring.NET系列学习笔记3的一点勘正
  2. 区块链教程Fabric1.0源代码gRPC(Fabric中注册的gRPC Service)一
  3. glib中的GList ,GSList,GString,GTree,GTimer
  4. 【CodeForces - 527C】Glass Carving(线段树或者SBT或者set)
  5. 【Delphi】从内存读取或解压压缩文件(RAR、ZIP、TAR、GZIP等)(二)
  6. 删除一行下方单元格上移_openpyxl3.0官方文档(5)——插入和删除行和列,移动单元格...
  7. 在Linux 安装Python3.5.6详细文档!!!!
  8. 深夜不睡的我爬取一下美女照片!!!哈哈!!来吧,刺激磁刺激!!!
  9. matlab griddata外插,matlab griddata方法使用介绍
  10. 服务器网卡无法开启lldp协议,lldp支持-VMware vSphere - 思科华为论坛
  11. 位移的单位符号_初中物理符号级单位符号公式大全
  12. win10右键文件夹转圈卡死
  13. js使用canvas画布画太极图案
  14. 【.net函数式编程】可重复的执行repeatable execution
  15. 互联网春招和秋招的区别
  16. 透过容抗来看电容量和频率的关系
  17. 新一代红米参数模糊的背后 是否有欺诈嫌疑?
  18. 别找了,这就是你想要的年会抽奖开源项目
  19. 如何在Digital Ocean VPS上安装cpanel / whm
  20. codeception 运行testcase 的方式

热门文章

  1. python读yaml的库_Python读取YAML文件过程详解
  2. mysql的count函数类型是什么意思_详细解读MySQL中COUNT函数的用法
  3. 从第一范式到第二范式所做的操作是_数据库设计三大范式
  4. 设计师交流平台!!!
  5. 极简主义2020UI设计正流行,欣赏下可临摹的案例模板!
  6. 一流设计师导航|16map,一款强大且智能的设计师导航网站
  7. 设计干货栅格系统素材 | UI设计师应用好帮手
  8. 图解Http学习第二章
  9. Index of /pub/software/graphics/pngtoico/
  10. eBPF bpftrace 实现个UNIX socket抓包试试