Day 09 pipenv

Pipenv 是什麽呢?

想像一下,当你现在是个专业的工程师,身上背着十几个不同类型的专案(好啦,有点夸张了),每个专案都需要用到不同的 Python 版本、套件,这时候如果没有好好的管理的话,你电脑里面应该已经装了一堆套件,你的环境一片大混乱,A 专案要用到 X 套件的 3.9 版本,B 专案又要用到 X 套件的 2.8 版本,这时候不可能一下安装一下移除。

这时候你一定想要每个专案都有一个虚拟的环境,每个虚拟环境之间互不影响,这样就可以拥有一个乾净的环境可以开发,而这个东西就是 pipenv ,而 pipenv 的位置正常会与专案摆放在一起。因为如果其他人也要 clone 整个专案时,可以直接根据 pipenv 所创建的套件管理的档案 Pipfile 直接重建一个虚拟环境,不需要一个一个找需要装什麽套件了。

安装pipenv

那麽 pipenv 要怎麽安装呢?

很简单,在 CMD 中输入

$ pip install pipenv

输入完後按下 Enter,等待执行完就安装好了。

使用pipenv

那麽 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

如果是其他人的专案,应该有机会看到 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

如果有较机密的资讯不方便放在程序里面,可以使用 .env 档储存在专案根目录(在哪里?就是专案资料夹进去的位置,例如前面的 D:/ithome/ 就是), pipenv runpipenv shell 会自动读取,并且可以透过 os.environ['<key>'] 获取。大概写法长这样:

SECRET_KEY = b'\x95\xb1\xb4r\xacz\xb6\xe3\xff\xe8\xdb\xd24\x16\xcc.'

那麽就大概这样,虚拟环境弄好可以避免掉因为版本之类的问题而产生的隐藏 Bug 。

大家掰~掰~


<<:  # Day9--老爸,我可以继承你的家产,但我不想长得太像你

>>:  Component 鬼牌(二): 看网址决定 Component

Day21-27. Remove Element

27. Remove Element Given an integer array nums and...

DAY4 - 堆

昨天介绍完两个排序法,今天介绍资料结构,也会配上例题(堆在刷题的时候很常用) Heap 每个node...

Day9 初探CFS 下

前言 昨天讲到了利用两个查表的方式来计算,会比直接计算来的节省运算资源,今天就来看看到底要vrunt...

【Day 11】- 再次创造 Ghost Process,这次找不到了吧哈哈(基於修改 PspCidTable 隐藏的 Rookit)

Agenda 资安宣言 测试环境与工具 学习目标 前情提要 技术原理与程序码 References ...

#Day20--那些年,我们一起犯的傻

这篇会是一个中场休息,但主要会分享的是,我在踏入实作的那一瞬间,对於写程序所产生的不良习惯,希望可以...