国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【小沐學(xué)Python】Python實現(xiàn)Web服務(wù)器(Flask打包部署上線)

這篇具有很好參考價值的文章主要介紹了【小沐學(xué)Python】Python實現(xiàn)Web服務(wù)器(Flask打包部署上線)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??基于Python的Web服務(wù)器系列相關(guān)文章編寫如下??:

  1. ??【W(wǎng)eb開發(fā)】Python實現(xiàn)Web服務(wù)器(Flask快速入門)??
  2. ??【W(wǎng)eb開發(fā)】Python實現(xiàn)Web服務(wù)器(Flask案例測試)??
  3. ??【W(wǎng)eb開發(fā)】Python實現(xiàn)Web服務(wù)器(Flask部署上線)??
  4. ??【W(wǎng)eb開發(fā)】Python實現(xiàn)Web服務(wù)器(Tornado入門)??
  5. ??【W(wǎng)eb開發(fā)】Python實現(xiàn)Web服務(wù)器(Tornado+flask+nginx)??
  6. ??【W(wǎng)eb開發(fā)】Python實現(xiàn)Web服務(wù)器(FastAPI)??
  7. ??【W(wǎng)eb開發(fā)】Python實現(xiàn)Web服務(wù)器(Bottle)??
  8. ??【W(wǎng)eb開發(fā)】Python實現(xiàn)Web服務(wù)器(Django)??
  9. ??【W(wǎng)eb開發(fā)】Python實現(xiàn)Web服務(wù)器(web2py)??
  10. ??【W(wǎng)eb開發(fā)】Python實現(xiàn)Web服務(wù)器(Sanic)??

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

1、簡介

Web 程序通常有兩種部署方式:傳統(tǒng)部署和云部署。傳統(tǒng)部署指的是在使用物理主機或虛擬主機上部署程序,你通常需要在一個 Linux 系統(tǒng)上完成所有的部署操作;云部署則是使用其他公司提供的云平臺,這些平臺為你設(shè)置好了底層服務(wù),包括 Web 服務(wù)器、數(shù)據(jù)庫等等,你只需要上傳代碼并進行一些簡單設(shè)置即可完成部署。

2、虛擬環(huán)境virtualenv

2.1 virtualenv

  • 安裝virtualenv:
pip install virtualenv

創(chuàng)建一個虛擬環(huán)境,暫且取名為 new_env:

virtualenv new_env

在 Windows 系統(tǒng)上面使用 virtualenv:
首先進入到虛擬環(huán)境目錄中的 Scripts 目錄:

cd new_env\Scripts
activate

在 Linux 上使用 virtualenv Linux 上面進入虛擬環(huán)境的方式跟 Windows 稍微有點不同,可以直接使用命令來進入,比如同樣在 Linux 上面的 envs 文件夾下面有個 new_env 虛擬環(huán)境,則直接輸入以下命令就可以進入虛擬環(huán)境:

source new_env/bin/activate

進入了虛擬環(huán)境之后,Windows 和 Linux 上面的操作都是一樣的,這里就不單獨去說明了。

2.2 virtualenvwrapper

virtualenvwrapper 是一個 virtualenv 虛擬環(huán)境的管理庫,這個庫可以更加方便的管理所有的虛擬環(huán)境,由于在 Windows 和 Linux 上面這個庫的安裝和配置不同,所以要單獨做說明。

  • Windows 上安裝virtualenvwrapper環(huán)境
    Windows 上需要安裝的是virtualenvwrapper-win,直接使用pip命令就可以了:
pip install virtualenvwrapper-win

配置虛擬環(huán)境的保存路徑。首先需要在想要統(tǒng)一存放虛擬環(huán)境的地方創(chuàng)建一個文件夾(我在F盤建立了D:\test_env),然后把這個文件夾添加到系統(tǒng)的環(huán)境變量中。如果不設(shè)置系統(tǒng)環(huán)境變量,那么創(chuàng)建的虛擬環(huán)境會保存到默認的地方,不方便管理.

  • Linux 上安裝virtualenvwrapper環(huán)境
pip3 install virtualenvwrapper

配置環(huán)境變量文件。首先修改(文件不存在就創(chuàng)建)文件~/.bashrc,然后添加如下語句:

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/workspace
source /usr/local/bin/virtualenvwrapper.sh

然后運行:

source ~/.bashrc
which python3
  • virtualenvwrapper 命令:
創(chuàng)建虛擬環(huán)境:mkvirtualenv new_env
使用虛擬環(huán)境:workon new_env
退出虛擬環(huán)境:deactivate
刪除虛擬環(huán)境: rmvirtualenv new_env
查看所有虛擬環(huán)境:lsvirtualenv
  • 在使用命令workon任意目錄使用虛擬環(huán)境
    先使用workon查看所有的虛擬環(huán)境
    在workon 名稱 切入該虛擬環(huán)境
mkvirtualenv flask_env
workon
workon flask_env
pip install -r requirements.txt
deactivate
#生成文件
pip freeze >F:A_FILE\requirements.txt
#復(fù)制環(huán)境
pip install -r requirements.txt

3、更換WSGI容器

  • WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
    flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

雖然 Flask 提供了內(nèi)置 Web 服務(wù)器,但是那種服務(wù)器是為開發(fā)打造的,達不到生產(chǎn)環(huán)境中需要的安全和效率,細心的同學(xué)會注意到,用 app.run() 或者 flask run 啟動應(yīng)用時,都會得到一句警告:Do not use the development server in a production environment.

那么在生產(chǎn)環(huán)境中,需要用生產(chǎn)專用 Web 服務(wù)器,比如 uWSGI、Gunicorn、Gevent 等等。
獨立的WSGI容器:有很多流行的服務(wù)器用Python編寫,它們包含WSGI應(yīng)用程序并提供HTTP服務(wù)。
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel
Web框架(Flask)和Web服務(wù)器(Nginx)之間的通信,需要一套雙方都遵守的接口協(xié)議。而WSGI協(xié)議就是用來統(tǒng)一這兩者的接口的(WSGI是為Python語言定義的Web服務(wù)器和Web應(yīng)用程序或框架之間的一種簡單而通用的接口)

