段子博主
早在之前公司寫博客的時候就發(fā)現(xiàn),相比于技術(shù)內(nèi)容,大家更愛看我講段子,現(xiàn)在開始寫公眾號了一樣這個結(jié)局。總結(jié)知識的文章,沒多少人看,瞎搗鼓手機(jī)的、一堆人關(guān)注...你們這么做真的好嗎,是我的技術(shù)文章寫得層次太低,還是段子講的太有趣?我趙曰天不服??!

年老體弱
今天西安下雨很涼快,吃完飯去理發(fā),老板說你才剪的頭又這么長了,人閑長頭發(fā)肯定一天沒事兒干吧。我想說自從搞公眾號開始,已經(jīng)連著一個多月天天2點多睡覺了。周五晚上休息還跟大學(xué)同學(xué)dota1搞通宵真的受不了,然后坐著理發(fā)睡著了...
一個多月的規(guī)律發(fā)現(xiàn)周六、周日兩天的閱讀量很差,大家放假都想著空調(diào)可樂加西瓜,啤酒雞翅爆米花,沒有幾個人看公眾號。所以吧,以后周六、周日就不更新了,保證一周五更。周末的時間騰出來學(xué)一些偏重自己喜好的知識,希望大家體諒。
又見 Kenneth Reitz

之前公眾號寫了一篇文章爬蟲新寵requests_html 帶你甄別2019虛假大學(xué),其中主要是為了介紹模塊requests_html,這個模塊的作者還開發(fā)了requests模塊,相當(dāng)?shù)南?。沒錯,他就是==Kenneth Reitz==,一個被編程耽誤的攝影師,哈哈,網(wǎng)上還有他的一些勵志故事,喜歡的朋友可以去搜搜,個人比較崇拜他。那么,今天又要介紹他的另外一個牛13之作,pipenv
pipenv
介紹
過去大家經(jīng)常使用virtualenv來創(chuàng)建虛擬環(huán)境,通過pip freeze生成requirements.txt文件,然后通過pip install -r requirements.txt進(jìn)行項目模塊的管理與安裝。這樣的安裝存在很多問題,比如每次更新模塊后,需要手動的重新生成依賴文件,等等問題。但看過今天的文章,你會更喜歡pipenv這款工具。
Pipenv: Python Development Workflow for Humans
Pipenv試圖解決的問題是多方面的:
- 您不再需要單獨使用pip和使用virtualenv。他們一起工作。
- 管理requirements.txt文件可能會有問題,因此Pipenv使用即將推出的文件Pipfile,Pipfile.lock而這對于基本用例來說是優(yōu)越的。
- 哈希總是隨處可見。安全。自動暴露安全漏洞。
- 讓您深入了解您的依賴圖(例如$ pipenv graph)。
- 通過加載.env文件簡化開發(fā)工作流程。
這哥們所有的庫,都是for Humans,要不要上升這么高的高度...
pipenv安裝
pip install pipenv即可輕松完成安裝...
之后創(chuàng)建一個我們的項目目錄并進(jìn)入目錄輸入:pipenv install 創(chuàng)建目錄對應(yīng)的虛擬機(jī)。
虛擬機(jī)創(chuàng)建目錄:
- windows : %homepath%.virtualenvs\projectname-隨機(jī)碼
- Linux\Mac: ~/.local/share/virtualenvs/projectname-隨機(jī)碼
虛擬機(jī)創(chuàng)建完成后,會在項目目錄內(nèi)生成兩個包管理文件文件Pipfile、Pipfile.lock

修改pip源
pipenv shell 進(jìn)入虛擬機(jī)
之后線比急著下載模塊,我們需要先修改pip源,因為默認(rèn)的源官方源速度太慢且連接不穩(wěn)定。網(wǎng)上說的什么命令行修改的,你趁早別用老老實實的進(jìn)入Pipfile文件內(nèi)部修改。

