主頁 > 後端開發 > 7.python虛擬環境詳解

7.python虛擬環境詳解

2020-10-28 06:30:49 後端開發

1.為什么創建虛擬環境?

和其他大多數現代編程語言一樣,Python對包和模塊的下載、存盤以及管理有其自己的一套方法,Python的包一般都存在幾個特定的地方,大部分系統包會存在sys.prefix指定的路徑下;大部分第三方包,比如easy_install或pip會將包存放在site-packages所指定的路徑下,

Python應用程式通常會使用不在標準庫內的軟體包和模塊,應用程式有時需要特定版本的庫,由于Python匯入模塊不能區分模塊版本,這意味著一個Python安裝可能無法滿足每個應用程式的要求,當我們同時開發多個工程時,不同的工程會將第三方的包存放在相同的路徑下,如果有兩個工程依賴同一個包,但是所需要的版本卻不一樣,例如應用程式A需要特定模塊的1.0版本但應用程式B需要2.0版本,由于Python無法根據版本來區分包的安裝路徑,所以這里就會發生版本沖突,安裝版本1.0或2.0將導致某一個應用程式無法運行,

這個問題的解決方案是創建一個虛擬環境(virtual environment),一個目錄樹,其中安裝有特定Python版本以及許多其他包,然后不同的應用將可以使用不同的虛擬環境,從而解決需求相沖突,應用程式 A 可以擁有自己的 安裝了 1.0 版本的虛擬環境,而應用程式 B 則擁有安裝了 2.0 版本的另一個虛擬環境, 如果應用程式 B 要求將某個庫升級到 3.0 版本,也不會影回應用程式 A 的環境,使用虛擬環境的另一個好處是:保持開發環境的簡潔、有序,

如果還沒理解怎么辦?結合具體場景再理解一遍

在實際專案開發中,我們通常會根據自己的需求去下載各種相應的框架庫,如Flask,Django,Scrapy,Beautiful Soup等,但是可能每個專案使用的框架庫并不一樣,或使用框架的版本不一樣,這樣需要我們根據需求不斷的更新或卸載相應的庫,這樣的Python環境操作會給開發環境和專案造成很多不必要的麻煩,管理也相當混亂, 

具體場景1:假設兩個Python專案A和B,這兩個專案都需要使用同一個第三方模塊tensorflow,如果這兩個專案使用相同的tensorflow版本,也許不會有什么問題,但是,當A和B專案使用不同的tensorflow版本時即A使用tensorflow 0.70版本;B使用tensorflow 0.80版本,由于Python匯入模塊不能區分模塊版本,導致專案A和專案B不能使用tensorflow的不同版本,

具體場景2:專案安裝Flask框架flask-0.10.1版本,命令列輸入sudo pip install flask==0.10.1,會將flask-0.10.1安裝到/usr/local/lib/python3.5/dist-packages路徑下;如果在一臺電腦上,想開發多個不同的專案, 需要用到同一個包的不同版本, 如果使用上面的命令, 在同一個目錄下安裝或者更新, 新版本會覆寫以前的版本, 其它之前的專案就無法運行了,

2.什么是虛擬環境?

虛擬環境是用于依賴專案管理和專案隔離的Python工具,允許Python站點包(第三方庫)安裝在本地特定專案的隔離目錄中,而不是全域安裝(即作為系統范圍內的Python的一部分),即Python虛擬環境的主要目的是為了給不同的工程創建互相獨立的運行環境,虛擬環境可以搭建獨立的Python運行環境,使得單個專案的運行環境與其他專案互不影響,每一個工程都有自己的依賴包,并且,虛擬環境的數量沒有限制,我們可以輕松地用virtualenv或者pyenv等工具來創建多個虛擬環境,

白話python中通過虛擬化出來一個空間,從電腦獨立開辟出來的環境,與主環境完全隔離,通俗的來講,虛擬環境就是借助虛擬機docker來把一部分內容獨立出來,我們把這部分獨立出來的東西稱作“容器”,在這個容器中,我們可以只安裝我們需要的依賴包,各個容器之間互相隔離,互不影響,避免專案中對于環境要求,造成的插件版本混亂,