3.1 waitress

安裝waitress
Flask服務(wù)本身并不支持并發(fā)測試,本身的TPS很低,所以需要利用其他工具來支持并發(fā)測試。
waitress是Windows下基于python的一個框架,可以提高Flask的TPS。

waitress支持windows環(huán)境

Waitress是一個具備生產(chǎn)級品質(zhì)并有高性能的純python編寫?yīng)毩⒌腤SGI服務(wù)器,它只依賴python標準庫,不依賴任何第三方庫。 同時它可以在多平臺下運行,比如windows、linux、unix等,支持http/1.0和http/1.1。

pip install waitress

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

from waitress import serve
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
   return 'Hello World,愛看書的小沐!'

if __name__ == '__main__':
    # app.run()
    # app.run(host="127.0.0.1", port="8080")
    # app.run(host='localhost', port=8080, threaded=False, processes=1)
    serve(app, host='0.0.0.0', port=8080)
waitress-serve --call 'flaskr:create_app'
## Serving on http://0.0.0.0:8080

3.2 gevent

https://pypi.org/project/gevent/
http://www.gevent.org/
https://github.com/gevent/gevent

gevent is a coroutine -based Python networking library that uses greenlet to provide a high-level synchronous API on top of the libev or libuv event loop.

安裝gevent:
flask直接用于生產(chǎn)環(huán)境無論是處理高并發(fā)還是魯棒性都有所欠缺,一般會配合WGSI容器來進行生產(chǎn)環(huán)境的部署。WSGI主要規(guī)定了Web服務(wù)器如何與Web應(yīng)用程序進行通信,以及如何將Web應(yīng)用程序鏈接在一起來處理一個請求。

gevent支持windows環(huán)境

gevent是一個基于 libev的并發(fā)庫。它為各種并發(fā)和網(wǎng)絡(luò)相關(guān)的任務(wù)提供了整潔的API。
gevent:基于 libev 與 Greenlet 實現(xiàn)。不同于 Eventlet 的用 python 實現(xiàn)的 hub 調(diào)度,gevent通過 Cython 調(diào)用 libev 來實現(xiàn)一個高效的 event loop 調(diào)度循環(huán)。同時類似于 Event,gevent也有自己的 monkey_patch,在打了補丁后,完全可以使用 python 線程的方式來無感知的使用協(xié)程,減少了開發(fā)成本。

pip install gevent
from gevent.pywsgi import WSGIServer
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
   return 'Hello World,愛看書的小沐!'

if __name__ == '__main__':
    # app.run()
    # app.run(host="127.0.0.1", port="8080")
    # app.run(host='localhost', port=8080, threaded=False, processes=1)
    # serve(app, host='127.0.0.1', port=80, threads=1)
    # serve(app, host='0.0.0.0', port=8080)
    WSGIServer(('127.0.0.1', 8080), app).serve_forever()

引入gevent WSGI Server ,這里需要開啟猴子補丁。而且需要注意 把gevent 猴子補丁 有關(guān)gevent的引入放在導(dǎo)入其他庫的前面。

# gevent
from gevent import monkey
from gevent.pywsgi import WSGIServer
# 有人說添加了如下這一句就不阻塞請求
monkey.patch_all()
# gevent end
from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    # 測試阻塞url1時,url2是否能夠訪問
    time.sleep(3000)
    return 'Hello World1'
    
@app.route('/hello')
def hello():
    return 'Hello World2'
 
if __name__ == '__main__':
    # app.run(port=5000,host="127.0.0.1")
    http_server = WSGIServer(('127.0.0.1', int(5000)), app)
    http_server.serve_forever()

3.3 Gunicorn

https://gunicorn.org
https://github.com/benoitc/gunicorn

Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP Server for UNIX. It’s a pre-fork worker model. The Gunicorn server is broadly compatible with various web frameworks, simply implemented, light on server resources, and fairly speedy.

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

Gunicorn和uWSGI是常用的WSGI容器,Gunicorn直接用命令啟動,不需要編寫配置文件,相對uWSGI要容易很多。

Gunicorn ‘Green Unicorn’ 是一個 UNIX 下的 WSGI HTTP 服務(wù)器,它是一個 移植自 Ruby 的 Unicorn 項目的 pre-fork worker 模型。它既支持 eventlet , 也支持 greenlet.

Gunicorn是一個unix上被廣泛使用的高性能的Python WSGI UNIX HTTP Server。
和大多數(shù)的web框架兼容,并具有實現(xiàn)簡單,輕量級,高性能等特點。

Gunicorn 是一個 Python 的 WSGI HTTP 服務(wù)器。它所在的位置通常是在反向代理(如 Nginx)或者 負載均衡(如 AWS ELB)和一個 web 應(yīng)用(比如 Django 或者 Flask)之間。

目前Gunicorn只能運行在Linux環(huán)境中,不支持windows平臺。

pip install flask
pip install gunicorn
pip show gunicorn

#創(chuàng)建軟連接哦
ln /usr/local/python3.7/bin/gunicorn /usr/bin/gunicorn
# 在hello.py所在的目錄下
# -w 設(shè)置進程數(shù)
# -b 設(shè)置端口
# 默認使用的是8000 可以通過-b 127.0.0.1:5000 設(shè)置到5000或其他端口
gunicorn -w 4 hello:app
gunicorn -w 5 --threads=2  main:app
gunicorn -w 5 --thread=2 --worker-class=gthread main:app
gunicorn --worker-class=gevent --worker-connections=1000 -w 3 main:app
gunicorn -w 4 demo:app --worker-class sync
gunicorn -w 4 demo:app  -k sync
##第一種并發(fā)方式(workers 模式,又名 UNIX 進程模式)
#每個 worker 都是一個加載 Python 應(yīng)用程序的 UNIX 進程。worker 之間沒有共享內(nèi)存。
#建議的 workers 數(shù)量是 (2*CPU)+1。
#對于一個雙核(兩個CPU)機器,5 就是建議的 worker 數(shù)量。
gunicorn --workers=5 main:app

