Python 開發環境的準備以及一些常用類庫模塊的安裝

来源:https://www.cnblogs.com/wuhuacong/p/18355162
-Advertisement-
Play Games

在學習和開發Python的時候,第一步的工作就是先準備好開發環境,包括相關常用的插件,以及一些輔助工具,這樣我們在後續的開發工作中,才能做到事半功倍。下麵介紹一些Python 開發環境的準備以及一些常用類庫模塊的安裝和使用的經驗總結,供大家參考瞭解。 ...


在學習和開發Python的時候,第一步的工作就是先準備好開發環境,包括相關常用的插件,以及一些輔助工具,這樣我們在後續的開發工作中,才能做到事半功倍。下麵介紹一些Python 開發環境的準備以及一些常用類庫模塊的安裝和使用的經驗總結,供大家參考瞭解。

1、開發VScode的安裝及相關準備

在 Python 開發環境的準備中,有幾個步驟是關鍵的。以下是一個詳細的指南,涵蓋了開發環境的準備以及一些常用插件的安裝:

1)安裝 VS Code
VS Code: 這是一個輕量級但功能強大的代碼編輯器,支持豐富的擴展。你可以從 Visual Studio Code 官方網站 下載。打開官網 https://code.visualstudio.com/,下載軟體包。或者你也可以使用其他的如 PyCharm,可以從 JetBrains 官方網站 下載。

Python AI 編程助手:Fitten Code:

它是由非十大模型驅動的 AI 編程助手,它可以自動生成代碼,提升開發效率,幫您調試 Bug,節省您的時間,另外還可以對話聊天,解決您編程碰到的問題。

Fitten Code是由非十大模型驅動的AI編程助手,它可以自動生成代碼,提升開發效率,幫您調試Bug,節省您的時間。還可以對話聊天,解決您編程碰到的問題。免費且支持80多種語言:Python、C++、Javascript、Typescript、Java等。

強烈推薦使用,自動補齊代碼功能,可以節省很多手工鍵入代碼的時間,減少錯誤。

2)安裝 VS Code Python 擴展
在VSCode中安裝 Python 擴展,在擴展市場搜索 Python 並安裝。

3)安裝 Python 
首先,確保你已經安裝了 Python。你可以從 Python 官方網站 下載最新版本安裝包並安裝。
Window 平臺安裝 Python: https://www.python.org/downloads/windows/
Mac 平臺安裝 Python: https://www.python.org/downloads/mac-osx/

4)配置 Python 環境變數
打開系統環境變數,在 PATH 變數中添加 Python 目錄,這樣可以在命令行中直接使用 Python。

5)測試 Python 環境
在命令行中輸入 python,如果出現 Python 解釋器版本信息,則表示 Python 環境配置成功。

6)安裝 pip
打開命令行,輸入 pip install --upgrade pip,升級 pip 到最新版本。

7)安裝 virtualenv
打開命令行,輸入 pip install virtualenv,安裝 virtualenv。

 

2、Python一些常用類庫模塊的安裝

Python開發常用類庫模塊非常多,看你側重於那個方面,基本上都時列出來一大串,我以常規後端Web API開發為側重點進行一些重點的推介,供參考學習。

1) requests

requests 是一個簡單易用的 Python 庫,地址:https://github.com/psf/requests,用於發送 HTTP 請求。它的設計目標是使得與 Web 服務的交互更加方便和人性化。requests 是基於 urllib3 之上的一個封裝層,提供了簡潔的 API 來處理常見的 HTTP 請求操作,如 GET、POST、PUT、DELETE 等。

requests 的主要特性

  • 簡潔的 API:相比原生的 urllibrequests 提供了更直觀、更容易理解的介面。
  • 自動處理編碼requests 自動處理響應的內容編碼,並自動解碼 gzipdeflate 壓縮。
  • 支持保持會話:通過 Session 對象,requests 可以在多個請求之間保持會話,處理 cookies。
  • 簡化的錯誤處理requests 會根據 HTTP 響應狀態碼拋出相應的異常,從而簡化錯誤處理流程。
  • 豐富的功能:支持 HTTP 認證、代理、SSL 證書驗證、文件上傳、多部分編碼表單、會話對象、cookie 持久化、連接池管理等功能。

