Pipenv 是什麽呢?
想像一下,当你现在是个专业的工程师,身上背着十几个不同类型的专案(好啦,有点夸张了),每个专案都需要用到不同的 Python 版本、套件,这时候如果没有好好的管理的话,你电脑里面应该已经装了一堆套件,你的环境一片大混乱,A 专案要用到 X 套件的 3.9 版本,B 专案又要用到 X 套件的 2.8 版本,这时候不可能一下安装一下移除。
这时候你一定想要每个专案都有一个虚拟的环境,每个虚拟环境之间互不影响,这样就可以拥有一个乾净的环境可以开发,而这个东西就是 pipenv ,而 pipenv 的位置正常会与专案摆放在一起。因为如果其他人也要 clone 整个专案时,可以直接根据 pipenv 所创建的套件管理的档案 Pipfile
直接重建一个虚拟环境,不需要一个一个找需要装什麽套件了。
那麽 pipenv 要怎麽安装呢?
很简单,在 CMD
中输入
$ pip install pipenv
输入完後按下 Enter
,等待执行完就安装好了。
那麽 pipenv 要怎麽使用呢?
假设现在要开发一个新的专案,专案在 D:/ithome/
里面,需要建立一个虚拟环境,首先要打开 CMD
切换到 D:/ithome/
(也可以透过档案总管进到资料夹後直接在上方那条输入 CMD
,就可以直接进去指定的位置了)。
进去後会长这样,注意前面的路径要确认是想要建立的位置,然後输入
# 建立 Python 3 的环境
$ pipenv --three
# 建立 Python 2 的环境
$ pipenv --two
# 如果要指定版本的话用这行,前提是要有装指定版本
$ pipenv --python 3.6
执行完後会长这样
此时的档案结构应该会像这样
ithome
└── Pipfile
如果要在虚拟环境安装套件,例如 requests
套件,就输入
$ pipenv install requests
输入完後按下 Enter
,等待执行完就安装好了。如果要同时安装多个不用一直打,只要加个空格继续输入就好了,例如:
$ pipenv install requests beautifulsoup4
执行完後会多出一个 Pipfile.lock
的档案是正常的,此时的档案结构应该会像这样。
ithome
├── Pipfile
└── Pipfile.lock
如果要指定版本,就在後面加个 ==<version number>
,例如:
$ pipenv install requests==2.13.0
输入以下指令就可以执行 Python 档案了。
$ pipenv run python <file>
或是直接进入虚拟环境,然後就可以普通的执行了。
# 进入虚拟环境
$ pipenv shell
# 执行
$ python <file>
# 退出虚拟环境
$ exit
如果是其他人的专案,应该有机会看到 requirements.txt
这个档案,这个是纪录了需要安装什麽套件的记录档(我也不太知道如何形容,所以姑且称呼它为记录档),在建立虚拟环境时( pipenv --three
),如果专案里面有 requirements.txt
会自动安装好里面的套件,如果需要产生 requirements.txt
的档案就输入
$ pipenv lock -r
如果建好环境後才找到 requirements.txt
(没安装到的意思),可以透过以下指令安装
$ pipenv install -r requirements.txt
# 移除虚拟环境(Pipfile不会跟着删除喔)
$ pipenv --rm
# 显示虚拟环境信息
$ pipenv --venv
# 显示虚拟环境中 Python 解释器信息
$ pipenv --py
# 查看目前安装的库及其版本
$ pipenv graph
# 检查安全漏洞
$ pipenv check
如果有较机密的资讯不方便放在程序里面,可以使用 .env 档储存在专案根目录(在哪里?就是专案资料夹进去的位置,例如前面的 D:/ithome/
就是), pipenv run
或 pipenv shell
会自动读取,并且可以透过 os.environ['<key>']
获取。大概写法长这样:
SECRET_KEY = b'\x95\xb1\xb4r\xacz\xb6\xe3\xff\xe8\xdb\xd24\x16\xcc.'
那麽就大概这样,虚拟环境弄好可以避免掉因为版本之类的问题而产生的隐藏 Bug 。
大家掰~掰~
<<: # Day9--老爸,我可以继承你的家产,但我不想长得太像你
>>: Component 鬼牌(二): 看网址决定 Component
27. Remove Element Given an integer array nums and...
昨天介绍完两个排序法,今天介绍资料结构,也会配上例题(堆在刷题的时候很常用) Heap 每个node...
前言 昨天讲到了利用两个查表的方式来计算,会比直接计算来的节省运算资源,今天就来看看到底要vrunt...
Agenda 资安宣言 测试环境与工具 学习目标 前情提要 技术原理与程序码 References ...
这篇会是一个中场休息,但主要会分享的是,我在踏入实作的那一瞬间,对於写程序所产生的不良习惯,希望可以...