##第二種并發(fā)方式(多線程)
#Gunicorn 還允許每個 worker 擁有多個線程。在這種場景下,Python 應(yīng)用程序每個 worker 都會加載一次,同一個 worker 生成的每個線程共享相同的內(nèi)存空間。
gunicorn --workers=5 --threads=2 main:app
or
gunicorn --workers=5 --threads=2 --worker-class=gthread main:app
#使用四核(4 個 CPU)機器并且我們想使用 workers 和多線程模式,我們可以使用 3 個 worker 和 3 個線程來得到最大為 9 的并發(fā)請求數(shù)量。
gunicorn --workers=3 --threads=3 main:app

##第三種并發(fā)方式(“偽線程”)
#有一些 Python 庫比如(gevent 和 Asyncio)可以在 Python 中啟用多并發(fā)。那是基于協(xié)程實現(xiàn)的“偽線程”。Gunicrn 允許通過設(shè)置對應(yīng)的 worker 類來使用這些異步 Python 庫。
#(2*CPU)+1 仍然是建議的workers 數(shù)量。因為我們僅有一核,我們將會使用 3 個worker。
#在這種情況下,最大的并發(fā)請求數(shù)量是 3000。(3 個 worker * 1000 個連接/worker)
gunicorn --worker-class=gevent --worker-connections=1000 --workers=3 main:app

并發(fā)是指同時執(zhí)行 2 個或更多任務(wù),這可能意味著其中只有一個正在處理,而其他的處于暫停狀態(tài)。
并行是指兩個或多個任務(wù)正在同時執(zhí)行。
在 Python 中,線程和偽線程都是并發(fā)的一種方式,但并不是并行的。但是 workers 是一系列基于并發(fā)或者并行的方式。

gunicorn + flask 簡單示例

  • mytest.py:
from flask import Flask

app = Flask(__name__)

@app.route('/demo', methods=['GET'])
def demo():
    return "This is a gunicorn and flask demo."
gunicorn mytest:app
#or
gunicorn --workers=2 mytest:app
#or
gunicorn --workers=4 --bind=127.0.0.1:8000 mytest:app

3.4 uWsgi

uWSGI 也是部署 Flask 的途徑之一,類似的部署途徑還有 nginx 、 lighttpd 和 cherokee 。其他部署途徑的信息參見 FastCGI 和 獨立 WSGI 容器 。 使用 uWSGI 協(xié)議來部署 WSGI 應(yīng)用的先決條件是需要一個 uWSGI 服務(wù)器。 uWSGI 既是一個協(xié)議也是一個服務(wù)器。如果作為一個服務(wù)器,它可以服務(wù)于 uWSGI 、 FastCGI 和 HTTP 協(xié)議。

uWSGI是一個全功能的HTTP服務(wù)器,實現(xiàn)了WSGI協(xié)議、uwsgi協(xié)議、http協(xié)議等。它要做的就是把HTTP協(xié)議轉(zhuǎn)化成語言支持的網(wǎng)絡(luò)協(xié)議。比如把HTTP協(xié)議轉(zhuǎn)化成WSGI協(xié)議,讓Python可以直接使用。

最流行的 uWSGI 服務(wù)器是 uwsgi。

有網(wǎng)友說Windows 10安裝uWSGI不可行,不要浪費時間。

pip install uwsgi
啟動:uwsgi --ini uwsgi.ini
重啟:uwsgi --reload uwsgi.pid
停止:uwsgi --stop uwsgi.pid

uwsgi --version
uwsgi --python-versioin
uwsgi --http :9090 --wsgi-file run.py
# --http: 通過 http 可訪問,綁定端口為 9090
# --wsgi-file:指定啟動腳本
#創(chuàng)建的文件名是 start.ini
[uwsgi]
#uwsgi啟動時,所使用的地址和端口(這個是http協(xié)議的)
http=0.0.0.0:8000
#指向網(wǎng)站目錄
chdir=/Users/myProjects/test001
#python 啟動程序文件
wsgi-file=app.py
#python 程序內(nèi)用以啟動的application 變量名
callable=app
#處理器數(shù)
processes=4
#線程數(shù)
threads=2

#直接命令行啟動項目
uwsgi --ini start.ini

#如果你執(zhí)行了 ctrl + c 命令退出了命令行,會發(fā)現(xiàn)我們的項目訪問不到了,因為你退出了前臺運行的 uwsgi 命令。
#想要退出當(dāng)前命令行,去執(zhí)行其他命令,而 flask 應(yīng)用可以正常訪問,只需要多加一個參數(shù) -d 即可,如下:
uwsgi -d --ini start.ini

#mac、Linux下首先查看 uwsgi 的進行號
ps -ef|grep uwsgi

3.5 Twisted Web

Twisted Web 是一個 Twisted 自帶的網(wǎng)絡(luò)服務(wù)器,是一個成熟的、異步的、 事件驅(qū)動的網(wǎng)絡(luò)庫。 Twisted Web 帶有一個標準的 WSGI 容器,該容器可以使用 twistd 工具運行命令行來控制。
Twisted Web支持windows環(huán)境部署

pip install -i https://pypi.douban.com/simple/  twisted
  • flask_web.py:
from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World'
    
if __name__ == '__main__':
    app.run()

通過命令行執(zhí)行:

twistd -n web --wsgi flask_web.app

或者通過bat文件執(zhí)行:

  • flask_run.bat
set PYTHONPATH=.;venv/Lib;venv/Lib/site-packages
set PATH=%PATH%;venv/Scripts
twistd -n web --port tcp:8080 --wsgi run.app

3.6 Tornado+nginx

