以前在開發時一直使用 conda 使用做爲虛擬環境管理工具,但有時候會常常會臨時性的須要一個虛擬環境,
若是使用 conda create
建立一個新環境,耗時不說,有時候還忘了刪除,最後系統裏一堆的虛擬環境。
偶然發現 pipenv
後試用了一下,感受它的工做流相比以前虛擬環境環境加 requirements.txt
的方式更加簡單方便。python
pipenv
最好和 Python3 一塊兒使用git
最簡單的方式是經過 pip 安裝github
pip3 install pipenv
若是是 mac 用戶也能夠經過 Homebrew 安裝shell
brew install pipenv
若是沒有安裝 pip 能夠經過如下方式安裝bash
https://raw.githubusercontent.com/kennethreitz/pipenv/master/get-pipenv.py | python
mkdir myproject pipenv install
這會在 myproject 文件下建立 Pipfile
和 Pipfile.lock
文件,同時建立虛擬環境
虛擬環境名稱爲 pipenv 加項目路徑哈希值,如 pipenv-7BgKv-oX工具
ll -rw-r--r-- 1 rookie rookie 138 4月 20 20:24 Pipfile -rw-r--r-- 1 rookie rookie 453 4月 20 20:24 Pipfile.lock
虛擬機環境默認位於 ~/.local/share/virtualenvs/
,因爲 pipenv 經過路徑名哈希值與虛擬環境
創建映射關係,所以若是移動項目會致使虛擬環境不可用。能夠經過在 .bashrc
添加export PIPENV_VENV_IN_PROJECT=1
讓 pipenv 在項目文件中建立虛擬環境,這時候虛擬環境位於 myproject/.venv
文件夾下。ui
若是項刪除虛擬環境,在項目頂層目錄下運行this
pipenv --rm
若是要指定 Python 版本,能夠經過 --python
完成,如我要安裝 python3.7 的虛擬環境url
pipenv --python 3.7
# cat Pipfile [[source]] name = "pypi" url = "https://pypi.org/simple" verify_ssl = true [dev-packages] [packages] [requires] python_version = "3.6"
[[source]]
模塊指定了 pip 源位置,一般國內 pip 源加快下載速度spa
[[source]] name = "tuna" url = "https://pypi.tuna.tsinghua.edu.cn/simple/" verify_ssl = true [[source]] name = "pypi" url = "https://pypi.org/simple" verify_ssl = true [dev-packages] [packages] [requires] python_version = "3.6"
你能夠編輯 packages
, 添加項目須要的 Python 庫,如 requests='**'
,甚至能夠指定不一樣
平臺下的包配置,詳細配置參考 Advanced Usage of Pipenv
不過你能夠經過pipenv install requests
來安裝,pipenv 將會自動更新 Pipfile
和 Pipfile.lock
。[dev-packages]
則是一些開發依賴但不是項目依賴包的存放目錄,如 pylint
等 pep8 檢查工具
能夠在安裝時指定 pipenv install --dev
將某個包聲明爲 dev-package
卸載 package 也很簡單
pip uninstall
若是經過 pipenv 命令安裝和卸載 package,安裝或卸載完成後還會更新 Pipfile.lock
文件,有時候會卡在這個步驟。一般能夠 ctrl+c
強制推出,刪除 Pipfile.lock
, 而後
pipenv lock
從新生成該文件
進入虛擬環境
cd myproject pipenv shell
退出虛擬環境
pipenv exit
有時候某些 package 須要指定特定的 pip 源,能夠經過以下方式指定,很是簡便
[[source]] url = "https://pypi.python.org/simple" verify_ssl = true name = "pypi" [[source]] url = "http://pypi.home.kennethreitz.org/simple" verify_ssl = false name = "home" [dev-packages] [packages] requests = {version="*", index="home"} maya = {version="*", index="pypi"} records = "*"
有時候須要生成 requirements.txt
文件
pipenv lock -r
若是隻須要生成 dev-pakcages 列表,也很簡單
pipenv lock -r --dev
自動載入環境變量文件。若是 .env
文件在項目根目錄下,pipenv shell
和 pipenv run
將
會自動載入文件中的環境變量。
$ cat .env HELLO=WORLD $ pipenv run python Loading .env environment variables… Python 2.7.13 (default, Jul 18 2017, 09:17:00) [GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> os.environ['HELLO'] 'WORLD'
pipenv 還支持自定義命令,這對於某些開發過程當中常常使用的命令來講很是方便。
在 Pipfile
中添加 [scripts]
[scripts] printspam = "python -c \"print('I am a silly example, no one would need to do this')\""
經過 pipenv run <custom_command>
便可運行自定義命令,如
pipenv run echospam "indeed" I am really a very silly example indeed
更多高級用戶能夠參考 官方文檔
最後歡迎關注個人 Blog-PrivateRookie