如果需要考慮非同步處理,可以使用 aiohttp :aiohttp 是一個非同步 HTTP 客戶端和伺服器框架,它使用 Python 的 asyncio 庫來處理大量併發的請求。aiohttp 適合那些需要高性能網路通信的應用,如 Web 服務、WebSocket 和實時數據處理。

2) Uvicorn

Uvicorn 是一個基於 ASGI(Asynchronous Server Gateway Interface)的高性能、輕量級的 Python Web 伺服器,專為運行非同步 Web 框架(如 FastAPI、Starlette)而設計。它利用了 Python 的非同步功能,能夠處理大量併發連接,適合構建現代的非同步 Web 應用程式。

Uvicorn 的主要特性

  • 高性能: 使用 uvloophttptools 提供極高的性能,適合在高併發場景下使用。
  • 非同步支持: 支持非同步編程模型,能夠與 Python 的 asynciotrio 無縫集成。
  • ASGI 相容: 完全相容 ASGI 標準,適用於現代非同步 Web 框架,如 FastAPI 和 Starlette。
  • WebSocket 支持: 通過 ASGI,Uvicorn 原生支持 WebSocket 協議。
  • 靈活的部署: 既可以作為獨立的開發伺服器使用,也可以與 Gunicorn 等 WSGI 伺服器結合部署生產環境。
安裝 Uvicorn pip install uvicorn
運行 Uvicorn uvicorn testuvicorn:app --reload

Uvicorn 通常用於運行 FastAPI 或 Starlette 應用。以下是一個簡單的 FastAPI 應用並使用 Uvicorn 運行:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)
  Uvicorn 提供了豐富的配置選項,以滿足不同需求。可以通過命令行參數或配置文件來配置 Uvicorn 的行為。  以下是一些常用的配置選項: --host:指定主機地址,預設為 127.0.0.1。 --port:指定埠號,預設為 8000。 --workers:指定工作進程數量,預設為 CPU 核心數的 1 倍。 --log-level:指定日誌級別,預設為 info。 --reload:在代碼修改時自動重新載入應用程式。

3)FastAPI 

FastAPI 是一個現代、快速(高性能)的 Web 框架,用於構建 API。它基於 Python 3.7+ 的類型提示,並且依賴於 Starlette(用於 web 伺服器和路由)和 Pydantic(用於數據驗證和序列化)。FastAPI 的設計目標是提供與 Flask 和 Django 類似的開發體驗,但在性能、類型安全和開發者友好性方面做出更大的提升。GitHub地址:https://github.com/fastapi/fastapi 

FastAPI 的主要特性

  • 極高的性能: 基於 ASGI 的非同步支持,使得 FastAPI 在性能上接近 Node.js 和 Go 的水平,適合處理高併發。
  • 自動生成 API 文檔: 使用 OpenAPI 和 JSON Schema 自動生成互動式的 API 文檔(如 Swagger UI 和 ReDoc)。
  • 基於類型提示的自動驗證: 利用 Python 的類型提示和 Pydantic,自動進行數據驗證和解析。
  • 非同步支持: 原生支持 asyncawait,能夠處理非同步任務,適合與資料庫、第三方 API、WebSocket 等交互。
  • 內置依賴註入系統: 使得依賴的聲明和管理變得簡潔而強大,便於模塊化設計。
  • 開發者友好: 提供了詳細的錯誤信息和文檔,支持自動補全,極大提升了開發效率。

以下是一個簡單的 FastAPI 應用:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"message": "Hello, World"}

@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

當你運行 FastAPI 應用時,它會自動生成互動式文檔:

  • Swagger UI: 訪問 http://127.0.0.1:8000/docs
  • ReDoc: 訪問 http://127.0.0.1:8000/redoc

這兩個文檔界面可以讓你查看 API 的結構,甚至可以直接在界面中進行 API 調用。如我在上篇隨筆進行介紹的《Python中FastAPI項目使用 Annotated的參數設計》。

 FastAPI 是一個非常現代化和高效的框架,非常適合用於構建高性能的 API。其自動文檔生成、數據驗證和依賴註入等特性,使得開發者能夠更快、更安全地編寫代碼,並提供出色的用戶體驗。