【W(wǎng)eb開發(fā)】Python實現(xiàn)Web服務(wù)器(Tornado+flask+nginx)
https://blog.csdn.net/hhy321/article/details/125233806
Tornado+nginx支持windows環(huán)境部署

3.7 apache+mod_wsgi

首先需要安裝apache和mod_wsgi,需要注意的是python版本,apache版本,mod_wsgi版本要匹配,不然會出問題。
apache+mod_wsgi支持windows環(huán)境部署

Apache下載網(wǎng)址:https://www.apachelounge.com/download/VC10/
https://www.apachehaus.com/downloads/httpd-2.4.54-o111s-x64-vs17.zip
https://www.apachelounge.com/download/VC10/binaries/httpd-2.4.23-win64.zip
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel
mod-wsgi下載網(wǎng)址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel
將下載好的httpd和mod-wsgi壓縮包解壓,然后將mod-wsgi的pyd文件放在httpd的modules文件夾里,如下圖所示。
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

新建測試項目文件夾test,在里面新建test_flask.py。

  • test_flask.py
import json
from flask import Flask, request, jsonify,render_template
app = Flask(__name__)

tasks = [
    {
        'id': 1,
        'title': u'訂閱 a 專欄',
        'description': u'專欄Link: https://www.a.com'
    },
    {
        'id': 2,
        'title': u'訂閱 b 專欄',
        'description': u'專欄Link: https://www.b.com'
    }
]

@app.route('/test')
def hello_world():
    return 'Hello World,愛看書的小沐!'

@app.route("/")
def index():
    # return render_template("index.html")
    return jsonify({'tasks': 200})

@app.route('/api/v1.0/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': tasks})
    
@app.route('/getdata')
def get_data():
    language = ['python', 'java', 'c', 'c++', 'c#', 'php']
    value = ['100', '150', '100', '90', '80', '90']
    return json.dumps({'language':language,'value':value},ensure_ascii=False) 

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

在項目文件夾test里,新建文件myapp.wsgi

  • myapp.wsgi
    flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

修改apache httpd的相關(guān)參數(shù)設(shè)置。
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel
httpd.conf文件增加一行:

LoadModule wsgi_module modules/mod_wsgi.cp38-win_amd64.pyd

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel
修改一下httpd.conf的第40行的SRVROOT的參數(shù),不修改的話,運行可能報錯:
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

httpd.conf文件的最后面增加一段代碼如下:

<VirtualHost *:80>
     ServerAdmin "127.0.0.1"
     ServerName localhost:80
     DocumentRoot D:\0627\test
     <Directory D:\0627\test>
         Require all granted
     </Directory>
     WSGIScriptAlias / D:\0627\test\myapp.wsgi
 </VirtualHost>

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

然后執(zhí)行Apache24\bin\httpd.exe,開啟web服務(wù)。
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel
最后瀏覽器訪問:

http://127.0.0.1

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

http://127.0.0.1/test

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

http://127.0.0.1/getdata

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel
如果出錯去apache24的logs文件夾的error.log文件去看輸出了什么錯。
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

4、打包工具PyInstaller

https://pypi.org/project/pyinstaller/
https://pyinstaller.org/en/stable/

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

4.1 requirements.txt

pip 提供了導(dǎo)出依賴模塊名錄的功能,可以一并導(dǎo)出依賴名錄:
? 將環(huán)境中依賴的外部模塊名錄導(dǎo)入到 requirements.txt 中

pip freeze > requirements.txt

由于 pip freeze 與 pip list 內(nèi)容區(qū)別不大,所以,若想要用其作為工程依賴包列表,一定要配合 Python 虛擬環(huán)境 virtualenv 使用。
? 在服務(wù)器上依據(jù) requirements.txt 安裝應(yīng)用依賴

pip install -r requirements.txt

我們要將 requirements.txt 作為項目代碼的一部分。

4.2 安裝

Python 默認并不包含 PyInstaller 模塊,因此需要自行安裝 PyInstaller 模塊。
安裝 PyInstaller 模塊與安裝其他 Python 模塊一樣,使用 pip 命令安裝即可。

pip install pyinstaller

4.3 參數(shù)

常用參數(shù)如下:
-F:打包 Python 程序為單個可執(zhí)行文件
-D:打包 Python 程序為一個文件夾
-i:生成圖標,只適用于 Windows 平臺
-n:指定打包后生成文件的名稱
-w:表示去掉控制臺窗口,這在GUI界面時非常有用。
–add-data: 表示添加資源文件,參數(shù)為 “源地址;目標地址”