簡單概括:

概念:一個獨立的區域的 Python 環境;完全模擬系統全域 Python 環境的使用,如安裝、卸載包到邏輯操作等 

作用:讓專案運行在一個獨立的區域的 Python 環境中,使采用不同環境的專案互不干擾,

3.搭建虛擬環境的程序和常見的使用方法

1).安裝virtualenv軟體包

前提必須安裝好python環境,并檢查電腦系統環境path是否有python路徑,使用虛擬環境需要借助virtualenv或pyvenv,(其中pyvenv是較新的工具,和virtualenv的使用方法類似),它們的使用非常簡單,這里主要講解virtualenv,virtualenv 是一個創建隔絕的Python環境的工具,首先安裝virtualenv(如果使用Python 3,它自動默認安裝了pyvenv),

1 pip install virtualenv

它會默認安裝到你的python庫檔案lib中,可以看安裝完成的地址,里面給出了安裝之后的庫地址

2).創建虛擬環境(virtualenv基本使用)

  (1). 通過上面的步驟安裝成功之后,首先確定好要放置虛擬環境的目錄(我一般習慣在專案當中建立一個目錄用來存放給這個專案使用的虛擬環境),然后進入你想要創建python虛擬環境的目錄下,沒有合適的就創建一個空檔案夾即可:

1 mkdir filename      # 可以新建一個名為filename的空檔案夾,用來存放即將創建的虛擬環境
2 cd filename         # 進入到這個空檔案夾下

  (2). cd 到存放虛擬環境的的地址,就可以創建虛擬環境了,執行下面的命令會在當前所在目錄進行創建(若省略名字將會把檔案均放在當前目錄):

1 virtualenv envname       # venvname為虛擬環境目錄名,目錄名自定義

  (3). 創建虛擬環境時可以加上版本號指定 Python 版本,不然默認系統全域下的 Python 環境:(Linux系統下是Python2的虛擬環境,Windows系統下是自己安裝好的系統全域python版本,如果系統上有多個版本的 Python,您以通過運行 python3 或您想要的任何版本來選擇特定的Python版本)

1 virtualenv -p python3 test_env1       # -p引數 指定Python解釋器程式
2 
3 virtualenv -p /usr/local/bin/python3.5 test_env2   # -p引數 指定Python解釋器程式(路徑)

  (4). 創建虛擬環境時可以繼承系統三方庫 ,添加引數--system-site-packages,即專案檢索庫的時候,也會到系統的三方庫中找,不添加時,默認只到虛擬環境中查找庫:

1 virtualenv --system-site-packages envmane

【補充】:虛擬環境到底長啥樣?執行virtualenv envname命令之后,就會在當前的目錄中創建一個檔案夾,并在其中創建包含Python解釋器,標準庫和各種支持檔案的副本的目錄,生成如下的目錄結構:(Linux或Mac系統下)

 1 ├──bin
 2 │  ├──activate
 3 │  ├──activate.csh
 4 │  ├──activate.fish
 5 │  ├──easy_install
 6 │  ├──easy_install-3.5
 7 │  ├──pip
 8 │  ├──pip3
 9 │  ├──pip3.5
10 │  ├──python->python3.5
11 │  ├──python3->python3.5
12 │  └──python3.5->/opt/local/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5
13 ├──include
14 ├──lib
15 │  └──python3.5
16 │      └──site-packages
17 └──pyvenv.cfg

bin: 用于管理虛擬環境的檔案,bin目錄下有一個重要的腳本檔案activate,這個腳本就是用來將其所在的虛擬環境設定為當前Python的運行環境

include: 編譯Python包時所需要的C頭檔案

lib: Python自帶及第三方的庫這其中還包含有一些Python的工具和可執行檔案等副本,這些檔案用來保證Python代碼可以獨立于系統環境而運行,

【注意】:1.上面的結構是在Linux或Mac系統下,這里的bin目錄在Windows系統下叫Scripts目錄;

     2.Windows與 Mac 不同的是,虛擬環境的 bin 目錄下只有 activate 腳本,沒有 deactivate 腳本,

3). 激活虛擬環境

首先確保cd到存放虛擬環境檔案夾目錄下,選擇要激活的虛擬環境(例如選擇envname):

1 envname\Scripts\activate        # 在Windows上
2 
3 source envname/bin/activate     # 在Unix或MacOS上

(這個腳本是為bash shell撰寫的,如果使用 csh 或 fish shell,則應該改用 activate.csh 或 activate.fish 腳本),進入之后就可以通過pip 命令安裝、升級和移除各種需要的框架依賴包和軟體包了,此時使用pip安裝的包都將會放在 已激活的這個虛擬環境檔案夾中,與全域安裝的Python隔離開,

4). 退出虛擬環境

在激活的虛擬環境中,執行命令 deactivate:

1 deactivate

執行完上面的代碼,將會回到系統默認的Python解釋器,包括已安裝的庫也會回到默認的,即我們的shell提示符回歸到了正常狀態,同時Python的環境也切換到了全域的系統環境,

5). 洗掉虛擬環境

直接洗掉虛擬環境所在目錄即可:

1  rm -rf venvname 

4.虛擬環境的配置(統一管理虛擬環境)

通過上面的步驟其實已經完成虛擬環境virtualenv的安裝和使用了,虛擬環境的引入解決了我們關于環境沖突的問題,但是它同時也帶來了一個問題,就是虛擬環境過多所帶來的管理問題,它需要我們記住每一個虛擬環境的目錄,才能進入虛擬環境并操作,因此這里的virtualenv不是最完美的,因為virtual的啟動、停止腳本都在特定檔案夾,可能一段時間后,就會有很多個虛擬環境散落在系統各處,很難再記住它們的名字或者位置,

鑒于virtualenv不便于對虛擬環境集中管理,所以推薦直接使用virtualenvwrapper,virtualenvwrapper就是專門用來解決虛擬環境管理問題的一個工具,它提供了一系列命令使得虛擬環境作業變得便利,它把你所有的虛擬環境都放在一個地方,我們可以很方便地用它來實作對虛擬環境的創建,洗掉,拷貝,并且可以輕松地在不同環境間進行切換,

1). 安裝virtualenvwrapper(確保virtualenv已安裝)

1 pip install virtualenvwrapper       # Linux和Mac系統
2 pip install virtualenvwrapper-win   # Windows使用該命令

2). 配置環境變數

  (1). 為什么配置虛擬環境?安裝完virtualenvwrapper之后,此時mkvirtualenv這個命令還不可以直接使用原因是我們還沒有配置虛擬環境的環境變數,包括workon我們也無法使用,拿Linux系統舉例,當安裝第三方包的時候,會先source一下virtualenvwrapper.sh這個檔案(執行腳本檔案的意思),因為mkvirtualenv指令是在virtualenvwrapper.sh這個檔案里面,也就是執行virtualenvwrapper.sh這個檔案的時候,才可以運行像mkvirtualenv這樣的指令;所以把source /usr/local/bin/virtualenvwrapper.sh 這段代碼添加到一個檔案里面,每次只要打開這個檔案,就會執行, 

  (2). 查看一下virtualenvwrapper.sh的路徑:

1 which virtualenvwrapper.sh    # 假設路徑為/usr/local/bin/virtualenvwrapper.sh

  (3). Linux或Mac系統下配置:

 1 # 1、在~(家目錄)下創建目錄用來存放虛擬環境(有就不用)
 2 mkdir .virtualenvs
 3 
 4 vim ~/.bashrc         # 打開.bashrc組態檔
 5 
 6 # 添加如下內容:
 7 export WORKON_HOME=$HOME/.virtualenvs          # virtualenvwrapper存放虛擬環境目錄
 8 source /usr/local/bin/virtualenvwrapper.sh     # virtrualenvwrapper會安裝到python的bin目錄下,該路徑是python安裝目錄下bin/virtualenvwrapper.sh
 9 
10 source ~/.bashrc     # 讀入組態檔,立即生效

此時創建虛擬環境時所有的虛擬環境都位于/home/下的隱藏目錄.virtualenvs下;創建虛擬環境需要聯網;創建成功后, 會自動作業在這個虛擬環境上;作業在虛擬環境上, 提示符最前面會出現 “虛擬環境名稱”,

如果~/.bashrc里面的內容改為export WORKON_HOME=~/Envsname,這樣會在WORKON_HOME變數指定的目錄下新建名為Eenvsname的虛擬環境,

  (4). Windows系統下配置:

給虛擬環境安裝目錄設定一個專門的目錄,Windows系統下安裝完virtualenvwrapper-win,再創建虛擬環境時,會默認放在C:\Users\電腦用戶名\Envs目錄中,

如果這樣滿足不了我們的需求,我們想把專案放在其他盤(或其他位置),就需要我們自己配置一下環境路徑,通過設定WORKON_HOME路徑,給我們的python虛擬環境指定一個存放位置:

   > 新建要存一個自己想要放虛擬環境的檔案夾:例如 D:\codeworkpace\python\envs

   > 配置電腦系統環境變數,->新建系統變數 -> 變數名:WORKON_HOME ->指定路徑:D:\codeworkpace\python\envs

 

配置完環境變數就會在WORKON_HOME所在的路徑下創建集中存放虛擬環境的目錄了,

3). virtualenvwrapper基本使用指令

 1 mkcirtualenv 虛擬環境名稱    # 創建虛擬環境
 2 
 3 workon                     # 查看當前的虛擬環境目錄(列出所有虛擬環境串列)
 4 
 5 workon 虛擬環境名稱          # 切換到指定虛擬環境(進入虛擬環境)
 6 
 7 deactivate                 # 退出虛擬環境
 8 
 9 rmvirtualenv 虛擬環境名      # 洗掉虛擬環境(先退出再洗掉)
10 
11 which python               # 查看虛擬環境的python的路徑

5.conda虛擬環境操作

 1 conda create -n xxxx python=3.5    # 創建指定python版本的xxxx虛擬環境:
 2  
 3 conda activate xxxx    # 進入xxxx環境
 4  
 5 conda deactivate      # 退出(關倍訓境)
 6 
 7 conda remove -n your_env_name(虛擬環境名稱) --all    # 洗掉虛擬環境
 8 
 9 conda remove --name your_env_name  package_name     # 洗掉虛擬環境中的某個包
10 
11 # 查看已安裝環境(顯示所有的虛擬環境,conda默認(自帶)有一個base環境)
12 conda info –e   
13 conda info –envs   
14 conda env list

【注意】:conda離線創建環境時:需要將錯誤資訊里有一項是offline mode:false 改為 offline mode:true ,不然創建不成功

1 conda config --set offline true   

【補充】:安裝時可能出現的bug

   1).  anaconda裝環境遇到無法定位程式輸入點OPENSSL_sk_new_reserve……問題:首先進入Anaconda\DLLS目錄,查看libssl-1_1-x64.dll的日期;然后進入Anaconda\Library\bin目錄,比較兩者日期;如果不一致,將DLLS中的替換到bin中的;最后再執行conda create -n xxxx python=3.5

即可,

   2). anaconda出現CondaHTTPError問題:CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.continuum.io/pkgs/free/noarch/repodata.json.bz2>  (一般是設定代理的問題)

最后補充倆指令:

   查看虛擬環境中安裝的包:pip freeze 或 pip list

   查看檔案里面的內容,例如requirements.txt檔案:cat requirements.txt

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/194783.html

標籤:Python

上一篇:自學python筆記(二)

下一篇:8.python內置模塊之random模塊簡介

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more