我们先说说virtualenv怎么用
- 首先,我们用pip安装virtualenv:
$ pip3 install virtualenv
- 然后,
第一步,创建目录(并且移到当前项目目录下):
$ mkdir myproject
$ cd myproject/
$
- 第二步,创建一个独立的Python运行环境,命名为venv:
$ virtualenv --no-site-packages venv
Using base prefix '/usr/local/.../Python.framework/Versions/3.4'
New python executable in venv/bin/python3.4
Also creating executable in venv/bin/python
Installing setuptools, pip, wheel...done.
命令virtualenv
就可以创建一个独立的Python运行环境。
参数--no-site-packages
,使已经安装到系统Python环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的Python运行环境。
- 新建的Python环境被放到当前目录下的venv目录。有了venv这个Python环境,可以用source进入该环境:
Mac:myproject michael$ source venv/bin/activate
(venv)Mac:myproject michael$
注意到命令提示符变了,有个(venv)前缀,表示当前环境是一个名为venv的Python环境。
- 下面正常安装各种第三方包,并运行python命令:
(venv)Mac:myproject michael$ pip install jinja2
...
Successfully installed jinja2-2.7.3 markupsafe-0.23
(venv)Mac:myproject michael$ python myapp.py
...
-
在venv环境下,用pip安装的包都被安装到venv这个环境下,系统Python环境不受任何影响。也就是说,venv环境是专门针对myproject这个应用创建的。
-
退出当前的venv环境,使用
deactivate
命令:
(venv)Mac:myproject michael$ deactivate
Mac:myproject michael$
- 此时就回到了正常的环境,现在pip或python均是在系统Python环境下执行。
完全可以针对每个应用创建独立的Python运行环境,这样就可以对每个应用的Python环境进行隔离。
virtualenv是如何创建“独立”的Python运行环境的呢?原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境。
这里说pipenv
在Python打包的上下文中,似乎Pipfile / Pipfile.lock旨在替换requirements.txt。
Pipenv是一个包和虚拟环境管理工具,它使用Pipfile和Pipfile.lock文件来实现这些目标。具体来说他是pip、pipfile、virtualenv的结合体。让包安装、包依赖管理、和虚拟环境管理更加方便,
Pipenv以一种默认的标准方式为您处理虚拟环境(不再需要激活和停用)。下面是一些帮助您入门的基础知识,请访问pipenv网站了解更多信息。
入门
使用pip安装pipenv(会自动安装在我们的python的bin目录下)
$ pip install pipenv
用下面的命令检查pipenv是否已经安装:
$ pipenv --version
虚拟环境通常需要用Virtualenv来创建,因为pipenv集成了virtualenv,我们就使用pipenv更方便的管理虚拟环境和环境依赖包
在自己想创建的位置创建一个helloflask项目目录(示例文件夹)
- 首先要确保我们当前的工作目录在示例程序项目(helloflask)的根目录
- 然后使用
pipenv install
命令为当前的项目创建虚拟环境
如果想指定创建的虚拟环境的Python版本,可以使用下面的命令。
pipenv --python 3.6 #指定使用Python3.6的虚拟环境
pipenv --two #使用系统的Python2在创建虚拟环境
pipenv --three #使用系统的Python3在创建虚拟环境
#注意:以上三个参数只能单独使用。它们还具有破坏性,会删除当前的虚拟环境,然后用适当版本的虚拟环境替代。当给定了一个Python版本的时候,Pipenv会自动扫描系统中能够匹配给定的Python版本的Python解释器,没指定版本时,使用系统默认的Python版本。
- 执行完命令,项目文件夹会生成两个文件,Pipfile和Pipfile.lock。(如果命令执行前项目目录中不存在 Pipfile 文件,该命令将会创建一个 Pipfile 文件。如果已经有Pipfile 文件已经存在,则会根据这个Pipfile生成虚拟环境。)
默认情况下,pipenv会统一管理所有虚拟环境,在Linux或macOS系统中,由上图运行可得,会在 ~/.local/share/virtualenvs/
目录下创建,在windows中,虚拟环境文件夹会在C:\Users\Administrator\.virtualenvs\
目录下创建。虚拟环境目录名称的形式为“当前项目目录名+一串随机字符”,比如helloflask-1RVeSQmm
如果你想在项目目录内创建虚拟环境文件夹,可以设置环境变量PIPENV_VENV_IN_PROJECT,这时名为.venv的虚拟环境目录将在项目根目录被创建。
Profile内容解析
打开Profile文件,可以看到如下内容。
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
[requires]
python_version = "3.7"
source
用来设置仓库地址,即从哪下载虚拟环境所需要的包
packages
用来指定项目依赖的包,即你安装了的包
dev-packages
用来指定开发环境需要的包,这类包只用于开发过程,不用与生产环境,比如单元测试相关的包,只在开发阶段有用,这样分开便于管理。
requires
中指定目标Python版本
Pipfile.lock文件
该Pipfile.lock是用来规定的基础上,目前在包装Pipfile,应该使用那些特定版本,避免依赖于对方破坏你的项目的依赖关系树自动升级包的风险。该文件用来保证包的完整性。记住,任何情况下不要手动修改该文件!
您可以使用$ pipenv lock
锁定当前安装的软件包
项目提交时,可将Pipfile
文件和Pipfile.lock
文件一并提交,给其他开发人员克隆下载,他们可以根据此Pipfile文件运行命令pipenv install
生成自己的虚拟环境。
一个好消息是,PyCharm2018.2开始支持pipenv了。我们也可以在创建项目时使用Pipenv,如图
4. 在单独使用Virtualenv时,我们通常显式地激活虚拟环境,在pipenv中,可以使用pipenv shell
命令显式地激活虚拟环境
5. pipenv会启动一个激活虚拟环境的子shell,现在你会发现命令行提示符前添加了虚拟环境名“(虚拟环境名称)$”(我这里只显示了个项目名称)
6. 这说明我们已经成功激活了虚拟环境,现在你的所有命令都会在虚拟环境中执行,当你需要退出虚拟环境时,使用exit
命令
退出虚拟环境后,所有命令都是在本地的python解释器上执行了
7.除了显式地激活虚拟环境,pipenv还提供了pipenv run
命令,这个命令允许你不显式地激活虚拟环境,即可在当前项目的虚拟环境中执行命令,比如:
$ pipenv run python hello.py
这里使用的是虚拟环境中的python解释器,而不是全局的python解释器。
总结:
pipenv install 创建虚拟环境
pipenv shell 进入虚拟环境(如果不存在,则创建并进入虚拟环境)
pipenv install flask 安装模块
pipenv uninstall flask 卸载模块
pipenv graph 查看模块之间的依赖关系
pip list 查看虚拟环境所有模块
exit 退出虚拟环境