python項目依賴管理分享遷移後重建開發環境(一)virtualenv 和 pip

来源:http://www.cnblogs.com/lonkiss/archive/2017/12/15/rebuild-development-environment-with-virtualenv-and-pip.html
-Advertisement-
Play Games

python 中如何不同的項目使用不同版本的依賴包, 如何自動生成依賴包信息併在更換電腦後快速恢復項目的開發環境 ...


作者:Panda Fang

出處:http://www.cnblogs.com/lonkiss/p/rebuild-development-environment-with-virtualenv-and-pip.html

原創文章,轉載請註明作者和出處,未經允許不可用於商業營利活動

Why 開發中遇到了問題

講講軟體工程中寫代碼之外的知識。開發中我們往往遇到這些問題:

1、一個項目寫了不少代碼。使用一些第三方包或者模塊,對於這個項目來說已經能很好的工作了, 但是後來這些包或模板有了新版,改動較大,一旦升級,之前的很多代碼要改,很痛苦。但是咱們也不能永遠用老版本的,新開的項目還是想嘗嘗鮮,又或工作之外自己想先熟悉新技術。預設情況下,一個系統中只有一份第三方包或模塊,無法做到。所以我們希望自己的電腦中能同時共存多個版本的模塊或包

2、自己寫的項目源代碼轉移到別的機器上或者分享給別人,又或者從別人拿到項目,如何能快速重建開發環境呢, 項目用了哪些第三方包,什麼版本。 如果這些搞不定,那麼代碼就跑不起來。 從github上下載的別人代碼,是不包含第三方包的,有些人又不寫文檔,就算從代碼報錯中能找到缺少的第三方包或模塊,也很難知道確切的版本,自己裝的版本萬一不合適又不行,有些代碼中的模塊名和在pip倉庫中的名字也不一定相同,遇到自己不熟悉的pip install 也白搭,總之麻煩一大堆。

 

What 什麼能解決我們的問題 virtualenv 和 pip

java 中有maven 和 pom.xml ,android 有 gradle 和 build.gradle , node.js 有 npm 和 package.json。 pom.xml、  build.gradle、package.json都是記錄依賴包及其版本的配置文件。

python 中解決第 1 個問題,就引出了 virtualenv 虛擬環境, 解決第 2 個問題,就需要pip 和 virtualenv 配合使用。 

pip 是管理第三方包的,預設情況下,是裝在全局系統里的,所有項目都共用同一個版本的第三方包

有了 virtualenv 每個項目都能有自己獨立第三方包,隔離了。一個項目用 v1.0  另一個項目能用 v2.0

 

How 如何使用

如何使用 pip 常用功能

我使用的是windows 10 和 從python官網下載的 python 3.6.3 exe 安裝包,別的系統和版本可能會遇到不同的問題。這個版本安裝完成後,已經帶上了pip。

按  ❖  + R 然後輸入cmd 進入命令行,輸入  pip  將會顯示pip 的用法, 如果出錯,可能沒有裝上pip ,  參考 如何安裝pip

正常情況下會顯示如下內容(我這裡只貼出部分)

Usage:
  pip <command> [options]

Commands:
  install                     Install packages.
  download                    Download packages.
  uninstall                   Uninstall packages.
  freeze                      Output installed packages in requirements format.
  list                        List installed packages.
  show                        Show information about installed packages.
  check                       Verify installed packages have compatible dependencies.
  search                      Search PyPI for packages.
  wheel                       Build wheels from your requirements.
  hash                        Compute hashes of package archives.
  completion                  A helper command used for command completion.
  help                        Show help for commands.

 

下麵介紹pip 常用法,以requests 模塊為例

查看pip 版本

pip -V

 

安裝第三方包 格式:  pip install <package>   

 pip install requests  或者可以指定版本  pip install requests==2.18.0  輸入完成後enter等待安裝完成。

想知道倉庫中有哪些可選版本

>= pip 9.0 以後

pip install requests==

得到信息

