自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從環(huán)境搭建到項目運行:Python 和 Flask 快速上手指南

開發(fā) 后端
本文簡單介紹下 Python 從環(huán)境的搭建到運行一個簡單的 Web 項目。因為現(xiàn)在研究的 RAGFlow 的源碼中使用的就是 poetry 和 Flask 。帶著目的去學習效率會高很多。

個簡單的 Web 項目。

環(huán)境

  • 操作系統(tǒng):Mac 13.0
  • Python:3.11.7
  • 包管理:poetry1.8.3
  • Web 框架:Flask3.1

Python 中的包管理工具有 conda、pip、poetry、PyPI 等,Web 框架也有 Django、Flask、FastAPI ,為什么選擇的是 poetry 和 Flask 呢?

因為現(xiàn)在研究的 RAGFlow 的源碼中使用的就是 poetry 和 Flask 。帶著目的去學習效率會高很多。

安裝

1.安裝 Python

直接在官網(wǎng)下載安裝就可以:https://www.python.org/downloads/,我很早前就安裝了,一直沒有升級,所以版本還是 3.11.7 。

2.安裝 poetry

如果你了解過 Python,一定知道 pip,但 pip 在包的依賴管理和版本沖突管理上做的不是很好,而 poetry 就是為了解決這兩個問題而生。

我在本機是使用 pipx 來安裝的 poetry ,先使用 homebrew 安裝 pipx:

brew install pipx
pipx ensurepath

接著使用 pipx 安裝 poetry,命令如下:

pipx 安裝 poetry

安裝完成后,可以通過以下命令驗證 poetry 是否安裝成功:

poetry --version

出現(xiàn)下圖所示,說明安裝成功:

3.使用 poetry

可以使用 poetry 創(chuàng)建一個新的項目:

poetry new poetry-project

也可以在現(xiàn)有項目的目錄中初始化 poetry:

cd exist-project
poetry init

使用 poetry 創(chuàng)建的項目目錄如下:

在 pyproject.toml 文件中進行包版本的管理。這時如果我要給項目添加相關(guān)的依賴包,有兩種方式:

直接使用 poetry 命令:

poetry add six:1.16.0

使用命令安裝完成后,pyproject.toml 文件中會自動添加 six = "1.16.0" ,如下圖:

另一種方式就是先修改配置,在 pyproject.toml 中添加 six = "1.16.0" 或其他的包,然后執(zhí)行下面命令進行安裝:

poetry install

在使用 poetry 之前,先使用下面命令設(shè)置虛擬環(huán)境在項目內(nèi):

poetry config virtualenvs.in-project true

經(jīng)過上面的設(shè)置后,不管是使用 poetry install 還是使用 poetry add  添加的包,會在項目根目錄下的 .venv 目錄中,便于管理:

4.安裝 flask

poetry add flask

上面命令會將 Flask 添加到 pyproject.toml 并安裝到虛擬環(huán)境中。

使用 flask

使用 poetry 初始化一個項目并添加 flask 后,項目的目錄結(jié)構(gòu)如下:

可以看到到多了 __init__.py 和 poetry.lock 兩個文件:

  • __init__.py:可以將這個文件所在目錄標記為一個 Python 包,使得這個目錄可以被當作模塊導入。
  • poetry.lock:鎖定項目所有依賴包的具體版本,確保項目在不同環(huán)境中使用完全相同的依賴版本,記錄了每個包的詳細信息,包括其哈希值、依賴關(guān)系等。

在上面的基礎(chǔ)上,我們讓 windsurf 來完成一個示例程序,在 windsurf 中輸入:按照flask的最佳實踐,創(chuàng)建 get 和 post 的接口示例,創(chuàng)建的目錄結(jié)構(gòu)如下:

從上往下來看看每個文件的內(nèi)容:

__init__.py

"""Flask 應用工廠模塊"""
from flask import Flask
from .config import config

def create_app(config_name='default'):
    """
    創(chuàng)建 Flask 應用實例
    :param config_name: 配置名稱,可選值:development, production, default
    :return: Flask 應用實例
    """
    # 創(chuàng)建應用實例
    app = Flask(__name__)

    # 加載配置
    app.config.from_object(config[config_name])

    # 注冊藍圖
    from .api import api_bp
    app.register_blueprint(api_bp)

    # 添加一個測試路由
    @app.route('/')
    def index():
        return 'Welcome to Flask API'

    return app

config.py

"""Flask 應用配置文件"""

class Config:
    """基礎(chǔ)配置類"""
    SECRET_KEY = 'dev-key'  # 開發(fā)環(huán)境密鑰
    JSON_AS_ASCII = False   # 支持中文返回

class DevelopmentConfig(Config):
    """開發(fā)環(huán)境配置"""
    DEBUG = True
    ENV = 'development'