-h –help 查看該模塊的幫助信息
-F -onefile 產(chǎn)生單個的可執(zhí)行文件
-D –onedir 產(chǎn)生一個目錄(包含多個文件)作為可執(zhí)行程序
-a –ascii 不包含 Unicode 字符集支持
-d –debug 產(chǎn)生 debug 版本的可執(zhí)行文件
-w –windowed,–noconsolc 指定程序運行時不顯示命令行窗口(僅對 Windows 有效)
-c –nowindowed,–console 指定使用命令行窗口運行程序(僅對 Windows 有效)
-o DIR –out=DIR 指定 spec 文件的生成目錄。如果沒有指定,則默認使用當(dāng)前目錄來生成 spec 文件
-p DIR –path=DIR 設(shè)置 Python 導(dǎo)入模塊的路徑(和設(shè)置 PYTHONPATH 環(huán)境變量的作用相似)。也可使用路徑分隔符(Windows 使用分號,Linux 使用冒號)來分隔多個路徑
-n NAME –name=NAME 指定項目(產(chǎn)生的 spec)名字。如果省略該選項,那么第一個腳本的主文件名將作為 spec 的名字
參數(shù) 參數(shù)意義
-F --onefile 1.打包單個文件,產(chǎn)生一個文件用于部署(默認),如果代碼都寫在一個.py文件時使用,項目有多個文件時不要使用。例:pyinstaller -F xxx.py,例:pyinstaller --onefile xxxx.py
-D --onedir 1.打包多個文件,產(chǎn)生一個目錄用于部署(默認),用于框架編寫的代碼打包。例:pyinstaller -D xxx.py(項目入口文件),例:pyinstaller --onedir xxx.py(項目入口文件)
–key=keys 1.使用keys進行加密打包。例:pyinstaller --key=1234 -F xx.py
-K --tk 1.在部署時包含 TCL/TK
-a --ascii 1.不包含編碼.在支持Unicode的python版本上默認包含所有的編碼
-d --debug 1.產(chǎn)生debug版本的可執(zhí)行文件
-n name --name=name 1.可選的項目(產(chǎn)生的spec的)名字name。2.第一個腳本的主文件名將作為spec的名字(默認)。例:pyinstaller -F -n my_file_name xxx.py。例:pyinstaller -F --name=my_file_name xxx.py
-o dir – out=dir 1.指定spec文件的生成目錄dir。2.如果沒有指定且當(dāng)前目錄是PyInstaller的根目錄,會自動創(chuàng)建一個用于輸出(spec和生成的可執(zhí)行文件)的目錄。3.如果沒有指定切當(dāng)前目錄不是PyInstaller的根目錄,則會輸出到當(dāng)前的目錄下
-p dir --path=dir 1.用來添加程序所用到的包的所在位置,設(shè)置導(dǎo)入路徑(和使用pythonpath效果相似)。2.可以用路徑分割符(Windows使用分號,Linux使用冒號)分割,指定多個目錄.也可以使用多個-p參數(shù)來設(shè)置多個導(dǎo)入路徑,讓Pyintaller自己去找程序需要的資源。
-w --windowed --noconsole 1.表示去掉控制臺窗口,使用Windows子系統(tǒng)執(zhí)行,當(dāng)程序啟動的時候不會打開命令行(只對Windows有效)。例:pyinstaller -c xxx.py。例:pyinstaller xxx.py --noconsole
-c --nowindowed --console 1.表示打開控制臺窗口,使用控制臺子系統(tǒng)執(zhí)行,當(dāng)程序啟動的時候會打開命令行(默認)(只對Windows有效)。例:pyinstaller -c xxx.py。例:pyinstaller xxx.py --console
-i --icon=<file.ioc> 1.將file.ico添加為可執(zhí)行文件的資源,改變程序的圖標(只對Windows系統(tǒng)有效)。例:pyinstaller -F -i file.ico xxx.py。例:pyinstall -F --icon=<file.ioc> xxx.py --icon=<file.exe,n> 1.將file.exe的第n個圖標添加為可執(zhí)行文件的資源(只對Windows系統(tǒng)有效)
-v file --version=file 1.將verfile作為可執(zhí)行文件的版本資源(只對Windows系統(tǒng)有效)
-s --strip 1.可執(zhí)行文件和共享庫將run through strip.注意Cygwin的strip往往使普通的win32 Dll無法使用
-X --upx 1.如果有UPX安裝(執(zhí)行Configure.py時檢測),會壓縮執(zhí)行文件(Windows系統(tǒng)中的DLL也會)(參見note)

4.4 示例

pyinstaller your_program.py
pyinstaller --add-data 'src/README.txt:.' myscript.py
Pyinstaller -F -w main.py
pyinstaller -F -w --add-data="xxxx.gif;." myapp.py
pyinstaller -F xxx.spec

#pyinstaller x.py --add-data="源地址;目標地址"。 windows以;分割,linux以:分割
#將 config 目錄的所有文件打包到目標的 config 文件夾(不存在會自動創(chuàng)建)下
pyinstaller x.py --add-data ".\\config\\*;.\\config"

#可使用多次 --add-data
pyinstaller x.py  -n Demo2.0.3 --key !@)v -i "res\logo.ico"  
--add-data=".\*.txt;." --add-data=".\*.json;." --add-data="res\*.*;.\res" 
--add-data="dist\models\*.*;.\models"
  • 打包單個文件
# 1.執(zhí)行命令
pyinstaller -F xxx.py
# 2.去生成的dist文件夾找xxx.exe運行
# 3.運行成功,xxx.exe則為可執(zhí)行文件,刪除其它文件
  • 打包多個文件
# 1.執(zhí)行命令,xxx.py為程序入口文件
pyinstall -D xxx.py 
# 2.刪除生成的bulid和dist文件夾,僅保留xxx.spec文件
# 3.修改xxx.spec文件,詳見2.2.1
# 4.執(zhí)行命令
pyinstaller -F xxx.spec
# 5.去dist文件夾下找xxx.exe文件
# 6.運行成功,刪除臨時文件目錄build;dist目錄為打包的結(jié)果,可執(zhí)行文件和其它程序運行的關(guān)聯(lián)文件都在這個目錄下
  • 注意事項:
    (1)文件打包后過大?在程序中盡量不使用import xx;而是使用 from xx import xx。
    (2)編輯.spec文件路徑相關(guān)。windows盡量使用絕對路徑,用雙斜杠\。linux路徑/home/my_project/web。路徑避免使用中文。
    (3)打包錯誤:ModuleNotFoundError: No module named ‘xxx’
    方法1:pyinstaller -D --hidden-import=“xxx” main.py
    方法2:在myapp.spec中配置hiddenimports=[‘xxx’]
    (4)打包.spec文件報錯:RecursionError: maximum recursion depth exceeded
    在spec文件上添加遞歸深度的設(shè)置
    import sys
    sys.setrecursionlimit(5000)

  • 利用*.spec 打包文件配置來實現(xiàn)多文件打包

# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
# 可以將需要的文件夾,資源這樣添加進包里
# 資源文件、代碼需要打包一起的
added_files = [
           ('d:/demo/Libs', 'Libs' ),
           ('d:/demo/Script', 'Script' )
         ]