source的標(biāo)紅兩個地方需要注意,我用的是阿里的鏡像,所以verify_ssl無需修改,但是有些鏡像是http協(xié)議的,你需要吧verify_ssl改為false,否則報錯無法使用。
模塊安裝
我們看到PIPfile中有兩個section標(biāo)簽,一個是dev-packages,一個是packages,這兩個有什么區(qū)別呢?
pipenv install flask此時,我們安裝的是packages
pipenv install watchdog --dev 此時,我們安裝的是dev-packages
這兩者有什么區(qū)別呢?比如我們在開發(fā)的過程中會引入一些工具,但這些工具在交付或者上線的時候無需安裝,此時我們可以使用--dev的方式安裝,而客戶在初始化安裝時使用pipenv install就不會將開發(fā)使用的模塊劑型安裝,針對環(huán)境進(jìn)行模塊分離,是否很犀利?
Pipfile.lock
剛才說到了Pipfile,那么Pipfile.lock這個文件又是干嘛的?
Pipfile.lock是一個json文件,詳細(xì)記錄了,我們安裝的每一個模塊及模塊的詳細(xì)信息,如:名稱、版本、Hash值。這樣安裝卸載變得更為容易與準(zhǔn)確。
模塊依賴展示
這個功能是pipenv比較人性化的一個命令行。類似于npm list,會將我們安裝的包進(jìn)行依賴樹展示,如下圖:

項目遷移
我們之前使用的virtualenv,可以遷移至pipenv嗎?
答案是肯定的,只需要先通過pipenv install -r requirements.txt將原有的模塊進(jìn)行遷移,之后使用
同樣的,從pipenv遷移至virtualenv項目,也可以使用pipenv run pip freeze 生成requirements.txt。
.env介紹
在虛擬機(jī)中,我們的環(huán)境信息如何保存呢?比如郵箱,入口方法,等等...這時候我們需要使用到.env的文件。
命令集合
| column | column |
|---|---|
| pipenv --where | 列出本地工程路徑 |
| pipenv --venv | 列出虛擬環(huán)境路徑 |
| pipenv --py | 列出虛擬環(huán)境的Python可執(zhí)行文件 |
| pipenv install | 創(chuàng)建虛擬環(huán)境 |
| pipenv install [moduel] | 安裝包 |
| pipenv install [moduel] --dev | 安裝包到開發(fā)環(huán)境 |
| pipenv uninstall[module] | 卸載包 |
| pipenv uninstall --all | 卸載所有包 |
| pipenv graph | 查看包依賴 |
| pipenv lock | 生成lockfile |
| pipenv run python [pyfile] 運行py文件 | |
| pipenv --rm | 刪除虛擬環(huán)境 |
Flask使用pipenv
.flaskenv
我們在開發(fā)Flask項目時,需要創(chuàng)建.flaskenv的文件,用來設(shè)置我們的相關(guān)環(huán)境變量,比如:
FLASK_APP=phraces
FLASK_ENV=development
但在使用配置文件之前,我們首先需要安裝pip install python-dotenv才能進(jìn)行配置文件的讀取操作。
當(dāng)我們使用flask run命令啟動flask程序時,系統(tǒng)會默認(rèn)去尋找名為app.py的文件進(jìn)行加載,但如果我們的啟動文件是phraces.py時,該如何操作?
另外,當(dāng)我們添加FLASK_ENV=development時,可以監(jiān)控文件變動,進(jìn)行動態(tài)reload操作。這就是.flaskenv的用途
pycharm運行pipenv
我們每次通過命令行去啟動flask是否太過麻煩?能否直接通過pycharm來啟動flask的pipenv呢?當(dāng)然...只需要按照下圖配置即可:


The End
OK,今天的內(nèi)容就到這里,如果覺得內(nèi)容對你有所幫助,歡迎點擊文章右下角的“在看”。
期待你關(guān)注我的公眾號清風(fēng)Python,如果你覺得不錯,希望能動動手指轉(zhuǎn)發(fā)給你身邊的朋友們。