功能強大的pip依賴管理工具pipenv

pip是Python語言的官方包管理器,但是pip在使用的時候有一個問題,就是隻能安裝為全局的包,假如有兩個項目需要使用包的不同版本,那麼pip就無能為力了。因此出現了virtualenv這樣的工具,可以創建虛擬環境,在虛擬環境中用pip安裝的包和全局版本的不會發生衝突。


功能強大的pip依賴管理工具pipenv


因此有大神仿照npm、maven等包管理工具,開發了一個名為pipenv的工具,它集虛擬環境創建、依賴版本鎖定、配置文件記錄版本等功能於一體,使用起來也極為簡單。僅需一條命令即可完成原來virtualenv工作流好幾條命令的作用。

安裝pipenv

安裝pipenv非常簡單,直接用pip命令即可安裝。

<code>pip install pipenv/<code>

安裝完畢之後, 在一個空白目錄輸入下面的命令即可使用pipenv創建和初始化虛擬環境。

<code>pipenv install/<code>

默認情況下pipenv創建的虛擬環境目錄在用戶文件夾下,時間長了會累積很多無用的虛擬環境目錄,因此我比較喜歡設置為在項目文件夾下創建虛擬環境。這需要設置PIPENV_VENV_IN_PROJECT環境變量,環境變量的值為空格即可。


功能強大的pip依賴管理工具pipenv

這樣的話,運行pipenv命令的時候就可以發現,這次虛擬環境創建到了項目文件夾下。另外pipenv還創建了兩個新的文件,Pipfile和Pipfile.lock,前者是pipenv的配置文件,後者是鎖定文件,記錄了詳細的包版本配置。這和npm等包管理器的功能是一樣的。

功能強大的pip依賴管理工具pipenv


pipenv使用起來也非常簡單,下面是常用的命令。其實一般也就用到安裝等命令。

<code># 安裝依賴包
pipenv install requests
# 安裝開發依賴包
pipenv install -d autopep8 pylint
# 更新虛擬環境和依賴包
pipenv update/<code>

選擇虛擬環境版本

pipenv不僅僅是一個簡單的虛擬環境包管理器,它還有一些非常好用的功能,可以極大的方便我們的開發。如果你已經安裝了多個版本的Python,或者是Linux系統,有pyenv這個自動安裝多版本Python的工具。那麼pipenv在創建虛擬環境的時候,就可以使用參數設置版本號。


如果你是Linux系統,並且安裝有pyenv,那麼就可以隨意指定版本號,pyenv會自動下載安裝對應的版本。否則的話,只能指定系統已經安裝的Python版本, 否則pipenv就會提示找不到該版本的Python。

<code># 使用Python 3.6
pipenv --python 3.6/<code>

設置包索引

默認情況下,pipenv會從pip的官方包索引去下載包,下載速度可能比較慢。不過我們可以使用國內的鏡像來加快下載速度,修改辦法很簡單,編輯Pipfile文件,修改url即可。下面使用了清華大學的包索引鏡像。

<code>[[source]]
name = "pypi"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
verify_ssl = true/<code>

如果你覺得每次都要設置一次鏡像,很麻煩的話,其實也可以通過環境變量設置為永久配置。設置PIPENV_PYPI_MIRROR以及你要使用的鏡像即可。


功能強大的pip依賴管理工具pipenv

查看安全問題

pipenv還提供了check子命令,通過它,我們可以查看當前項目中引用的包是否存在安全問題。如果存在的話,需要及時將依賴升級到修復了安全問題的版本。

<code>$ pipenv check

Checking PEP 508 requirements…
Passed!
Checking installed package safety…

33075: django >=1.10,<1.10.3>=1.10,<1.10.3>=1.10,<1.10.7>

和pip之間的轉換

如果你還在堅持使用pip和requirements.txt,那麼其實也可以開始嘗試使用pipenv。pipenv也可以非常方便的和requirements.txt之間進行轉換。


如果你準備用pipenv安裝requirements.txt中定義的依賴包,在安裝的時候指定-r參數即可。

<code>pipenv install -r path/to/requirements.txt/<code>

如果你要將項目中的pipfile依賴導出為requirements.txt,用下面的命令。

<code>pipenv lock -r/<code>

自動加載.env文件

有時候開發項目的時候需要模擬一些環境,因此需要配置一定的環境變量。常見做法就是將要用到的環境變量寫入.env文件中。pipenv也可以自動識別這些環境變量,無需任何操作。


環境變量支持

pipenv還支持在配置文件中引入環境變量,如果你準備將項目放到公開的倉庫中,但是又不想讓別人看到你的秘鑰等私有信息,就可以將這些私有信息以環境變量的方式設置,然後在配置文件中引入。

<code>[[source]]
url = "https://${PYPI_USERNAME}:${PYPI_PASSWORD}@my_private_repo.example.com/simple"
verify_ssl = true
name = "pypi"

[dev-packages]

[packages]
requests = {version="*", index="home"}
maya = {version="*", index="pypi"}
records = "*"/<code>

pipenv是一個非常好用的工具,填補了pip在依賴管理方面的空白。所以現在很多環境都支持pipenv。如果大家也覺得pipenv好用的話,歡迎評論區一起交流,關注+轉發,謝謝!


分享到:


相關文章: