之前在开发时一直使用 conda 使用作为虚拟环境管理工具,但有时候会经常会临时性的需要一个虚拟环境,如果使用 conda create 创建一个新环境,耗时不说,有时候还忘了删除,最后系统里一堆的虚拟环境。偶然发现 pipenv 后试用了一下,感觉它的工作流相比之前虚拟环境环境加 requirements.txt 的方式更加简单方便。安装pipenv 最好和 Python3 一起使用最简单的方式是通过 pip 安装pip3 install pipenv如果是 mac 用户也可以通过 Homebrew 安装brew install pipenv如果没有安装 pip 可以通过以下方式安装https://raw.githubusercontent.com/kennethreitz/pipenv/master/get-pipenv.py | python使用创建新项目mkdir myprojectpipenv install这会在 myproject 文件下创建 Pipfile 和 Pipfile.lock 文件,同时创建虚拟环境虚拟环境名称为 pipenv 加项目路径哈希值,如 pipenv-7BgKv-oXll-rw-r–r– 1 rookie rookie 138 4月 20 20:24 Pipfile-rw-r–r– 1 rookie rookie 453 4月 20 20:24 Pipfile.lock虚拟机环境默认位于 ~/.local/share/virtualenvs/,由于 pipenv 通过路径名哈希值与虚拟环境建立映射关系,因此如果移动项目会导致虚拟环境不可用。可以通过在 .bashrc 添加export PIPENV_VENV_IN_PROJECT=1 让 pipenv 在项目文件中创建虚拟环境,这时候虚拟环境位于 myproject/.venv 文件夹下。如果项删除虚拟环境,在项目顶层目录下运行pipenv –rm如果要指定 Python 版本,可以通过 –python 完成,如我要安装 python3.7 的虚拟环境pipenv –python 3.7配置文件# cat Pipfile[[source]]name = “pypi"url = “https://pypi.org/simple"verify_ssl = true[dev-packages][packages][requires]python_version = “3.6”[[source]] 模块指定了 pip 源位置,通常国内 pip 源加快下载速度[[source]]name = “tuna"url = “https://pypi.tuna.tsinghua.edu.cn/simple/"verify_ssl = true[[source]]name = “pypi"url = “https://pypi.org/simple"verify_ssl = true[dev-packages][packages][requires]python_version = “3.6"安装和卸载 packages你可以编辑 packages, 添加项目需要的 Python 库,如 requests=’**’,甚至可以指定不同平台下的包配置,详细配置参考 Advanced Usage of Pipenv不过你可以通过pipenv install requests来安装,pipenv 将会自动更新 Pipfile 和 Pipfile.lock。[dev-packages] 则是一些开发依赖但不是项目依赖包的存放目录,如 pylint 等 pep8 检查工具可以在安装时指定 pipenv install –dev将某个包声明为 dev-package卸载 package 也很简单pip uninstall如果通过 pipenv 命令安装和卸载 package,安装或卸载完成后还会更新 Pipfile.lock 文件,有时候会卡在这个步骤。通常可以 ctrl+c 强制推出,删除 Pipfile.lock, 然后pipenv lock重新生成该文件进入和退出虚拟环境进入虚拟环境cd myprojectpipenv shell退出虚拟环境pipenv exit高级用法有时候某些 package 需要指定特定的 pip 源,可以通过如下方式指定,非常简便[[source]]url = “https://pypi.python.org/simple"verify_ssl = truename = “pypi”[[source]]url = “http://pypi.home.kennethreitz.org/simple"verify_ssl = falsename = “home”[dev-packages][packages]requests = {version=””, index=“home”}maya = {version=””, index=“pypi”}records = “*“有时候需要生成 requirements.txt 文件pipenv lock -r如果只需要生成 dev-pakcages 列表,也很简单pipenv lock -r –dev自动载入环境变量文件。如果 .env 文件在项目根目录下,pipenv shell 和 pipenv run 将会自动载入文件中的环境变量。$ cat .envHELLO=WORLD$ pipenv run pythonLoading .env environment variables…Python 2.7.13 (default, Jul 18 2017, 09:17:00)[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwinType “help”, “copyright”, “credits” or “license” for more information.>>> import os>>> os.environ[‘HELLO’]‘WORLD’pipenv 还支持自定义命令,这对于某些开发过程中经常使用的命令来说非常方便。在 Pipfile 中添加 [scripts][scripts]printspam = “python -c "print(‘I am a silly example, no one would need to do this’)"“通过 pipenv run <custom_command> 即可运行自定义命令,如pipenv run echospam “indeed"I am really a very silly example indeed更多高级用户可以参考 官方文档最后欢迎关注我的 Blog-PrivateRookie