FastAPI項目的參數設計,這些您可以在路徑操作函數參數或使用Annotated的依賴函數中使用的特殊函數,用於從請求中獲取數據。

我們引入配置文件,可以對FastAPI 中服務啟動的參數進行統一的管理,如下main.py 代碼所示。

if __name__ == "__main__":
    import uvicorn
    # log_level:'critical', 'error', 'warning', 'info', 'debug', 'trace'。預設值:'info'。
    uvicorn.run(
        app,
        host=settings.SERVER_IP,
        port=settings.SERVER_PORT,
        log_config="app/uvicorn_config.json",  # 日誌配置
        # log_level="info",  # 日誌級別
    )

3)pymysql 、pymssql、和 SQLAlchemy

涉及後端的處理,肯定繞不過資料庫的處理操作,如對於MySQL、MS SqlServer等資料庫的處理和封裝。

PyMySQL 是一個純 Python 實現的 MySQL 客戶端庫,用於連接 MySQL 資料庫並執行 SQL 查詢。它是 Python 的 MySQLdb 庫的替代品,尤其適合那些在使用 Python 3 並且不希望依賴 C 語言擴展的項目。PyMySQL 支持 MySQL 資料庫的所有主要功能,包括事務、存儲過程、連接池等。

PyMySQL 的主要特性

  • 純 Python 實現: 不依賴 C 擴展,易於安裝和跨平臺使用。
  • 相容性好: 與 MySQLdb 的介面非常相似,便於從 MySQLdb 遷移到 PyMySQL
  • 支持 MySQL 的所有主要功能: 包括事務處理、存儲過程、BLOB 數據類型等。
  • 簡單易用: 提供了直觀的 API 進行資料庫連接、查詢、插入、更新和刪除操作。

安裝 PyMySQL

你可以通過 pip 來安裝 PyMySQL:

pip install pymysql

使用 PyMySQL 連接到 MySQL 資料庫:

import pymysql

connection = pymysql.connect(
    host='localhost',
    user='your_username',
    password='your_password',
    database='your_database'
)

try:
    with connection.cursor() as cursor:
        # 執行 SQL 查詢
        cursor.execute("SELECT VERSION()")
        
        # 獲取查詢結果
        result = cursor.fetchone()
        print(f"MySQL version: {result}")
finally:
    connection.close()

如下是我實際表的一些操作例子代碼。

sql = "select * from t_customer where name = '{0}' LIMIT 1 ".format(name)
print(sql)
cursor.execute(sql)
myresult = cursor.fetchone()  # fetchone() 獲取一條記錄

if myresult:
    print("該名稱已存在,請更換名稱.")
else:
    print("該名稱可用.")

    # 插入記錄語句
    sql = "INSERT INTO `t_customer` (`ID`, `Name`, `Age`, `Creator`, `CreateTime`) VALUES (%s, %s, %s, %s, %s);"
    val = (id, name, age, creator, createtime)

    cursor.execute(sql, val)
    db.commit()  # 數據表內容有更新,必須使用到該語句

    print(cursor.rowcount, " 行記錄插入.")

sql = "update t_customer Set age = %s where name =%s  "
val = (26, name)
cursor.execute(sql, val)
db.commit()  # 數據表內容有更新,必須使用到該語句
print(cursor.rowcount, " 條記錄被修改")

sql = "select * from t_customer where name = '{0}' LIMIT 1 ".format(name)
cursor.execute(sql)
myresult = cursor.fetchone()  # fetchone() 獲取一條記錄

if myresult:
    print("修改後的記錄: ", myresult)

sql = "SELECT * FROM t_customer"
cursor.execute(sql)
print("t_customer 結果集: ")
for x in cursor:
    print(x)

sql = "delete from t_customer where name =%s  "
try:
    cursor.execute(sql, (name,))
    db.commit()  # 數據表內容有更新,必須使用到該語句
    print(cursor.rowcount, " 行記錄刪除.")
except:
    db.rollback()  # 發生錯誤時回滾
    print("刪除記錄失敗!")