Collecting requests==
  Could not find a version that satisfies the requirement requests== (from versions: 0.2.0, 0.2.1, 0.2.2, 0.2.3, 0.2.4, 0.3.0, 0.3.1, 0.3.2, 0.3.3, 0.3.4, 0.4.0, 0.4.1, 0.5.0, 0.5.1, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 0.6.4, 0.6.5, 0.6.6, 0.7.0, 0.7.1, 0.7.2, 0.7.3, 0.7.4, 0.7.5, 0.7.6, 0.8.0, 0.8.1, 0.8.2, 0.8.3, 0.8.4, 0.8.5, 0.8.6, 0.8.7, 0.8.8, 0.8.9, 0.9.0, 0.9.1, 0.9.2, 0.9.3, 0.10.0, 0.10.1, 0.10.2, 0.10.3, 0.10.4, 0.10.6, 0.10.7, 0.10.8, 0.11.1, 0.11.2, 0.12.0, 0.12.1, 0.13.0, 0.13.1, 0.13.2, 0.13.3, 0.13.4, 0.13.5, 0.13.6, 0.13.7, 0.13.8, 0.13.9, 0.14.0, 0.14.1, 0.14.2, 1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.1.0, 1.2.0, 1.2.1, 1.2.2, 1.2.3, 2.0.0, 2.0.1, 2.1.0, 2.2.0, 2.2.1, 2.3.0, 2.4.0, 2.4.1, 2.4.2, 2.4.3, 2.5.0, 2.5.1, 2.5.2, 2.5.3, 2.6.0, 2.6.1, 2.6.2, 2.7.0, 2.8.0, 2.8.1, 2.9.0, 2.9.1, 2.9.2, 2.10.0, 2.11.0, 2.11.1, 2.12.0, 2.12.1, 2.12.2, 2.12.3, 2.12.4, 2.12.5, 2.13.0, 2.14.0, 2.14.1, 2.14.2, 2.15.1, 2.16.0, 2.16.1, 2.16.2, 2.16.3, 2.16.4, 2.16.5, 2.17.0, 2.17.1, 2.17.2, 2.17.3, 2.18.0, 2.18.1, 2.18.2, 2.18.3, 2.18.4)
No matching distribution found for requests==

< pip 9.0  給一個無效的版本號

pip install requests==-1

 

安裝後想查看安裝的什麼版本、作者、存放位置等信息 格式  pip show <package> 

pip show requests

 卸載第三方包 格式  pip uninstall <package> 

pip uninstall requests

列出所有已安裝包及其版本

pip list

 

如何使用 virtualenv

python 3.6.3 Windows 安裝包已經包含了這個功能。在桌面創建一個myapp的文件夾,作為我們的項目文件。 打開文件夾, 按下Alt + D , 游標就會定位到地址欄, 輸入cmd  enter,彈出cmd 視窗併在這個文件夾了,免去繁瑣的cd。 註意以下過程中不要關閉cmd

 輸入 

python -m venv venv

這將會在 myapp 文件夾內創建一個 venv 文件夾。 第一個venv 是調用 virtualenv 功能, 第二個 venv 是文件夾的名稱, 可以任意取一個自己喜歡的名稱

如果這步操作不行,可能是跟我的python版本不同, 或者安裝的時候缺少了什麼。那麼需要換一種方式,輸入

pip install virtualenv

安裝完成後 輸入

virtualenv venv

同樣也能創建 venv 文件夾。 python -m venv venv   正常工作的不用管上面兩步

看看venv 文件夾 這裡面就包含了一些獨立運行需要的文件。

有了這個文件夾之後, 使用 pip install ,仍然安裝到全局系統中。那麼如何才能工作在virtualenv 中呢,輸入 

venv\Scripts\activate.bat

可以看到,原來的路徑前面多了一個 (venv) ,如果你用的別的名字,就是別的。 如果關閉了cmd ,再打開仍然要用這種方式激活

 

 

下麵以requests 包為例寫個例子項目, 進入 virtualenv環境後,輸入

pip install requests

創建一個python 源文件 app.py ,輸入以下代碼

import requests

r = requests.get('https://www.baidu.com')
print(r.status_code)

然後回到 cmd 輸入 

python app.py

運行代碼網路通暢的情況下會輸出 200

為了證明使用了 virtualenv ,確實能隔離 第三方包依賴。 現在我們離開 virtualenv環境,cmd 輸入 