class ProductionConfig(Config):
    """生產(chǎn)環(huán)境配置"""
    DEBUG = False
    ENV = 'production'
    SECRET_KEY = 'your-production-secret-key'  # 生產(chǎn)環(huán)境應使用強密鑰

# 配置映射
config = {
    'development': DevelopmentConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}

api__init__.py

from flask import Blueprint

# 創(chuàng)建 API 藍圖
api_bp = Blueprint('api', __name__, url_prefix='/api')
# 導入視圖函數(shù)
from . import views # 這行很重要,確保視圖函數(shù)被注冊到藍圖

api_views.py

"""API 視圖函數(shù)"""
from flask import jsonify, request
from . import api_bp

@api_bp.route('/hello', methods=['GET'])
def hello():
    """GET 請求示例"""
    return jsonify({
        'code': 200,
        'message': 'Hello, World!',
        'data': None
    })

@api_bp.route('/echo', methods=['POST'])
def echo():
    """POST 請求示例"""
    try:
        # 獲取 JSON 數(shù)據(jù)
        data = request.get_json()
        if not data:
            return jsonify({
                'code': 400,
                'message': 'No JSON data provided',
                'data': None
            }), 400

        # 返回接收到的數(shù)據(jù)
        return jsonify({
            'code': 200,
            'message': 'Data received successfully',
            'data': data
        })

    except Exception as e:
        return jsonify({
            'code': 500,
            'message': str(e),
            'data': None
        }), 500

run.py

"""應用啟動入口"""
from poetry_project import create_app

app = create_app('development')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5005)

在項目更目錄下執(zhí)行下面命令運行和測試:

poetry run python run.py

curl http://localhost:5005/api/hello
curl -X POST -H "Content-Type: application/json" -d '{"message":"test"}' http://localhost:5005/api/echo

擴展

到這里,一個簡單的例子就跑起來了。

但例子中有些地方看不明白,直接在 windsurf 中去問就可以了,比如 api 目錄中的 __init__.py 文件中有這樣一行代碼:

api_bp = Blueprint('api', __name__, url_prefix='/api')

了解了一個簡單的 Flask 項目結(jié)構(gòu),也知道怎么去抽絲剝繭搞清楚不懂的問題。我們就可以去閱讀 RAGFlow 的源碼了。

常用命令

1.升級 Poetry

如果需要升級 Poetry,可以使用以下命令:

pipx upgrade poetry

2.卸載 Poetry

果不再需要 Poetry,可以通過以下命令卸載:

pipx uninstall poetry

3.創(chuàng)建虛擬環(huán)境

Poetry 默認會在你安裝依賴時自動創(chuàng)建虛擬環(huán)境。如果你想手動創(chuàng)建虛擬環(huán)境,可以運行以下命令:

poetry env use python

這會使用系統(tǒng)默認的 Python 版本創(chuàng)建虛擬環(huán)境。如果你想指定 Python 版本,可以這樣做:

poetry env use python3.9

4.查看虛擬環(huán)境信息

創(chuàng)建虛擬環(huán)境后,可以通過以下命令查看虛擬環(huán)境的路徑和信息:

poetry env info

5.激活虛擬環(huán)境

如果你想手動激活虛擬環(huán)境,可以運行以下命令:

poetry shell

這會啟動一個新的 shell 并激活虛擬環(huán)境。激活后,你可以直接運行 Python 腳本或命令。

6.刪除虛擬環(huán)境

如果你想刪除虛擬環(huán)境,可以運行以下命令:

poetry env remove python
責任編輯:姜華 來源: 不止dotNET
相關(guān)推薦

2024-01-29 00:36:50

Backstage設(shè)施工具

2021-11-26 09:40:37

EclipseIDEA開發(fā)

2013-12-04 13:27:56

Android SDK項目

2013-12-26 15:40:33

Android SDK項目

2013-12-26 15:14:38

Android SDK運行調(diào)試

2021-01-26 08:37:18

MobXVueReact

2014-06-24 09:41:56

Android Stu教程

2013-04-12 03:24:29

微信開放平臺網(wǎng)站

2016-06-20 10:20:22

Docker云計算

2014-01-22 10:00:10

Android SDKAndroid開發(fā)

2013-12-04 14:44:41

Android SDK用戶交互

2020-04-01 11:11:35

Hadoop運行環(huán)境分布式

2014-06-06 14:25:03

iOS 8SwiftWWDC2014

2012-08-01 17:39:17

2011-08-23 11:25:40

LUA函數(shù)TOC

2013-12-26 14:52:52

Android SDK物理設(shè)備

2021-01-19 06:16:05

前端Babel 技術(shù)熱點

2013-11-27 10:12:11

2013-12-04 14:29:18

Android SDK應用程序

2013-12-26 15:47:59

Android SDK應用程序
點贊
收藏

51CTO技術(shù)棧公眾號