sql = "SELECT * FROM t_customer"
cursor.execute(sql)
myresult = cursor.fetchall()  # fetchall() 獲取所有記錄

for x in myresult:
    print(x)

# 關閉資料庫連接
db.close()

輸出的顯示如下所示。

 

pymssql 是一個用於連接 Microsoft SQL Server 資料庫的 Python 庫,它是基於 FreeTDS 實現的輕量級資料庫介面,旨在簡化 Python 與 SQL Server 之間的交互。pymssql 提供了對 T-SQL 語句的支持,並且可以執行存儲過程和處理大批量數據插入等任務。

pymssql 的主要特性

  • 輕量級和易用性: 提供了簡單的 API 介面,易於快速上手。
  • 與 SQL Server 相容: 支持 Microsoft SQL Server 2005 及以上版本。
  • 跨平臺支持: 支持在 Windows、Linux 和 macOS 系統上運行。
  • 集成事務管理: 通過 commitrollback 方法進行事務管理。
  • 支持存儲過程: 能夠執行和處理存儲過程,適用於複雜的資料庫操作。
  • 批量插入支持: 通過 executemany 方法高效地插入大量數據。

安裝 pymssql

你可以通過 pip 安裝 pymssql:

pip install pymssql

使用 pymssql 連接到 SQL Server 資料庫,pymssql 支持事務,可以在執行多個操作時使用事務控制,以確保數據一致性:

import pymssql

# Connect to the database
conn = pymssql.connect(
    server="localhost",
    user="sa",
    password="123456",
    database="Winframework",
    tds_version="7.0",
)

# Create a cursor object
cursor = conn.cursor()

# Execute a query
cursor.execute("SELECT * FROM T_Customer")
# Fetch all the rows
rows = cursor.fetchall()

# Print the rows
for row in rows:
    print(row)


# Close the cursor and connection
cursor.close()
conn.close()

 

SQLAlchemy 是一個功能強大且靈活的 Python SQL 工具包和對象關係映射(ORM)庫。它被廣泛用於在 Python 項目中處理關係型資料庫的場景,既提供了高級的 ORM 功能,又保留了對底層 SQL 語句的強大控制力。SQLAlchemy 允許開發者通過 Python 代碼與資料庫進行交互,而無需直接編寫 SQL 語句,同時也支持直接使用原生 SQL 進行複雜查詢。 Engine  連接         驅動引擎 Session 連接池,事務  由此開始查詢 Model   表              類定義 Column  列   Query   若幹行         可以鏈式添加多個條件

SQLAlchemy 的主要特性

  • 對象關係映射(ORM): 允許將 Python 類映射到資料庫表,並且自動處理 SQL 的生成和執行。
  • SQL 表達式語言: 提供了一個表達式語言層,允許構建和執行原生 SQL 查詢,同時保留類型安全性和跨資料庫相容性。
  • 資料庫抽象層: 提供了跨資料庫的相容性,使得在不同資料庫之間切換變得相對容易。
  • 高性能: 通過細粒度的控制和緩存機制,優化了資料庫訪問的性能。
  • 事務管理: 支持複雜的事務處理和上下文管理,使得資料庫操作更加安全和一致。
  • 支持多種資料庫: 支持大多數主流的關係型資料庫,如 SQLite、PostgreSQL、MySQL、Oracle、SQL Server 等。

安裝 SQLAlchemy

你可以通過 pip 安裝 SQLAlchemy

pip install sqlalchemy

如果你要連接到特定的資料庫,還需要安裝相應的資料庫驅動程式。例如,要連接到 MySQL 資料庫,你還需要安裝 pymysqlmysqlclient

使用 SQLAlchemy 操作資料庫,可以統一多種資料庫的操作處理,如SQLITE、SqlServer、MySQL、PostgreSQL等。

使用 SQLAlchemy 創建與資料庫的連接:

# mysql 資料庫引擎
engine = create_engine(
    "mysql+pymysql://root:[email protected]:3306/WinFramework",
    pool_recycle=3600,
    # echo=True,
)

# Sqlite 資料庫引擎
# engine = create_engine("sqlite:///testdir//test.db")

