Python:靈活的開發環境

来源:https://www.cnblogs.com/englyf/archive/2022/12/05/16951320.html
-Advertisement-
Play Games

如果你接手了別人的代碼工程,卻發現對方使用的 python 版本或者依賴庫都和你的環境不相容時,怎麼辦?打算卸掉自己原來的那一套環境再重來嗎?真麻煩! ...


以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 微信公眾號「englyf」https://mp.weixin.qq.com/s/WTl7BPAhX5VuK-gmHaErMg


本文大概 1667 個字,閱讀需花 4 分鐘
內容不多,但也花了一些精力
如要交流,歡迎評論區留言
謝謝你的點贊收藏分享

Python 開發環境非常靈活,得益於可以創建虛擬環境。

難道全局地安裝完 python 支持包然後直接 pip 再安裝一波依賴包就不可以開發 python 程式了嗎?

明顯是可以的,而且可以運行的非常好。不過,如果你接手了別人的代碼工程,卻發現對方使用的 python 版本或者依賴庫都和你的環境不相容時,怎麼辦?打算卸掉自己原來的那一套環境再重來嗎?真麻煩!

其實,虛擬環境就能完美解決這個苦惱。

創建

創建虛擬環境時,使用對於 python2 和 python3 的配置細節不一樣,但是思路是一樣的。

python2 需要通過第三方包 virtualenv 來創建虛擬環境。

先通過 pip 模塊安裝第三方包

pip install virtualenv

然後在自己的工程目錄里啟動執行指令

virtualenv venv

上面的指令會自動創建文件夾 venv,該文件夾內就存儲著虛擬環境的所有內容。

而python3 僅需要通過語言自帶的模塊 venv 來創建虛擬環境,python2 是沒有這個模塊的。

由於 python3 是目前 python 的主流版本,所以下麵的介紹只適用於 python3,並且適用版本是 Python 3.8.10。

在自己的工程目錄里啟動執行指令

// windows cmd

python -m venv venv

啟動

創建好虛擬環境後,開發和維護這個工程時,希望工程依賴的 python 版本和依賴包等能獨立被管理起來,並且不需和全局環境相容,那麼這個工程的 python 版本和所有的依賴包都需要只在這個虛擬的環境下安裝和儲存。

啟動開發調試或者安裝第三方依賴包之前,啟動環境僅需要執行在創建環境時自動生成的腳本。

// windows cmd

.\venv\Scripts\activate.bat

// windows powershell

.\venv\Scripts\Activate.ps1

// linux bash

source .\venv\Scripts\activate

然後你會看到命令視窗的命令行前面多了個(venv),表示虛擬環境已啟動

(venv) D:\prj\venv>

而一旦你需要轉移工程時,你也就僅需要把存放虛擬環境的文件夾 venv 一起拷貝即可。

安裝依賴包

創建完虛擬環境後,來看看有哪些包已經被安裝了

(venv) D:\prj\venv>pip list
Package    Version
---------- -------
pip        21.1.1
setuptools 56.0.0
WARNING: You are using pip version 21.1.1; however, version 22.3.1 is available.
You should consider upgrading via the 'd:\prj\venv\venv\scripts\python.exe -m pip install --upgrade pip' command.

出警告了,說是建議升級當前的模塊 pip 版本。估計是當前的版本出了一些比較嚴重的bug,為了減少不必要的麻煩,升吧。

(venv) D:\prj\venv>python -m pip install --upgrade pip
Requirement already satisfied: pip in d:\prj\venv\venv\lib\site-packages (21.1.1)
Collecting pip
  Using cached pip-22.3.1-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 21.1.1
    Uninstalling pip-21.1.1:
      Successfully uninstalled pip-21.1.1
Successfully installed pip-22.3.1

假如因為工程實際需要開發GUI,那麼可以引入第三方包 wxPython,使用前還是需要安裝的。

有時候吧,你會發現很不幸,安裝 wxPython 失敗了。因為第三方包的維護其實是各自獨立的,和 python 各個版本模塊有一定的相容性問題。建議還是換一個 python 版本再試試,不過我這版本目前是沒問題的。

(venv) D:\prj\venv>pip install wxpython
Collecting wxpython
  Using cached wxPython-4.2.0-cp38-cp38-win_amd64.whl (18.0 MB)
