pipenv 使用簡介

之前在開發時一直使用 conda 使用作爲虛擬環境管理工具,但有時候會經常會臨時性的需要一個虛擬環境,
如果使用 conda create 創建一個新環境,耗時不說,有時候還忘了刪除,最後系統裏一堆的虛擬環境。
偶然發現 pipenv 後試用了一下,感覺它的工作流相比之前虛擬環境環境加 requirements.txt
的方式更加簡單方便。

安裝

pipenv 最好和 Python3 一起使用

最簡單的方式是通過 pip 安裝

pip3 install pipenv

如果是 mac 用戶也可以通過 Homebrew 安裝

brew install pipenv

如果沒有安裝 pip 可以通過以下方式安裝

https://raw.githubusercontent.com/kennethreitz/pipenv/master/get-pipenv.py | python

使用

創建新項目

mkdir myproject
pipenv install

這會在 myproject 文件下創建 PipfilePipfile.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 文件夾下。

如果項刪除虛擬環境,在項目頂層目錄下運行

pipenv --rm

如果要指定 Python 版本,可以通過 --python 完成,如我要安裝 python3.7 的虛擬環境

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 源加快下載速度

[[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

你可以編輯 packages, 添加項目需要的 Python 庫,如 requests='**',甚至可以指定不同
平臺下的包配置,詳細配置參考 Advanced Usage of Pipenv
不過你可以通過pipenv install requests
來安裝,pipenv 將會自動更新 PipfilePipfile.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 shellpipenv 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章