摘要:坑人的版本的版本問題一直是個廣被吐槽的黑點。這些版本的沖突在開發中十分常見,而和的版本差異又加劇了這一問題。從而避免與其他版本發生干擾。
坑人的版本
Python 的版本問題一直是個廣被吐槽的黑點。以至于有人調侃說:
Python 是世界上最好的兩種語言!
在這里我要說明下,對于初學者來說,版本間的語法差異其實并不大。現在剛開始學 Python 的人,放心大膽地 用最新版本 即可。業內所詬病的,主要是針對代碼上的不兼容。
但平心而論,版本間的兼容問題并不是 Python 所獨有。且就算 Python 只有一個版本,第三方庫的版本一樣會讓人抓狂。
比如說,你之前在電腦上用 Python 寫了一個網站,使用了 django 框架,版本是 1.11。過了一年,你要開發一個新網站,這時候 django 已經發展到了 2.0 版本,你是用還是不用?更新了版本,電腦上的老網站代碼就無法執行了。
或者,你安裝并使用了某個模塊 A 的最新版本。然后另一個項目用到的模塊 B,B 的代碼卻依賴于模塊 A 較早的版本。這種情況下,你甚至可能都無法成功安裝模塊 B。
這些版本的沖突在開發中十分常見,而 Python 2 和 3 的版本差異又加劇了這一問題。
對此,早已有了成熟的解決方案:
虛擬環境Python 開發中所謂的 虛擬環境 ,就是為 Python 版本及第三方庫創建獨立的開發環境,使不同項目之間互不干擾。借助于虛擬環境,我們可以在同一臺電腦上構建出項目 A 在基于 Python 2 的環境中運行,而項目 B 可以在基于 Python 3 的環境中運行。
虛擬環境需要通過一些工具創建,常見的幾種:
1, virtualenv 。這是 Python 最為常用的虛擬環境工具,簡單有效,我自己就用它。本文稍后部分會介紹下基本的安裝和使用。網上也有相當多的使用教程。
virtualenv 的一個局限是無法統一管理你電腦上的所有虛擬環境,因此環境多了之后,可能會遺漏,或造成冗余。對此,有一個擴展工具 virtualenvwrapper ,能幫你統一管理各個環境。
2, venv 。它的實現很大程度基于 virtualenv,使用方法也很類似。而 Python 現已內置了 venv。
3, conda 。這個工具相當于 pip + virtualenv + virtualenvwrapper ,它不僅能創建和管理虛擬環境,本身還是一個包管理器,可以下載安裝第三方庫。功能完善,使用也不復雜。著名的數據分析開發包 anaconda 里就默認使用 conda 作為環境和模塊管理工具。
接下來我們簡要介紹下:
virtualenv 的使用安裝
在系統命令行通過 pip 或者 easy_install 安裝即可:
pip install virtualenv
如果你的命令行無法執行 python、pip 及后續的 virtualenv 命令,請檢查你環境變量里的 PATH 路徑。(還不熟悉的請在公眾號回復關鍵字 安裝 )
創建
進入到合適的目錄下(一般是項目根目錄,但不建議加入 git 倉庫里提交),通過 virtualenv 命令創建一個名為 MY_ENV 的環境(這個名字可自定義):
virtualenv MY_ENV
沒有報錯的話,會成功創建目錄 MY_ENV,其中有一些目錄和文件,這就是我們的虛擬環境所在了。
激活
使用虛擬環境前,需要“激活”環境:
windows
MY_ENVScriptsactivate
linux
source MY_ENV/bin/activate
路徑根據你所在位置會有所不同,也可以使用完整路徑。
激活環境之后,命令行前面會用括號標識出你所在的環境。這時候再通過 pip 安裝第三方模塊,就不會影響到系統本身的 Python 環境。
關閉
當不需要環境時,可以通過 deactivate 命令關閉。當然,直接關掉命令行窗口也沒毛病。
指定 Python
虛擬環境的創建,默認是使用 virtualenv 所在的那個 Python 版本。如果你電腦上有多個 Python,則可以指定環境的 Python 版本,例如:
virtualenv -p C:python27python.exe ENV27虛擬環境的本質
為什么簡單幾行命令,就可以實現 Python 環境的分離?本質上靠的還是環境變量里的 PATH 路徑。
PATH 的作用,就是當你執行一個命令時,系統要知道去哪里找這個命令。PATH 里有多個路徑,就按順序從前到后依次查找。執行 python、pip 等命令時,都是按照這個方式進行。
通過 echo 命令可以查看路徑:
windows
linux
當版本出現混亂時,往往就是 PATH 中有多個路徑,不同路徑中有含有相同的命令,以至于執行了并非你預期的那個版本中的命令。比如你的 python 命令是在 python27 目錄下,而 pip 執行的卻是 python36/Scripts 里的,然后就發生了“明明安裝成功了,程序里卻找不到”的情況。
而當激活一個虛擬環境時,就相當于在 PATH 的開頭增加了我們創建的目錄,使用這個目錄里的 Python 及相關庫。安裝新的庫也是裝在新建的這個目錄之下。從而避免與其他版本發生干擾。
如果你不清楚你所用的命令究竟是哪里的,可以在命令行中使用 where/which 命令查看:
PyCharm 里的虛擬環境可能很多同學還不習慣用命令行,而是完全使用 IDE 來進行配置。那么最后我特別提一下 PyCharm 的情況。
新版本的 PyCharm 默認會 在創建項目時新建一個虛擬環境 ,因此不了解這個操作的同學會疑惑,命令行里用 pip 裝好的模塊為什么到 PyCharm 里就用不了了。簡單的解決方法,就是從 PyCharm 的設置面板里安裝庫。
其他的可選方案:
建項目時不要選新建虛擬環境
建項目時選虛擬環境繼承已有的庫
建項目時選用命令行創建好的虛擬環境
建好項目后,在命令行激活對應虛擬環境后再安裝庫
這些我在之前的文章 [[新手向視頻]新版PyCharm創建項目為什么會有問題](http://zhuanlan.zhihu.com/p/3... 里也提過, 查看 PyCharm 的上手教程,可在公眾號( Crossin的編程教室 )回復關鍵字 _pycharm_
以上就是關于虛擬環境的一些介紹,留個小作業: 親自動手創建一個虛擬環境,并在其中安裝一個第三方庫。
過程中有任何疑問,或想了解更多關于虛擬環境的配置,可以上我們的論壇 http:// bbs.crossincode.com 進行討論。
下課!
════
其他文章及回答:
如何自學Python | 新手引導 | 精選Python問答 | Python單詞表 | 知乎下載器 | 人工智能 | 嘻哈 | 爬蟲 | 我用Python | 高考 | requests | AI平臺
歡迎搜索及關注: Crossin的編程教室
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42535.html
摘要:我自己印象最深的是在上安裝加密和科學計算模塊,折騰了很久。這個精裝是面向數據科學的,同時也保留了你自己進一步改裝的空間。數據科學庫包環境管理工具,這幾樣就是的主要功能。 幾乎所有的 Python 學習者都遇到過 安裝 方面的問題。這些安裝問題包括 Python 自身環境的安裝、第三方模塊的安裝、不同版本的切換,以及不同平臺、版本間的兼容問題 等。當你因為這些問題而卡殼,一行代碼沒寫就已...
摘要:最近看到一個很有未來感的新聞一輛特斯拉在拉斯維加斯出了車禍,撞死了一個機器人。不知道是意外還是炒作,又或者是這位機器人故意碰瓷,反正人們也無法從受害者口中了解被特斯拉撞是怎樣一種體驗了。像星際爭霸之類的經典游戲都有過類似的比賽。 最近看到一個很有未來感的新聞: 一輛 特斯拉 在拉斯維加斯出了車禍,撞死了一個……emmmm……機器人。不知道是意外還是炒作,又或者是這位機器人故意碰瓷,反...
摘要:我應該先學習哪種編程語言這一切都取決于你想要完成的事情作為技術作家,我的任務是使復雜的主題易于理解,因此在本文中您將找不到太多技術術語。我應該先學習哪種編程語言這是我自出版之前收到的最常見的問題。是一種后端語言。我應該先學習哪種編程語言? 這一切都取決于你想要完成的事情 作為技術作家,我的任務是使復雜的主題易于理解,因此在本文中您將找不到太多技術術語。我可以對面向對象的編...
摘要:我應該先學習哪種編程語言這一切都取決于你想要完成的事情作為技術作家,我的任務是使復雜的主題易于理解,因此在本文中您將找不到太多技術術語。我應該先學習哪種編程語言這是我自出版之前收到的最常見的問題。是一種后端語言。我應該先學習哪種編程語言? 這一切都取決于你想要完成的事情 作為技術作家,我的任務是使復雜的主題易于理解,因此在本文中您將找不到太多技術術語。我可以對面向對象的編...
摘要:此外,與訓練機器學習模型的作業相比,作業具有不同的執行配置文件。此外,還制作了一個界面,以便控制機器學習的參數指定用于訓練的數據量等。 摘要: 一份機器學習過來人的經驗清單分享,主要是包含一些關于構建機器學習工作流以及Apache Spark應該注意的一些事項,希望這個清單能夠幫助那些正在學習機器學習的相關人員少走一些彎路,節約一些時間。 showImg(https://segment...
閱讀 2707·2023-04-25 19:13
閱讀 4054·2021-09-22 15:34
閱讀 3065·2019-08-30 14:23
閱讀 1473·2019-08-29 17:17
閱讀 1616·2019-08-29 16:05
閱讀 1548·2019-08-29 13:26
閱讀 1226·2019-08-29 13:19
閱讀 564·2019-08-29 13:16