venv\Scripts\deactivate.bat

可以看到,路徑前面的(venv) 沒了,回到了全局系統 。 如果之前按照步驟執行過  pip uninstall requests  現在全局系統中就不存在這個第三方包了

再次輸入

python app.py

得到輸出

Traceback (most recent call last):
  File "app.py", line 1, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'

別的項目 也像 myapp 這樣去處理,就可以依賴關係隔離了

                     

如何遷移後恢復重建開發環境

一個項目要分享到github , 或者開發組的其他成員, 又或者自己換了機器, 如何重建開發環境呢,裝上一樣的第三方包。 這裡用自己的電腦模擬

cmd 定位到剛纔桌面上的myapp文件夾。 

venv\Scripts\activate.bat

激活virtualenv , 輸入

pip freeze > requirements.txt

導出了第三包的記錄文件 。

再在桌面創建一個test文件夾, 裡面再創建一個myapp文件夾,把剛纔Desktop\myapp里的 app.py 和 requirements.txt 文件複製到這個文件夾里。

另外打開一個cmd 定位到新建的 myapp 文件夾 ,然後創建virtualenv

python -m venv venv

使用上面的命令創建好之後 激活

venv\Scripts\activate.bat

激活之後,註意現在工作在virtualenv里。使用pip 恢復安裝依賴的第三方包,命令如下

pip install -r requirements.txt

等待完成。 運行app.py

python app.py

運行代碼網路通暢的情況下會輸出 200

至此恢復重建開發環境完成

 

 

 參考資料:https://stackoverflow.com/questions/43828879/simple-dependency-management-for-a-python-project 

                                         


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

-Advertisement-
Play Games
更多相關文章
  • 區別: “==” 比較的是兩個引用在記憶體中指向的是不是同一對象(即同一記憶體空間),也就是說在記憶體空間中的存儲位置是否一致。 如果兩個對象的引用相同時(指向同一對象時),“==”操作符返回true,否則返回flase。 註:如果有對記憶體分配及變數存儲位置(堆、棧、方法區常量池、方法區靜態區)感興趣的可 ...
  • 大多數人選擇Java可能只是因為聽說Java前景好、Java比較好找工作、Java語言在TIOBE排行榜上一直位於前三等等之類的原因,但是Java具體好在哪裡,心裡卻是沒有什麼概念的。本文為你解答學Java的前景。 一、Java工程師發展前景 作為一種最流行的網路編程語言之一,java語言在當今信息 ...
  • 在高性能的IO體系設計中,有幾個名詞概念常常會使我們感到迷惑不解。具體如下: 1 什麼是同步? 2 什麼是非同步? 3 什麼是阻塞? 4 什麼是非阻塞? 5 什麼是同步阻塞? 6 什麼是同步非阻塞? 7 什麼是非同步阻塞? 8 什麼是非同步非阻塞? 先來舉個實例生活中的例子: 如果你想吃一份宮保雞丁蓋飯: ...
  • Unexpected exception thrown when create new site: Solution: The doubling was caused by the Counter service (not sure what it actually does but assume ...
  • puts是print string的縮寫。儘管沒有直觀的表示會調用換行符,但是puts會這樣做:如同print,列印用戶的數據,之後自動地轉到新一行。假如讓puts列印已經以換行符結束的一行,它不會再次添加換行符。 ...
  • 一、前言 Python的select()方法直接調用操作系統的IO介面,它監控sockets,open files, and pipes(所有帶fileno()方法的文件句柄)何時變成readable 和writeable, 或者通信錯誤,select()使得同時監控多個連接變的簡單,並且這比寫一個 ...
  • 下載: 鏈接: https://pan.baidu.com/s/1gfMYeGF 密碼: 45bn 打開目錄:E:\Delphi7\TRichView.v.16.10.3 ScaleRichView.v.7.7.2 Full Source D4-RAD10.2 2016-05-19 and Fix ...
  • mybatis map文件中 resultMap中column和sql查詢結果對應, property和實體private對應 <sql id="Base_Column_List_Video_App"> c.CarId,v.VideoId,v.Title,v.TotalVisit,v.TotalCo ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...