什么是pipenv
Pipenv is a tool that aims to bring the best of all packaging worlds (bundler, composer, npm, cargo, yarn, etc.) to the Python world.
Pipenv是pip与virtualenv的结合,可以自动创建python虚拟环境,方便开发和管理依赖。
当我们使用virtualenv来创建虚拟环境的时候,我们需要制定一个目录,通常的做法是放在当前项目的env目录下,然后source env/bin/activate
。
但我们并不希望将env提交到git仓库中,那么其他人想要开发就需要重新生成这个目录,每次开发都需要执行一次source
。pipenv为我们解决了这样的问题,它可以让你忽略virtualenv的存在,只需要使用pipenv的命令就可以拥有方便的开发环境。
pipenv自动创建virtualenv的convention是什么?
在mac中可以看到pipenv生成的virtualenv默认位于像这样的目录中
$HOME/.local/share/virtualenvs/projectname-hashcode/
那么后面的hashcode
究竟是如何生成的呢?我阅读了下pipenv源码研究了下。
在pipenv/project.py
中有一个方法来获得virtualenv的location
1 | @property |
当选择在项目内生成venv时,目录名是.venv
,默认会使用计算的self.virtualenv_name
1 |
|
这就是pipenv计算hash的方式,可以看到用来生成hash的是self.pipfile_location
,让我们来确认下这个的值会是什么?
1 |
|
在pipenv/patched/pipfile/api.py
中找到了find
方法
1 | class Pipfile(object): |
location将会是Pipfile的absolute path,也就是项目的根目录的绝对路径,pipenv使用这个绝对路径来生成一个hash避免同名项目目录的冲突。