12.3 ã€è™šæ‹ŸçŽ¯å¢ƒã€‘方案二:使用 pipenv ==================================== 以å‰ä¸€ç›´ä½¿ç”¨pip+virtualenv+virtualwrapper管ç†æ¨¡å—和环境, 但是virtualwrapper在windows上使用ä¸å¤ªæ–¹ä¾¿ï¼Œè€Œä¸”包和环境分开管ç†ç¡®å®žç»å¸¸ä¸è®°å¾—哪个是哪个了。 为什么 会推è pipenv 呢? - 它是 ``virtualenv`` å’Œ ``pip`` çš„åˆä½“,å¯ä»¥åˆèµ·æ¥ä½¿ç”¨ï¼› - 使用\ ``Pipfile`` å’Œ ``Pipfile.lock``\ 替代\ ``requirements.txt`` - å¯ä»¥ä½¿ç”¨ ``pipenv graph``\ 很方便的看出包的ä¾èµ–关系。 - é€šè¿‡åŠ è½½\ ``.env``\ 文件简化开å‘工作æµç¨‹ 1. 安装pipenv ------------- å¦‚æžœä½ çš„ç”µè„‘ä¸Šæ²¡æœ‰å®‰è£… pipenv,å¯ä»¥ä½¿ç”¨å¦‚下方法安装 .. code:: shell # mac $ brew install pipenv # windows $ pip install [--user] pipenv å¦‚æžœä½ çš„ç”µè„‘æ˜¯ windows 的。 .. image:: http://image.iswbm.com/Fk6WZ2xbqg2DM3AvnYCpsiKQ4xOn 需è¦å°†å¦‚æ ‡ç¤ºè·¯å¾„ï¼ŒåŠ å…¥åˆ° 环境å˜é‡ PATH ä¸ã€‚ .. image:: http://image.iswbm.com/FjuJ8yZsgjkzVuBRZHxK1ZnnzaEX 然åŽéœ€è¦é‡å¯ä¸€ä¸‹ï¼ŒCMD 终端æ‰èƒ½å¤Ÿåˆ·æ–°çŽ¯å¢ƒå˜é‡ã€‚ 2. 创建虚拟环境 --------------- DjangoWebBlog 是我们的项目目录,进入这个目录下创建虚拟环境 .. code:: shell $ mkdir DjangoWebBlog && cd DjangoWebBlog # 在当å‰ç›®å½•ä¸‹åˆ›å»ºä¸€ä¸ªè™šæ‹ŸçŽ¯å¢ƒï¼ˆé»˜è®¤çš„Python版本) $ pipenv install ä½ ä¹Ÿå¯ä»¥æŒ‡å®šç‰ˆæœ¬åˆ›å»º .. code:: shell $ pipenv --two # 相当于 pipenv --python /usr/bin/python2 $ pipenv --three # 相当于 pipenv --python /usr/bin/python3 $ pipenv --python 3.7 # 也å¯ä»¥æŒ‡å®šå…·ä½“的版本 pipenv install --python 2 这边以安装 python2 版本的虚拟环境为例说明。 .. image:: http://image.iswbm.com/20190612211330.png å¦‚æžœä½ åŽŸé¡¹ç›®ä½¿ç”¨çš„æ˜¯ requirements.txt 这个管ç†åŒ…çš„æ–¹å¼ï¼Œè¿™æ—¶å€™æ‰§è¡Œ ``pipenv --tow`` 创建一个虚拟环境åŽï¼Œä¼šæ‰¾åˆ° requirements.txt ï¼Œå¹¶æ ¹æ®è¿™é‡Œé¢çš„ä¾èµ–åŒ…ç”Ÿæˆ Pipfile文件。 .. image:: http://image.iswbm.com/20190612213015.png 3. 查询虚拟环境 --------------- .. code:: shell # 返回项目的路径 $ pipenv --where # 返回虚拟环境路径 $ pipenv --venv # 返回该虚拟环境的解释器 $ pipenv --py 演示如下: .. image:: http://image.iswbm.com/20190612213950.png 4. æ“作虚拟环境 --------------- .. code:: shell # 进入这个虚拟环境 $ pipenv shell # 退出这个虚拟环境 $ exit $ deactivate # 移除当å‰ç›®å½•çš„虚拟环境 $ pipenv --rm 执行 ``pipenv shell`` å°±å¯ä»¥è¿›å…¥è¿™ä¸ªè™šæ‹ŸçŽ¯å¢ƒï¼Œåœ¨å¤´éƒ¨ä¼šæœ‰è™šæ‹ŸçŽ¯å¢ƒçš„æ ‡è¯†åç§°ã€‚æœ‰è¿™ä¸ªæ ‡è¯†ï¼Œè¯´æ˜Žå·²ç»è¿›å…¥è™šæ‹ŸçŽ¯å¢ƒã€‚ .. image:: http://image.iswbm.com/20190612211925.png .. code:: python # 在当å‰è™šæ‹ŸçŽ¯å¢ƒä¸è¿è¡Œ $ pipenv run python # 进入交互å¼,跟直接执行 python ä¸€æ · $ pipenv run python 文件å # è¿è¡Œæ–‡ä»¶ $ pipenv run pip ... # è¿è¡Œpip 5. è™šæ‹ŸçŽ¯å¢ƒåŒ…ç®¡ç† ----------------- .. code:: shell # 安装一个本地包(setup.py)到虚拟环境(Pipfile) $ pipenv install -e . # 安装ã€å¸è½½æ¨¡å— $ pipenv install requests $ pipenv uninstall requests $ pipenv uninstall --all # å¸è½½å…¨éƒ¨åŒ… $ pipenv install -r path/to/requirements.txt # 安装所有ä¾èµ– $ pipenv install --dev # 更新包 $ pipenv update # 更新所有包 $ pipenv update --outdated # 打å°æ‰€æœ‰è¦æ›´æ–°çš„包 $ pipenv update <包å> # 更新指定的包 # å°†Pipfileå’ŒPipfile.lock文件里é¢çš„包导出为requirements.txt文件 $ pipenv run pip freeze # 相当于pipenv run pip freeze >requirements.txt $ pipenv lock -r > requirements.txt $ pipenv lock -r --dev # è‹¥åªæƒ³å¯¼å‡ºå¼€å‘用的包 6. 其他命令 ----------- .. code:: shell # 创建一个包å«é¢„å‘布的é”文件: $ pipenv lock --pre # 打å°æ‰€æœ‰åŒ…çš„ä¾èµ–关系图 $ pipenv graph # 检查安全æ¼æ´ž $ pipenv check 打å°è¯¥è™šæ‹ŸçŽ¯å¢ƒä¸‹æ‰€æœ‰åŒ…çš„ä¾èµ–关系图 .. image:: http://image.iswbm.com/20190614000336.png 有的python第三方包旧版本会有安全æ¼æ´žï¼Œä½¿ç”¨ pipenv check å¯ä»¥æ£€æŸ¥å®‰å…¨æ¼æ´žã€‚ .. image:: http://image.iswbm.com/20190612215924.png