Tech Soup ~ 技術鳮湯 ;-)
指望這篇解決全部 Pyenv 核心困惑.html
Pyenv 是 Python 項目環境隔離/控制器
, 最基本的使用:python
基於官方倉庫安裝:git
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
而後配置到環境中:github
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
接着就能夠自由控制運行時環境了:sql
安裝目標版本,好比:shell
pyenv install 2.4.2
複製一個項目環境:ubuntu
pyenv virtualenv 2.4.2 242proj
設定當前目錄之內默認使用新環境:segmentfault
pyenv local 242proj
就以上三個環節的配置, 就能夠完成:windows
爲何有 Pyenv 等等環境控制工具?
你們開始學習 Python 時, 可能最驚訝/震驚/自豪 的發現就是xcode
由於, Python 太好用, 不管哪一個系統廠商, 都有大量的內置工具/軟件依賴 Python
那麼, 這也就帶來一個問題:
這其實, 也是不少教程中涉及安裝 Python 模塊時
sudo
命令因爲 Python 發展過久, 中間有太多意外決策, 同時開源項目又不由止你們的探索...
因此, 如今任何系統中的 Python 運行時環境均可以混亂不堪...
正如 xkcd: Python Environment 所描述的那樣...
可是, 對於正常學習/使用者而言, 通常只想解決幾個問題:
和系統環境隔離
Python 版本隔離
項目模塊依賴隔離
那麼, 在不少年探索後, Pyenv 正好是解決以上問題的那個工具
正如項目名稱同樣:
Python 環境
~ 控制器, 控制了核心兩種環境:
那麼, 如何最短手續就進入 Pyenv 的世界享受可控 Python 環境?
pyenv/pyenv-installer: This tool is used to install pyenv
and friends.
首次安裝, 建議使用官方提供的安裝器
如何檢驗 pyenv 安裝成功?
$ env | grep pyenv
PYENV_ROOT=/指向/你/的/.pyenv PATH=...:/指向/你/的/.pyenv/shims:/指向/你/的/.pyenv/bin:...
用 env 檢驗系統環境變量中包含 pyenv 要求的兩個關鍵性配置
$ pyenv
pyenv 1.0.3-535-g17f44b7c Usage: pyenv <command> [<args>] Some useful pyenv commands are: commands List all available pyenv commands local Set or show the local application-specific Python version global Set or show the global Python version shell Set or show the shell-specific Python version install Install a Python version using python-build uninstall Uninstall a specific Python version rehash Rehash pyenv shims (run this after installing executables) version Show the current Python version and its origin versions List all Python versions available to pyenv which Display the full path to an executable whence List all Python versions that contain the given executable See `pyenv help <command>' for information on a specific command. For full documentation, see: https://github.com/pyenv/pyenv#readme
運行 pyenv 給出標準使用幫助
這樣, 就說明安裝好了
pyenv/pyenv-virtualenvwrapper: an alternative approach to manage virtualenvs from pyenv.
安裝 Pyenv 當前是想用多版本 Python 環境了,那麼,必定要安裝這個插件
安裝很是簡單:
$ git clone https://github.com/pyenv/pyenv-virtualenvwrapper.git $(pyenv root)/plugins/pyenv-virtualenvwrapper
就一個 git clone 操做,而後也配置到系統環境中:
export PATH="~/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
在原先 pyenv 以後追加一行, 啓動 virtualenv-init
就好;
已經見到這個詞不少次了, 可是, 多數文檔並不說明這是什麼東西...
致使 Pyenv 一直沒使用起來....
系統環境 -> System environment
env
指令彙報出來的, 當前系統運行時使用的全部 全局配置
~/.bash_profile
之類系統配置文件就能自動加載的這個儀式指令就是:
$ source ~/.bash_profile
source
~ 資源
最大的坑來了...
Common build problems · pyenv/pyenv Wiki
在官方wiki 第一條, 就是這篇文章, 爲何?
直覺上, 固然須要額外的支持了...
這也是爲何不少人安裝 Pyenv 後卻沒法安裝新 Python 版本的根本緣由:
好在, Python 編譯時依賴的都是通用基礎模塊,
不管哪一個系統, 都有對應開源倉庫能夠快速安裝;
對於 macOS 只須要:
$ brew install openssl readline sqlite3 xz zlib
只是, 前提是事先配置好 XCode Command Line Tools:
$ xcode-select --install
由於, 全部編譯工做, 實際上是使用 XCode 來進行的, 不然,沒法兼容 macOS 環境哪...
好了, 以上準備工做完成了, 其實就3步:
那麼接下來的使用就異常順滑了;-)
安裝新 Python 環境:
$ pyenv install --list Available versions: 2.1.3 2.2.3 2.3.7 ... stackless-3.4.7 stackless-3.5.4
看看 pyenv 支持多少種版本環境的安裝? 上百種了, 這是其它工具做不到的
安裝 Python 3.7.4 環境:
$ pyenv install 3.7.3 python-build: use openssl@1.1 from homebrew python-build: use readline from homebrew Downloading Python-3.7.3.tar.xz... -> https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz ....
檢驗安裝結果:
$ pyenv rehash $ pyenv versions * system 3.7.3
注意:
* system
說明當前目錄使用系統 Python 環境中...
複製一個項目環境:
$ pyenv virtualenv 3.7.3 373camp Looking in links: /var/folders/pl/8rsjzmjn2ybgd71lwqf3lxw80000gn/T/tmp_qtmj124 Requirement already satisfied: setuptools in /Users/zoomq/.pyenv/versions/3.7.3/envs/373camp/lib/python3.7/site-packages (40.8.0) Requirement already satisfied: pip in /Users/zoomq/.pyenv/versions/3.7.3/envs/373camp/lib/python3.7/site-packages (19.0.3)
由於, 這個 3.7.3 環境是乾淨的單純 Python 自身, 做爲母本,
來複製出其它項目中環境纔是正確的思路;
同時, 也由於 pyenv 複製已經安裝好的環境是不用編譯的, 很是快.
檢驗複製結果:
$ pyenv versions * system 3.7.3 3.7.3/envs/373camp
綁定到當前目錄:
༼system༽~/mnt/_historic/101.camp/_video༽ ༄ pyenv local camp373 ༼camp373༽~/mnt/_historic/101.camp/_video༽ system 3.7.3 3.7.3/envs/373camp * camp373 (set by /Users/zoomq/mnt/_historic/101.camp/_video/.python-version)
這裏出現的奇怪提示, 是大媽本地 bash 配置的特殊命令行提示結構, 沒必要關心...
關鍵是 * camp373
, 那個 *
從 system 移動到 camp373
以前,
說明當前運行時環境, 已經從系統默認, 變成剛剛複製出來的一個全新 Python 3.7.3 環境了,
而實際上這一環境編譯安裝在:
/Users/zoomq/.pyenv/versions/camp373
和系統的以及 brew 安裝的都不相同.
注意:
千萬別輕易使用: pyenv global 指定版本別名
這是將 系統 Python 運行環境切換到 pyenv 安裝的環境上...
太危險了...
以上, 簡單說:
而 Pyenv 提供了統一簡潔的指令工具, 能夠快速任意:
並基於 virtualenv 以 pyenv-virtualenvwrapper 形式提供了一系列包依賴控制
更加精彩的是, 完成配置後 pyenv 將自動切換對應環境
這一切, 最終 pyenv 只很是自制的使用
.python-version
文件來完成輔助識別並自動切換camp373
這種咱們自行擬定的環境別名而已那麼 Pipenv/Anaconda/... 其它工具呢?
Python 生態最好也最糾結的一個狀態就是:
好在各個開源項目的文檔/示例都很友好, 也有大量對比文章能夠參考,
俺的私人偏見:
virtualenv 最先完成環境虛擬化;
Anacoda/Miniconda 是通用預部署環境工具
固然, 想節省 Python 版本環境的編譯
conda run python 個人腳本.py
這種Pipenv 從名字上來看就知道專一 pip 的管理
pipenv run python 個人腳本.py
這種形式venv 這是 Python 3 only 的官方內建虛擬環境工具
pyenv/pyenv: Simple Python version management
pyenv/pyenv-installer: This tool is used to install pyenv
and friends.
* [Home · pyenv/pyenv Wiki](https://github.com/pyenv/pyenv/wiki) * [Common build problems · pyenv/pyenv Wiki](https://github.com/pyenv/pyenv/wiki/Common-build-problems)
* [pyenv/pyenv-virtualenvwrapper: an alternative approach to manage virtualenvs from pyenv.](https://github.com/pyenv/pyenv-virtualenvwrapper)
俺用 Pyenv 控制的環境:
༄ pyenv versions system 2.7.10 2.7.10/envs/uC2710 2.7.12 2.7.12/envs/dama2712 2.7.15 2.7.15/envs/leo2715 3.6.3 3.6.3/envs/AI363 3.6.3/envs/DU363 3.6.3/envs/du4pos 3.7.0 3.7.0/envs/leo370 3.7.3 3.7.3/envs/373camp 3.7.3/envs/Django373 3.7.3/envs/camp373 3.7.3/envs/pycon373 373camp AI363 DU363 Django373 * camp373 (set by /Users/zoomq/mnt/_historic/101.camp/_video/.python-version) dama2712 du4pos leo2715 leo370 pycon373 uC2710
當前課程對應公衆號 蟒營101camp 暫定專欄有:
歡迎投稿, 郵件給課程組就好:
guru101camp@googlegroups.com
NN 3778
蟒營™:Python 入門班||圖譜||幻燈||維基
Powered by: Zoom.Quiet / 昧因科技®