#Analysis為主入口文件
a = Analysis(['main.py'],
#他的路徑
             pathex=['d:\\demo'],
             binaries=[],
             datas=added_files,
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          # 打包程序的名字
          name='your_exe_name',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True,
#圖標的地址
icon='your.ico' )
# -*- mode: python ; coding: utf-8 -*-
block_cipher = pyi_crypto.PyiBlockCipher(key='!@)v')
 
a = Analysis(['x.py'],
             pathex=['D:\\Miniconda3\\envs\\cuda11\\Lib\\site-packages', 'D:\\project\\demo'],
             binaries=[],
             datas=[('.\\*.json', '.'), ('res\\*.*', '.\\res'), ('dist\\models\\*.*', '.\\models')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='Demo2.0.3',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=False , icon='res\\logo.ico')
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='Demo2.0.3')

5、注冊Windows服務(wù)

5.1 pyinstaller + nssm

  • (1)安裝相關(guān)庫
# 安裝flask庫
pip install flask

# 安裝pyinstaller庫
pip install pyinstaller
# or
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller
  • (2)編寫相關(guān)web邏輯

myapp.py:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from flask import Flask, request, jsonify
app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World,愛看書的小沐!'


@app.route('/modelstatus', methods=['GET', 'POST'])
def train_status():
    if request.method == 'GET':
        return jsonify({'code': 200, 'status': 'false', 'msg': 'hello'})
    else:
        return jsonify({'code': 500, 'msg': '不支持該請求'})


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8080)
  • (3)執(zhí)行flask服務(wù)打包
#pyinstaller -p venv\Lib\site-packages -F --icon=鉛筆.ico myapp.py --noconsole
pyinstaller -F -p D:\0627\hello  myapp.py
參數(shù)名 描述 說明
-D 生成one-folder的程序(默認) 生成結(jié)果是一個目錄,各種第三方依賴、資源和exe同時存儲在該目錄
-F 生成one-file的程序 生成結(jié)果是一個exe文件,所有的第三方依賴、資源和代碼均被打包進該exe內(nèi)
–specpath 指定.spec文件的存儲路徑 默認:當(dāng)前目錄
-n 生成的.exe文件和.spec的文件名 默認:用戶腳本的名稱,即main.py和main.spec
-p 指定額外的import路徑 類似于使用PYTHONPATH 參見PYTHONPATH
-d 執(zhí)行生成的main.exe時,會輸出pyi的一些log,有助于查錯 默認:不輸出pyi的log
-c 顯示命令行窗口 與-w相反,默認含有此參數(shù)
-w 不顯示命令行窗口 編寫GUI程序時使用此參數(shù)有用。
-i 為main.exe指定圖標 pyinstaller -i beauty.ico main.py

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

  • (4)注冊windows服務(wù)
    nssm是一個服務(wù)封裝程序,它可以將普通exe程序封裝成服務(wù),使之像windows服務(wù)一樣運行。同類型的工具還有微軟自己的srvany,不過nssm更加簡單易用,并且功能強大。

nssm應(yīng)該在 Windows 2000 或更高版本下工作。具體來說,支持 Windows 7、Windows 8 和Windows 10。下載中包含 32 位和 64 位二進制文??件。大多數(shù)時候在 64 位 Windows 上運行 32 位版本應(yīng)該是安全的,但在某些情況下您可能會發(fā)現(xiàn)它不起作用,您必須使用 64 位版本。兩個版本都是從相同的源代碼編譯而來的。如果一個對你有用,就用那個。如果沒有,請嘗試另一個。

直接下載:

https://nssm.cc/release/nssm-2.24.zip

(1)服務(wù)安裝

nssm install <servicename>
nssm install <servicename> <program>
nssm install <servicename> <program> [<arguments>]

默認情況下,服務(wù)的啟動目錄將設(shè)置為包含program. 安裝服務(wù)后,可以覆蓋啟動目錄。

nssm set <servicename> AppDirectory <path>

(2)服務(wù)移除

nssm remove
nssm remove <servicename>
nssm remove <servicename> confirm

(3)啟動和停止服務(wù)

nssm start <servicename>
nssm stop <servicename>
nssm restart <servicename>

(4)查詢服務(wù)狀態(tài)

nssm status <servicename>

在cmd中進入nssm中的目錄,然后進行命令
nssm install myapp(自定義的服務(wù)名)
選擇Application path按鈕將pyinstaller打包后的exe文件選擇過來。
點擊installer service按鈕,則提示成功,此時去windows服務(wù)中查看服務(wù)即可。

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel
啟動和停止我們的服務(wù)如下:
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel
任務(wù)管理器查看服務(wù)狀態(tài)如下:
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

5.2 pywin32

  • (1)安裝相關(guān)庫
pip install flask gevent pywin32
  • (2)編寫代碼
    myapp.py:
from flask import Flask, request, jsonify
app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World,愛看書的小沐!'


@app.route('/modelstatus', methods=['GET', 'POST'])
def train_status():
    if request.method == 'GET':
        return jsonify({'code': 200, 'status': 'false', 'msg': 'hello'})
    else:
        return jsonify({'code': 500, 'msg': '不支持該請求'})

myservice.py:

import win32serviceutil
from gevent.pywsgi import WSGIServer
from myapp import app

class MyFlaskService(win32serviceutil.ServiceFramework):
    # 服務(wù)名
    _svc_name_ = "myservice_dtale"
    # 顯示服務(wù)名
    _svc_display_name_ = "myservice_dtale"
    # 描述
    _svc_description_ = "myservice_dtale's description"

    def __init__(self, *args):
        super().__init__(*args)
        # host和ip綁定
        self.http_server = WSGIServer(('127.0.0.1', 9090), app)
        self.SvcStop = self.http_server.stop
        self.SvcDoRun = self.http_server.serve_forever

if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(MyFlaskService)

myserver.py:(另一個寫法)

import win32serviceutil
import win32service
import win32event
import win32evtlogutil
import servicemanager
import socket