Collecting six
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting numpy
  Using cached numpy-1.23.5-cp38-cp38-win_amd64.whl (14.7 MB)
Collecting pillow
  Using cached Pillow-9.3.0-cp38-cp38-win_amd64.whl (2.5 MB)
Installing collected packages: six, pillow, numpy, wxpython
Successfully installed numpy-1.23.5 pillow-9.3.0 six-1.16.0 wxpython-4.2.0

再看看當前的環境

(venv) D:\prj\venv>pip list
Package    Version
---------- -------
numpy      1.23.5
Pillow     9.3.0
pip        22.3.1
setuptools 56.0.0
six        1.16.0
wxPython   4.2.0

重覆利用環境依賴配置信息

問題來了,上面的示例只是安裝了一個依賴包就有了這麼長的配置,如果我安裝的依賴包非常多,多到自己都不記得了,然後萬一我把文件夾 venv 的內容全刪掉了,也就是說我需要重新配置環境,這時是不是得瘋掉?

不用擔心,有個很好的方法保存當前的環境依賴包信息到本地文件。

pip list > requirements.txt

上面的指令將當前的依賴包關係轉存到了文件 requirements.txt 中,至於為什麼要用這個名字呢?這裡其實沒有特殊要求,只是為了相容某些開發平臺的習慣,比如著名的 Pycharm。

好了,配置保存到了本地,那麼在依賴包缺失的環境中怎麼重覆利用這個配置信息呢?

pip install -r requirements.txt

這樣子就一鍵恢復了原來保存的安裝配置。在 Pycharm 平臺會自動識別工程根目錄下麵的 requirements.txt 這個文件名的配置。

退出

有些情況下,需要臨時退出虛擬環境的配置,調用對應的腳本

// windows cmd

.\venv\Scripts\deactivate.bat

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

-Advertisement-
Play Games
更多相關文章
  • 和一個真正iOS開發的區別? 學習iOS的這段時間, 我一直在思考和感受著自己和一個真正做了幾年iOS的dev之間的區別. 同時也在反向思考, 我自己和一個新學Android的人, 又有什麼區別. 也許在技術轉型中, 這些學習的思考和陣痛都是有共性和不可避免的. 在此分享一下感受, 如果有人也有技術 ...
  • 最近在開發時,遇到相同的頁面,很多函數和佈局也大差不多,所以向在路由註冊時就給他們分配不同的路由,通過一些判斷走不同的邏輯獲取數據。 ...
  • /** * 替換字元串,預設替換 ""。傳遞 regExps,一個正則表達式數組。 * * @param source 被修剪的字元串 * @param regExps 正則表達式,找到匹配的字元串,然後替換掉 * @param replacement 不傳遞,預設被替換的字元串是 ""。傳遞的數組 ...
  • 作為後端程式員,瞭解和掌握一些前端知識也是必不可少的,本章就和大家分享Vue的一些基礎知識,希望能夠對Vue小白有所幫助。話不多說,下麵我們直接進入主題。 一、Vue簡介 Vue簡介:1、JavaScript框架;2、簡化Dom操作;3、響應式的數據驅動(頁面是由數據來生成的,當數據改變以後頁面會同 ...
  • JQuery04 6.jQuery的DOM操作02 6.9常用遍歷節點方法 取得匹配元素的所有子元素組成的集合:children(),該方法只考慮子元素而不考慮任何後代元素 取得匹配元素後面的同輩元素的集合:next()/nextAll() 如果是next方法,就是拿到指定元素後面的一個元素,如果是 ...
  • 在 javascript 中內置了一個 Date 對象,可用於實現一些日期和時間的操作。 本文整理 js 日期對象的詳細功能,使用 js 日期對象獲取具體日期、昨天、今天、明天、每月天數、時間戳等,以及常用的日期時間處理方法。 ...
  • 在如今,很多網頁已經可以手動切換明亮模式和黑暗模式,網頁的主題切換已經成為了一個常用的需求,因此,本文將從常見框架的處理方式總結一些相關的操作,並探究其本質。 ...
  • Nginx (Engine X)是一個輕量級的Web伺服器 、反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器、高性能的HTTP伺服器,它以高穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...