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

目录

介绍

背景

多少个Python?

多种解释器

多个软件包安装程序

多个搜索路径

虚拟环境

创建一个虚拟环境

激活虚拟环境

在虚拟环境中安装软件包

PIP冻结

VSC集成

Flask & Gunicorn

使用Nginx进行负载平衡


介绍

这是有关PythonVirtualenvVisual Studio Code 的说明。

背景

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

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

多少个Python

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

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

多种解释器

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

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

多个软件包安装程序

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

多个搜索路径

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

# https://docs.python.org/3/tutorial/modules.html#the-module-search-path
import sys
    
for 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

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

python python-search-path.py

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

deactivate

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

在虚拟环境中安装软件包

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

from flask import Flask, request, jsonify
    
app = Flask(__name__)
    
@app.route('/')
def message():
  name = 'Song Li'
  return jsonify(
    username = name,
    email = '[email protected]',
  )
    
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 Flask
    
print(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,我只需要安装MicrosoftPython扩展。

为了能够在虚拟环境中使用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, jsonify
    
app = 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访问应用程序,并且在3Flask实例之间平衡请求。

 

发布了69 篇原创文章 · 获赞 139 · 访问量 45万+

猜你喜欢

转载自blog.csdn.net/mzl87/article/details/104381329