import os
import sys
sys.path.append(os.path.dirname(__name__))

# import dtale
# import pandas as pd
from gevent.pywsgi import WSGIServer
from myapp import app

class MyDTaleService (win32serviceutil.ServiceFramework):
    # 服務(wù)名
    _svc_name_ = "myservice_dtale"
    # 顯示服務(wù)名
    _svc_display_name_ = "myservice_dtale"
    # 描述
    _svc_description_ = "myservice_dtale's description"
    
    def __init__(self, *args):
        super().__init__(*args)
        self.hWaitStop = win32event.CreateEvent(None,0,0,None)
        socket.setdefaulttimeout(5)
        self.stop_requested = False
        # create server
        self.http_server = WSGIServer(('127.0.0.1', 9090), app)

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)
        self.ReportServiceStatus(win32service.SERVICE_STOPPED)
        self.stop_requested = True
        # stop server
        self.http_server.stop()

    def SvcDoRun(self):
        servicemanager.LogMsg(
            servicemanager.EVENTLOG_INFORMATION_TYPE,
            servicemanager.PYS_SERVICE_STARTED,
            (self._svc_name_,'')
        )
        # start server
        self.main()

    def main(self):
        # df = pd.DataFrame([dict(a=1,b=2,c=3), dict(a=123.732,b=1.414,c=3.1415)])
        # dtale.show(df, open_browser=False)
        
        self.http_server.serve_forever()

if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(MyDTaleService)
  • (3)添加系統(tǒng)環(huán)境變量
# 注意環(huán)境變量要加在系統(tǒng)環(huán)境變量的Path中,不要加在用戶的環(huán)境變量中
C:\Python38
C:\Python38\Scripts
#C:\Python38\Lib\site-packages\win32
C:\Python38\Lib\site-packages\pywin32_system32
  • (4)安裝服務(wù)
服務(wù)安裝
python myservice.py install
讓服務(wù)自動啟動
python myservice.py --startup auto install
啟動服務(wù)
python myservice.py start
重啟服務(wù)
python myservice.py restart
停止服務(wù)
python myservice.py stop
刪除/卸載服務(wù)
python myservice.py remove

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

6、whl文件制作

wheel是python新的發(fā)行標準,旨在替代傳統(tǒng)的egg,pip >=1.4的版本均支持wheel, 使用wheel作為你python庫的發(fā)行文件,有如下好處:

  • 純Python和本機C擴展軟件包的安裝速度更快
  • 避免執(zhí)行任意代碼進行安裝。(避免setup.py)
  • C擴展的安裝不需要在Linux,Windows或macOS上進行編譯
  • 允許更好地緩存以進行測試和持續(xù)集成
  • 在安裝過程中創(chuàng)建.pyc文件,以確保它們與使用的Python解釋器匹配
  • 跨平臺和機器的安裝更加一致

6.1 安裝

pip wheel 使用要求: setuptools>=0.8 和 wheel
pip wheel 使用包 wheel 包提供的 bdist_wheel 這個 setuptools 擴展來構(gòu)建單個 wheel

pip install wheel
pip install --upgrade setuptools

#or
python3 -m pip install --user --upgrade setuptools wheel

6.2 示例

準備文件如下:
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

init.py:

# -*- coding: utf-8 -*-
# __init__.py
from .myapp import *
from .myservice import *

setup.py:

# -*- coding: utf-8 -*-
# setup.py
from setuptools import setup, find_packages

setup(
    name='myApp',
    version='1.1',
    packages=find_packages(),
    author='tomcat',
    author_email='xxx@163.com',
    description='測試打包',
    url='http://www.baidu.com',
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires='>=3.6',
)

執(zhí)行命令行命令wheel,生成whl文件。

python .\setup.py bdist_wheel
# or
python setup.py sdist bdist_wheel

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel
另外還可以:pip wheel --wheel-dir=/root/whl ./

flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel

結(jié)語

如果您覺得該方法或代碼有一點點用處,可以給作者點個贊,或打賞杯咖啡;╮( ̄▽ ̄)╭
如果您感覺方法或代碼不咋地//(ㄒoㄒ)//,就在評論處留言,作者繼續(xù)改進;o_O???
如果您需要相關(guān)功能的代碼定制化開發(fā),可以留言私信作者;(????)
感謝各位大佬童鞋們的支持!( ′ ▽′ )? ( ′ ▽′)っ?。?!
flask項目打包并部署,Python,Web,flask,pyinstaller,gevent,pywin32,wheel文章來源地址http://www.zghlxwxcb.cn/news/detail-532700.html

到了這里,關(guān)于【小沐學(xué)Python】Python實現(xiàn)Web服務(wù)器(Flask打包部署上線)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【小沐學(xué)前端】Node.js搭建HTTPS 服務(wù)器

    【小沐學(xué)前端】Node.js搭建HTTPS 服務(wù)器

    HTTPS是什么?HTTPS是基于TLS/SSL的HTTP協(xié)議。 HTTPS (全稱:Hypertext Transfer Protocol Secure),是以安全為目標的 HTTP 通道,在HTTP的基礎(chǔ)上通過傳輸加密和身份認證保證了傳輸過程的安全性。HTTPS 在HTTP 的基礎(chǔ)下加入SSL,HTTPS 的安全基礎(chǔ)是 SSL,因此加密的詳細內(nèi)容就需要 SSL。 HTTPS 存

    2024年02月03日
    瀏覽(25)
  • 【小沐學(xué)Python】Python實現(xiàn)Web圖表功能(Dash)

    【小沐學(xué)Python】Python實現(xiàn)Web圖表功能(Dash)

    https://dash.plotly.com/ https://dash.gallery/Portal/ Dash 是一個用于構(gòu)建Web應(yīng)用程序的 Python 庫,無需 JavaScript 。 Dash是下載量最大,最值得信賴的Python框架,用于構(gòu)建ML和數(shù)據(jù)科學(xué)Web應(yīng)用程序。 Dash是一個用來創(chuàng)建 web 應(yīng)用的 python 庫,它建立在 Plotly.js(同一個團隊開發(fā))、React 和 Flask 之上

    2024年02月04日
    瀏覽(96)
  • flask+Python+Vue實現(xiàn)前后端分離的web項目并部署至云服務(wù)器

    flask+Python+Vue實現(xiàn)前后端分離的web項目并部署至云服務(wù)器

    1 后臺+算法模型 1.1 訓(xùn)練機器學(xué)習(xí)模型 1.2 基于Flask框架搭建后臺接口 注意:前后端跨域問題,可引入CORS解決,具體如代碼: 2 前端搭建 3 云服務(wù)器部署 詳細設(shè)置教程可參考linux CentOS 寶塔面板安裝設(shè)置教程 安裝Nginx和python項目管理器,后續(xù)可在面板上操作,完成項目打包上傳

    2024年02月07日
    瀏覽(24)
  • 【小沐學(xué)NLP】Python實現(xiàn)聊天機器人(微軟Azure機器人服務(wù))

    【小沐學(xué)NLP】Python實現(xiàn)聊天機器人(微軟Azure機器人服務(wù))

    ??NLP開發(fā)系列相關(guān)文章編寫如下??: 1 ??【小沐學(xué)NLP】Python實現(xiàn)詞云圖?? 2 ??【小沐學(xué)NLP】Python實現(xiàn)圖片文字識別?? 3 ??【小沐學(xué)NLP】Python實現(xiàn)中文、英文分詞?? 4 ??【小沐學(xué)NLP】Python實現(xiàn)聊天機器人(ELIZA))?? 5 ??【小沐學(xué)NLP】Python實現(xiàn)聊天機器人(ALICE)?? 6

    2024年02月12日
    瀏覽(98)
  • 使用IIS服務(wù)器部署Flask python Web項目

    使用IIS服務(wù)器部署Flask python Web項目

    參考文章 參考文章 將Flask應(yīng)用程序部署到IIS服務(wù)器上需要一些步驟,因為IIS是為.NET應(yīng)用程序設(shè)計的。要將Flask Python Web項目部署到IIS服務(wù)器,您需要使用一個稱為\\\"FastCGI\\\"的橋接工具來連接IIS和Python應(yīng)用程序。以下是將Flask應(yīng)用程序部署到IIS服務(wù)器的一般步驟: 安裝IIS和FastCG

    2024年04月16日
    瀏覽(42)
  • 【小沐學(xué)Python】Python實現(xiàn)語音識別(SpeechRecognition)

    【小沐學(xué)Python】Python實現(xiàn)語音識別(SpeechRecognition)

    https://pypi.org/project/SpeechRecognition/ https://github.com/Uberi/speech_recognition SpeechRecognition用于執(zhí)行語音識別的庫,支持多個引擎和 API,在線和離線。 Speech recognition engine/API 支持如下接口: 以上幾個中只有 recognition_sphinx()可與CMU Sphinx 引擎脫機工作, 其他六個都需要連接互聯(lián)網(wǎng)。另

    2024年02月04日
    瀏覽(96)
  • 【小沐學(xué)Python】Python實現(xiàn)語音識別(Whisper)

    【小沐學(xué)Python】Python實現(xiàn)語音識別(Whisper)

    https://github.com/openai/whisper Whisper 是一種通用的語音識別模型。它是在包含各種音頻的大型數(shù)據(jù)集上訓(xùn)練的,也是一個多任務(wù)模型,可以執(zhí)行多語言語音識別、語音翻譯和語言識別。 Open AI在2022年9月21日開源了號稱其英文語音辨識能力已達到人類水準的Whisper神經(jīng)網(wǎng)絡(luò),且它亦支

    2024年02月04日
    瀏覽(1049)
  • 【小沐學(xué)NLP】Python實現(xiàn)聊天機器人(微軟小冰)

    【小沐學(xué)NLP】Python實現(xiàn)聊天機器人(微軟小冰)

    ??NLP開發(fā)系列相關(guān)文章編寫如下??: 1 ??【小沐學(xué)NLP】Python實現(xiàn)詞云圖?? 2 ??【小沐學(xué)NLP】Python實現(xiàn)圖片文字識別?? 3 ??【小沐學(xué)NLP】Python實現(xiàn)中文、英文分詞?? 4 ??【小沐學(xué)NLP】Python實現(xiàn)聊天機器人(ELIZA))?? 5 ??【小沐學(xué)NLP】Python實現(xiàn)聊天機器人(ALICE)?? 6

    2024年02月05日
    瀏覽(95)
  • python flask創(chuàng)建服務(wù)器實現(xiàn)文件的上傳下載,已獲千贊

    python flask創(chuàng)建服務(wù)器實現(xiàn)文件的上傳下載,已獲千贊

    } 二、后端代碼(python) import os from string import Template from flask import Flask, send_file,request,jsonify from flask_cors import CORS import time app = Flask( name ) absolute = os.path.dirname( file ) CORS(app) app.debug = True FOLDER = os.path.join(absolute, ‘save_file’) HOST = “l(fā)ocalhost” PORT = 8080 UPLOAD = ‘upload’ app.config

    2024年04月22日
    瀏覽(103)
  • 【小沐學(xué)Python】Python實現(xiàn)在線電子書(Sphinx + readthedocs + github + Markdown)

    【小沐學(xué)Python】Python實現(xiàn)在線電子書(Sphinx + readthedocs + github + Markdown)

    Sphinx 是一個 文檔生成器 ,您也可以把它看成一種工具,它可以將一組純文本源文件轉(zhuǎn)換成各種輸出格式,并且自動生成交叉引用、索引等。也就是說,如果您的目錄包含一堆 reStructuredText 或 Markdown 文檔,那么 Sphinx 就能生成一系列HTML文件,PDF文件(通過LaTeX),手冊頁等。

    2024年02月10日
    瀏覽(90)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包