# PostgreSQL 資料庫引擎
# engine = create_engine(
#     "postgresql+psycopg2://postgres:123456@localhost:5432/winframework",
#     # echo=True,
# )

# engine = create_engine(
#     "mssql+pymssql://sa:123456@localhost/WinFramework?tds_version=7.0",
#     # echo=True,
# )

由於對應的是ORM處理方式,因此和資料庫表關聯需要定義一個類對象,如下所示。

from sqlalchemy import create_engine, Column, Integer, String, DateTime, TIMESTAMP
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# 創建一個基類,用於定義資料庫表的結構
Base = declarative_base()

# 定義一個 Customer資料庫表的模型
class Customer(Base):
    __tablename__ = "t_customer"

    id = Column(String, primary_key=True, comment="主鍵")
    name = Column(String, comment="姓名")
    age = Column(Integer, comment="年齡")
    creator = Column(String, comment="創建人")
    createtime = Column(DateTime, comment="創建時間")

CRUD的操作例子代碼如下所示。

# 創建一個會話
Session = sessionmaker(bind=engine)
session = Session()

id = str(guid.uuid4())
# create a new customer
customer = Customer(
    id=id,
    name="Alice",
    age=25,
    creator="admin",
    createtime=datetime.strptime("2021-01-01 12:00:00", "%Y-%m-%d %H:%M:%S"),
)

# add the customer to the session
session.add(customer)
# commit the changes to the database
session.commit()

# query the customer from the session
for item in session.scalars(select(Customer)):
    print(item.id, item.name, item.age, item.creator, item.createtime)


print("\r\nquery all customers")
customers = session.query(Customer).all()
for customer in customers:
    print(customer.name, customer.age)

print("\r\nquery all customers by condition:age > 20")
customers = session.query(Customer).filter(Customer.age > 20).limit(30).offset(1).all()
for customer in customers:
    print(customer.name, customer.age)

print("\r\nquery customer by id")
customer = session.query(Customer).filter(Customer.id == id).first()
if customer:
    print(customer.name, customer.age)

print("\r\n 複雜查詢")
customers = (
    session.query(Customer)
    .filter(
        or_(
            and_(Customer.age > 20, Customer.age < 30),
            Customer.name.in_(["Alice", "伍華聰"]),
        )
    )
    .all()
)
for customer in customers:
    print(customer.name, customer.age)


print("\r\nselect customer by id")
stmt = select(Customer).where(Customer.id == id)
result = session.execute(stmt)
print(result)


stmt = select(Customer).where(Customer.name == "伍華聰")
result = session.execute(stmt).scalar()
if result:
    print("Customer exists in the database")
    print(result.id, result.name, result.age)
else:
    print("Customer does not exist in the database")


print("\r\nselect customer In")
# query the customer from the session
stmt = select(Customer).where(Customer.name.in_(["Alice", "伍華聰"]))
for item in session.scalars(stmt):
    print(item.id, item.name, item.age, item.creator, item.createtime)


print('\r\ndelete all customers by name = "Alice"')
# delete the customer from the database
delete_stmt = delete(Customer).where(Customer.name == "Alice")
result = session.execute(delete_stmt)
print(str(result.rowcount) + " rows deleted")

session.commit()

# close the session
session.close()

 

由於篇幅限制,我們暫時介紹一些,其實就算是做後端WebAPI的處理,我們也需要瞭解很多不同的類庫,Python類庫非常豐富,而且同步、非同步又有不同的類庫差異,因此我們可以根據實際需要選用不同的類庫來實現我們的框架目的。

如對於FastAPI的數據驗證,我們一般引入 pydantic,可以對數據進行各種豐富的校驗處理,類似於強類型和各種規則的校驗。

class Person(BaseModel):
    name: str
    age: int

    @field_validator("age")
    def age_must_be_positive(cls, v):
        if v < 0:
            raise ValueError("Age must be a positive number")
        return v

如對於配置信息的處理,我們還可以引入 python-dotenv 和  pydantic_settings 來統一管理配置參數。

from pydantic_settings import BaseSettings, SettingsConfigDict

class Settings(BaseSettings):
    model_config = SettingsConfigDict(
        env_file=".env",  # 載入env文件
        extra="ignore",  # 載入env文件,如果沒有在Settings中定義屬性,也不拋出異常
        env_file_encoding="utf-8",
        env_prefix="",
        case_sensitive=False,
    )

    # Env Server
    SERVER_IP: str = "127.0.0.1"
    SERVER_PORT: int = 9000

    # Env Database
    DB_NAME: str = "winframework"
    DB_USER: str = "root"
    DB_PASSWORD: str = "123456"
    DB_HOST: str = "localhost"
    DB_PORT: int = 3306
    DB_URI: str = (
        f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
    )
.............
settings = Settings()

還有對於一些常規的文件格式,如json格式,txt格式的文件處理,以及PDF文件、Excel文件、圖片操作、聲音處理、二維碼處理等,都有不同的類庫提供輔助處理,我們可以從中擇優選擇即可。

Python的世界豐富多彩,讓我們一起探索並應用在實踐當中。

 

專註於代碼生成工具、.Net/.NetCore 框架架構及軟體開發,以及各種Vue.js的前端技術應用。著有Winform開發框架/混合式開發框架、微信開發框架、Bootstrap開發框架、ABP開發框架、SqlSugar開發框架等框架產品。
  轉載請註明出處:撰寫人:伍華聰  http://www.iqidi.com 
    

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 電梯導航也被稱為錨點導航,當點擊錨點元素時,頁面內相應標記的元素滾動到視口。而且頁面內元素滾動時相應錨點也會高亮。電梯導航一般把錨點放在左右兩側,類似電梯一樣。常見的電梯導航效果如下,比如一些官方文檔中: 之前可能會用 getBoundingClientRect() 判斷元素是否在視口中來實現類似效 ...
  • CSS中span元素垂直居中【解決span元素內基線對齊問題】 在樣式的書寫中,我們常常使用以下方式實現垂直居中,若span元素內例外,解決辦法看文章最後 <div class="parent"> <span class="child">text</span> </div> 1.flex佈局方式垂直 ...
  • 元組是不可變的序列類型,可以包含不同類型的元素。命名元組是元組的子類,它允許你為元組中的位置指定名稱,從而使代碼更加清晰,本文主要介紹了兩種元組的使用方法和應用場景。 ...
  • 醫療行業解決方案互聯網醫院架構患者門戶:提供患者信息查詢、掛號、繳費等基本服務。 預約掛號:允許患者線上預約掛號,減少現場排隊等候時間。 掛號查詢:患者可以查詢掛號狀態和相關信息。 院內導診:提供院內導航服務,幫助患者快速找到診室或部門。 檢驗報告查詢:患者可以線上查詢檢驗結果。 檢查報告查詢:提供 ...
  • 寫在前面 前面講的是面向對象中的繼承思想,下麵讓我們來看看多態這部分的內容! Java 面向對象概念概述 多態 概述:某一個事物在不同狀態下的多種狀態。 實現多態的三大前提: 要有繼承關係。 要有方法的重寫。 要有父類的引用指向子類對象。 訪問成員的特點: 成員變數:編譯時看左,運行時看左。 成員方 ...
  • 2018年6月,大三暑假進行時 上班之前,我提前跟家裡人打過招呼了。 我說我已經拿到了實習的offer,明天就過去上班,離家裡很近,月薪3500,我騎自行車過去就行。 家裡人就說挺好的,讓我騎個電瓶車,這樣會快點,囑咐我好好乾。 這是我第一次正式上班,我還覺得挺神奇的,沒想到我都要上班了。 大學以前 ...
  • 二維差分 為什麼我為OI淚目?因為我菜得離譜...... 引入 一維差分用來O(1)修改區間,配合上一維首碼和就是O(N)的查詢區間和。 差分為首碼和的逆運算。 二維差分同理。 接下來這道題就用二維差分來解決。 \(例題:地毯>>\) 地毯 題目描述 在 \(n\times n\) 的格子上有 \( ...
  • 本文詳細介紹瞭如何使用Java結合微信官方提供的API來實現模板消息的推送,該方法通過獲取access_token、組裝模板消息數據、發送請求四個步驟微信公眾號推送模版消息。 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...