pipenv快速入門
學過Python的同學應該都瞭解pip這個工具,我們用pip絕大部分的第三方庫都可以用pip來安裝,用起來很方便。但是如果我們要把專案部署到伺服器上面的話,就稍微有些麻煩了,因為還需要在伺服器上用pip安裝這些包,假如專案中用到很多包的話,一個個安裝會很麻煩,而且沒有通用性。Java上的maven、gradle,NodeJS的npm這些工具就不存在這個問題,它們有一個或多個的專門的依賴檔案來管理這些包。pipenv就是這樣一個類似的工具,可以幫助我們管理Python和第三方庫的版本。
安裝
安裝pipenv很簡單,用pip命令就可以安裝。
pip install pipenv
將來需要更新pipenv的時候,執行:
pip install --user --upgrade pipenv
首次執行
如果是第一次在專案中執行pipenv命令的話,會在專案中建立一個名為Pipfile
的檔案,檔案內容類似下面這樣。用過maven、gradle等工具的同學對此應該熟悉,相信不用我解釋其中的含義。
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
requests-html = "*"
[dev-packages]
[requires]
python_version = "3.7"
如果執行過install、update等命令的話,還會建立一個Pipfile.lock
檔案,類似npm中的lock檔案。這兩個檔案就是pipenv用於管理第三方庫的配置檔案,如果同時使用版本控制軟體的話,需要將它們也加入進去。
常用命令
安裝
例如,我想在專案中安裝requests這個包,執行:
pipenv install requests
如果需要指定具體版本號,可以這樣:
pipenv install requests==2.13.0
如果是第一次執行pipenv的話,會先建立Pipfile
檔案,否則會修改Pipfile`檔案。
該命令還有一個常用引數-d
或--dev
,用於安裝僅供開發使用的包。
解除安裝
相應的還有命令來解除安裝第三方包,該命令還有兩個引數--all
和--all-dev
用於解除安裝所有包和所有開發包。
pipenv uninstall requests
更新
檢視所有需要更新的包:
pipenv update --outdated
更新所有包:
pipenv update
更新指定的包:
pipenv update <包名>
從requirements.txt匯入
如果專案中有requirements.txt檔案,pipenv會在安裝的時候自動匯入。如果需要匯入其他位置的requirements.txt,可以用下面的命令:
pipenv install -r path/to/requirements.txt
指定Python版本
pipenv會建立虛擬Python環境,並在其中用pip安裝所有包。如果要指定Python版本,可以用下面的命令,三種版本號都支援:
pipenv --python 3
pipenv --python 3.6
pipenv --python 2.7.14
如果不指定版本號,pipenv會使用系統預設的Python版本。需要注意,這裡指定的Python必須是系統已經安裝的、可以在環境變數中搜尋到的版本號,如果指定未安裝的版本,會提示錯誤。
執行命令
用下面的命令可以啟動一個在虛擬環境中的shell:
pipenv shell
如果不想啟動shell,而是直接在虛擬環境中執行命令,可以使用run:
pipenv run python --version
高階用法
一開始我文件沒看全,然後用pipenv的時候發現有一些問題,後來我發現官方文件還有一部分高階內容也很重要,所以再來補充一下。當然如果有需要的話還是得看原文。
匯出requirements.txt
用下面的命令就可以將Pipfile
和Pipfile.lock
檔案裡面的包匯出為requirements.txt
檔案。
pipenv lock -r
如果只想匯出開發用的包,可以新增--dev
引數:
pipenv lock -r --dev
自動安裝Python
pipenv只能搜尋系統中已經安裝的Python版本,對於未安裝的版本,會提示錯誤。但是如果你同時安裝了pyenv的話,pipenv會自動發現pyenv,然後直接詢問你是否要安裝。這樣一來,原來的工作流程是:用pyenv安裝某個Python->用virtualenv或venv建立虛擬環境->用pip從requirements.txt中安裝包->將來可能還要更新包。現在完全可以用pipenv一兩條命令解決,真的是非常方便。
自動載入.env
檔案
.env
檔案可以設定一些環境變數,在程式開發的時候模擬環境變數。pipenv也可以自動載入.env
檔案。
$ 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`
環境變數支援
在Pipfile
中也可以引用環境變數的值,格式為${MY_ENVAR}
或$MY_ENVAR
,在Windows系統中還支援%MY_ENVAR%
。
[[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 = "*"
自定義虛擬環境路徑
很多工具遵循Linux開發習慣,將東西全存在使用者目錄中,在Linux中可能沒啥,但是在Windows下可能有人不喜歡把這些東西放在使用者目錄。當然pipenv也可以自定義,只需要設定或修改WORKON_HOME
環境變數的值即可。
如果設定了PIPENV_VENV_IN_PROJECT
環境變數,pipenv會把虛擬環境放在專案目錄的.venv
目錄下。
配置pipenv
pipenv還有一些配置,都是使用環境變數配置的,由於配置項比較多,這裡就不介紹了,直接看官方文件好了。
從setup.py
安裝
pipenv也可以從setup.py
安裝:
pipenv install -e .
那麼為什麼不全用pipenv來安裝呢?官方文件這裡為我們做出瞭解釋:專案可以分為兩種,程式和庫,對於程式來說應該使用pipenv,而對於庫來說則是在setup.py
中安裝。詳細解釋說實話我沒太看懂,大意就是抽象依賴和具體依賴,還有一個責任分配的問題,原文在這裡。
相關文章
- Pipenv 快速入門
- 快速排序快速入門排序
- SQL快速入門 ( MySQL快速入門, MySQL參考, MySQL快速回顧 )MySql
- JavaScript快速入門JavaScript
- vim快速入門
- Webpack快速入門Web
- Lumen快速入門
- TypeScript 快速入門TypeScript
- phpunit 快速入門PHP
- React快速入門React
- WebSocket 快速入門Web
- MQTT 快速入門MQQT
- Zookeeper快速入門
- DvaJS快速入門JS
- SnakeYaml快速入門YAML
- RabbitMQ快速入門MQ
- 快速入門reactReact
- Promise快速入門Promise
- PHP快速入門PHP
- GitHub 快速入門Github
- mongodb快速入門MongoDB
- mysqlsla快速入門MySql
- Express快速入門Express
- Python快速入門Python
- NuxtJS快速入門UXJS
- MySQL 快速入門MySql
- jackson快速入門
- Composer 快速入門
- zookeeper 快速入門
- Spark 快速入門Spark
- Envoy 快速入門
- Thymeleaf【快速入門】
- Feign快速入門
- Redis快速入門Redis
- IMGUI快速入門GUI
- 反射快速入門反射
- RxJava快速入門RxJava
- CSS快速入門CSS