pip是Python語言的官方包管理器,但是pip在使用的時候有一個問題,就是隻能安裝為全局的包,假如有兩個項目需要使用包的不同版本,那麼pip就無能為力了。因此出現了virtualenv這樣的工具,可以創建虛擬環境,在虛擬環境中用pip安裝的包和全局版本的不會發生衝突。
因此有大神仿照npm、maven等包管理工具,開發了一個名為pipenv的工具,它集虛擬環境創建、依賴版本鎖定、配置文件記錄版本等功能於一體,使用起來也極為簡單。僅需一條命令即可完成原來virtualenv工作流好幾條命令的作用。
安裝pipenv
安裝pipenv非常簡單,直接用pip命令即可安裝。
<code>pip install pipenv/<code>
安裝完畢之後, 在一個空白目錄輸入下面的命令即可使用pipenv創建和初始化虛擬環境。
<code>pipenv install/<code>
默認情況下pipenv創建的虛擬環境目錄在用戶文件夾下,時間長了會累積很多無用的虛擬環境目錄,因此我比較喜歡設置為在項目文件夾下創建虛擬環境。這需要設置PIPENV_VENV_IN_PROJECT環境變量,環境變量的值為空格即可。
這樣的話,運行pipenv命令的時候就可以發現,這次虛擬環境創建到了項目文件夾下。另外pipenv還創建了兩個新的文件,Pipfile和Pipfile.lock,前者是pipenv的配置文件,後者是鎖定文件,記錄了詳細的包版本配置。這和npm等包管理器的功能是一樣的。
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以及你要使用的鏡像即可。
查看安全問題
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好用的話,歡迎評論區一起交流,關注+轉發,謝謝!
關鍵字: requirements Python 依賴