使用pipenv管理python虚拟环境
前言
近期的项目中,我开始尝试着从virtualenv管理python虚拟环境,切换到用pipenv来管理。
经过一段时间的使用,着实觉得pipenv使用的更加顺手,更加的便捷。这当然也延续了 Kenneth 大神一贯的项目作风-- For Humans
。
再配合上 autoenv
(自动激活虚拟环境的工具),更加的Perfect!
pipenv + autoenv 的使用
安装
我们通过pip
即可快速安装
pip install autoenv # 安装 autoenv
pip install pipenv # 安装 pipenv
注:这里简单略过安装部分,网上大把的教程有教如何在各个系统环境下安装,不是本文的主要内容
pipenv 的使用
前提:假设我们在用户目录 ~
下有一个项目叫 my_project/
我们首先进入项目目录:
cd ~/my_project
进入项目以后,如果直接执行 pipenv install
,pipenv
会根据系统默认的python版本,来创建虚拟环境。(前提是本项目中不存在已有的Pipfile
,如果有,它会去根据Pipfile
安装对应的版本和Pipfile
中记录的依赖库)。
但是我们一般会创建虚拟环境的时候指定python版本,就需要配上 --two
或者--three
这个参数:
- --two 使用python2来创建虚拟环境
- --three 使用python3来创建虚拟环境
pipenv install --three # 需要确保系统中存在python3版本
下面是执行后的输出信息:
Creating a virtualenv for this project…
Using /usr/local/bin/python3 to create virtualenv…
# 这里可以看到继承自哪个python版本
⠋Running virtualenv with interpreter /usr/local/bin/python3 Using base prefix '/usr/local'
New python executable in /root/.local/share/virtualenvs/my_project-dhpIKgdN/bin/python3
Also creating executable in /root/.local/share/virtualenvs/my_project-dhpIKgdN/bin/python
Installing setuptools, pip, wheel...done.
# 这里可以看到虚拟环境安装的位置
Virtualenv location: /root/.local/share/virtualenvs/my_project-dhpIKgdN
Creating a Pipfile for this project…
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (625834)!
Installing dependencies from Pipfile.lock (625834)…
▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00
To activate this project's virtualenv, run the following:
$ pipenv shell # 要激活该虚拟环境,执行这条指令
这将在项目目录中创建两个新文件 Pipfile
和 Pipfile.lock
Pipfile 存放着当前虚拟环境的配置信息,包含python版本,pypi源,以及项目安装的依赖库。
pipenv
根据这个来寻找项目的根目录。Pipfile
文件是TOML
格式而不是requirements.txt
那样的纯文本。[1]- 一个项目对应一个 Pipfile,支持开发环境与正式环境区分。默认提供
default
和development
区分 - Pipfile.lock 顾名思义,这个文件时对于
Pipfile
的一个锁定。支持锁定项目不同的版本所依赖的环境.
激活虚拟环境, 在当前目录执行下面的指令即可:
pipenv shell
创建 .env 文件
如果你和我一样想要使用 autoenv
来自动激活虚拟环境,就在当前项目的根目录下面,创建一个名为 .env 的文件,将 pipenv shell
写进去。具体使用在后面说明。
如果没有这个需求,可以忽略这一段话。
更新 pypi源来提高依赖库安装的速度
在使用pipenv的时候,常常会在安装的时候,一直卡在了 Locking
这里,通过加上 -v
参数,可以看到安装过程中的步骤信息,卡在了下载那里,这时应该可以意识到是因为网络的原因,pipenv创建的 Pipfile
中默认的pypi源是python官方的 https://pypi.python.org/simple。我们国内用户访问下载的时候会很慢。
所以,我一般会在创建好Pipfile以后,修改到文件中 source
块下的 url
字段,设置为国内的 pypi 源就好了,我推荐的是清华的pypi源,具体设置如下:
备注:我还没有找到如何修改能在创建时就设好的方法,应该修改源码是可以的,但这样不尊重源码,毕竟高墙是我们自己筑起的,如果有好的方法,您不妨在评论中告诉我一下
[[source]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
verify_ssl = true
name = "pypi"
管理Python依赖关系
Pipfile
包含关于项目的依赖包的信息,并取代通常在Python项目中使用的 requirements.txt
文件。 如果你之前的项目中存在requirements.txt
文件,pipenv
可以很轻松的安装 requirements.txt
中的依赖包。
pipenv install -r requirements.txt
# 或者
pipenv install --requirements requirements.txt
可以通过更新 Pipfile.lock
来冻结软件包名称及其版本以及其自己的依赖关系的列表。 这时需要使用lock
关键字来完成,
pipenv lock
如果我们想要在虚拟环境中安装某个指定的库,比如 requests
, 直接在 install 后面跟上就可以了:
pipenv install requests
如果想查看当前环境中第三方包之间的依赖关系,可以通过 pipenv graph
来查看:
[root@VM_27_243_centos my_project]# pipenv graph
requests==2.18.4
- certifi [required: >=2017.4.17, installed: 2018.1.18]
- chardet [required: <3.1.0,>=3.0.2, installed: 3.0.4]
- idna [required: <2.7,>=2.5, installed: 2.6]
- urllib3 [required: <1.23,>=1.21.1, installed: 1.22]
从输出可以看出,我们按照的 requests
包,依赖于其他的四个包,pipenv 帮你自动管理着这些包这件的依赖关系、。我们可以看到 requests
依赖于 urllib3
, 假设我们再安装一个包,并且这个包也同样依赖着 urllib3
,当我们要卸载掉 requests
的时候,pipenv会自动检测这些包之间的依赖关系,因为 urllib3
依旧有其他包依赖,所以会保留,只会卸载掉其他的依赖库。(卸载的指令是pipenv uninstall
)
退出虚拟环境
任何时候想退出虚拟环境,只需一条简单的 exit
指令即可
exit
autoenv 的使用
安装好 autoenv
以后,autoenv
可以在进入项目之后自动检测项目目录的 .env
文件激活项目所需的虚拟环境,这样能够保证每次切换不同项目的时候,都能自动进入相应项目所依赖的虚拟环境。
要实现 autoenv
自动识别项目目录中的 .env
文件,需要将 autoenv
的激活脚本添加到终端的 profile
中:
# bash 的话,执行这一条指令
echo "source `which activate.sh`" >> ~/.bashrc
# zsh 的话,执行这一条指令
echo "source `which activate.sh`" >> ~/.zshrc
这样就配置好了 autoenv
了,当 cd
到项目目录中后,就会自动激活虚拟环境了,如果是第一次,系统会提示你确认是否以后都自动激活,输入 y
,然后回车确认即可。
* pipenv 详细参数和指令说明[2][3]
pipenv
pipenv [OPTIONS] COMMAND [ARGS]...
Options:
--upgrade
更新pipenv&pip到最新版本
--where
输出项目根目录信息
--venv
输出虚拟环境信息
--py
输出python解释器的信息
--envs
输出环境变量信息
--rm
删除当前虚拟环境
--bare
精简输出
--man
显示帮助手册页面
--three, --two
使用python3/2创建虚拟环境
--python \<python>
指定应该使用哪个版本的Python虚拟环境
--site-packages
为虚拟环境启用site-packages
--version
显示版本并退出
check
检查装的包的安全性
pipenv check [OPTIONS] [ARGS]...
Options:
--three, --two
使用python3/2创建虚拟环境
--python \<python>
指定应该使用哪个版本的Python虚拟环境
--system
使用系统的Python
--unused \<unused>
指定项目路径,显示可能未使用的依赖关系。
clean
卸载未在pipfile.lock中指定的所有软件包
pipenv clean [OPTIONS]
Options:
-v,--verbose
详细信息模式
--three, --two
使用python3/2创建虚拟环境
--python \<python>
指定应该使用哪个版本的Python虚拟环境
--dry-run
只输出不需要的包
graph
显示当前安装的依赖关系图信息
pipenv graph [OPTIONS]
Options:
--bare
最小的输出 (备注:这个不太理解,尝试过指定了这个参数会输出所有的包,不指定却只输出pip安装的包,感觉和官方注释相反)
--json
输出JSON格式
--reverse
逆转依赖关系图
install
安装参数提供的软件包并将它们添加到pipfile,如果没有提供参数,就安装所有软件包。
pipenv install [OPTIONS] [PACKAGE_NAME] [MORE_PACKAGES]...
Options:
-d, --dev
在[dev-packages]中安装软件包
--three, --two
使用python3/2创建虚拟环境
--python \<python>
指定应该使用哪个版本的Python虚拟环境
--system
系统pip管理
-r, --requirements \<requirements>
导入一个requirements.txt文件。
-c, --code \<code>
从代码库导入
-v, --verbose
详细信息模式
--ignore-pipfile
在安装时忽略pipfile,使用pipfile.lock
--sequential
一次只安装一个依赖项,而不是同时安装。
--skip-lock
相反,在安装时忽略锁定机制 - 使用pipfile
--deploy
如果pipfile.lock过时或python版本错误则中止
--pre
允许预发布
--keep-outdated
防止在pipfile.lock中更新过时的依赖关系
--selective-upgrade
更新指定的包
Arguments:
PACKAGE_NAME
包名(可选参数)
MORE_PACKAGES
多个包(可选参数)
lock
生成pipfile.lock
pipenv lock [OPTIONS]
Options:
-v,--verbose
详细信息模式
--three, --two
使用python3/2创建虚拟环境
--python \<python>
指定应该使用哪个版本的Python虚拟环境
-r, --requirements
生成与requirements.txt兼容的lock文件
-d, --dev
生成与requirements.txt兼容的开发模式依赖项
--clear
清除依赖关系缓存
--pre
允许预发布
--keep-outdated
防止在pipfile.lock中更新过时的依赖关系
open
在编辑器中查看指定的模块
pipenv open [OPTIONS] MODULE
Options:
--three, --two
使用python3/2创建虚拟环境
--python \<python>
指定应该使用哪个版本的Python虚拟环境
MODULE
模块名(必填项)
run
运行一个虚拟环境中的命令(就是在未激活虚拟环境时可以直接用虚拟环境的python执行)
pipenv run [OPTIONS] COMMAND [ARGS]...
Options:
--three, --two
使用python3/2创建虚拟环境
--python \<python>
指定应该使用哪个版本的Python虚拟环境
Arguments
COMMAND
命令(必填项)
ARGS
参数(可选项)
shell
在虚拟环境中产生一个shell(就是激活虚拟环境)
pipenv shell [OPTIONS] [SHELL_ARGS]...
Options:
--three, --two
使用python3/2创建虚拟环境
--python \<python>
指定应该使用哪个版本的Python虚拟环境
--fancy
以好看的模式运行shell(用于如果优化过配置的shell)
--anyway
产生一个子shell,即使已经在虚拟环境中
这个比较很少用,但就是虚拟环境中的虚拟环境,执行后在终端前面看到两个虚拟环境的括号:
(my_project-dhpIKgdN) (my_project-dhpIKgdN) [root@centos my_project]#
Arguments:
SHELL_ARGS
可选项
sync
安装所有在pipfile.lock中指定的软件包
pipenv sync [OPTIONS]
Options:
-v,--verbose
详细信息模式
-d, --dev
另外在[dev-packages]中安装软件包
--three, --two
使用python3/2创建虚拟环境
--python \<python>
指定应该使用哪个版本的Python虚拟环境
--bare
精简输出
--clear
清除依赖关系缓存
--sequential
一次只安装一个依赖项,而不是同时安装
uninstall
卸载指定的软件包并将其从pipfile中删除
pipenv uninstall [OPTIONS] [PACKAGE_NAME] [MORE_PACKAGES]...
Options:
-v,--verbose
详细信息模式
--three, --two
使用python3/2创建虚拟环境
--python \<python>
指定应该使用哪个版本的Python虚拟环境
--system
系统的pip管理
--lock
卸载之后锁定
--all-dev
从[dev-packages]中卸载所有软件包
--all
从虚拟环境中清除所有包。但不会编辑pipfile
--keep-outdated
防止在pipfile.lock中更新过时的依赖关系
Arguments:
PACKAGE_NAME
包名(可选参数)
MORE_PACKAGES
多个包(可选参数)
update
更新指定包
pipenv update [OPTIONS] [PACKAGES]...
Options:
-d, --dev
在[dev-packages]中安装软件包
--three, --two
使用python3/2创建虚拟环境
--python \<python>
指定应该使用哪个版本的Python虚拟环境
-v, --verbose
详细信息模式
--clear
清除依赖关系缓存
--bare
精简输出
--pre
允许预发布
--keep-outdated
防止在pipfile.lock中更新过时的依赖关系
--sequential
一次只安装一个依赖项,而不是同时安装
--outdated
列出过时的依赖关系
--dry-run
列出过时的依赖关系
使用pipenv管理python虚拟环境的更多相关文章
- 用pipenv管理python虚拟环境
python的虚拟环境可以为项目创建一个独立的环境,能够解决使用不同版本依赖给项目带来冲突的麻烦.创建虚拟环境的方式有很多种,pipenv会自动帮你管理虚拟环境和依赖文件,并且提供了一系列命令和选项来 ...
- Pipenv和Python虚拟环境
Pipenv & 虚拟环境 本教程将引导您完成安装和使用 Python 包. 它将向您展示如何安装和使用必要的工具,并就最佳做法做出强烈推荐.请记住, Python 用于许多不同的目的.准确地 ...
- 使用pipenv管理python项目
入门 首先使用pip安装Pipenv及其依赖项, pip install pipenv 1 然后将目录更改为包含你的Python项目的文件夹,并启动Pipenv, cd my_project pipe ...
- pipenv管理python开发环境
简介 简单说,pipenv就是把pip和virtualenv包装起来的一个便携工具. 它不会在你的项目文件夹里生成一大堆东西,只有两个文本文件: Pipfile, 简明地显示项目环境和依赖包. Pip ...
- 管理python虚拟环境的工具virtuelenvwrapper
virtuelenvwrapper出现的原因 virtualenv 的一个最大的缺点就是: 每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就 ...
- 使用virtualenvwrapper模块管理python虚拟环境
1.pip安装virtualenvwrapper [root@localhost ~]# pip install virtualenvwrapper # 安装virtualenvwrapper [ro ...
- 使用conda管理python环境和包
操作系统:CentOS7使用virtualenv管理python虚拟环境virtualenv是一款轻量级第三方虚拟环境管理工具,不像Anaconda大小达上百M,virtualenv大小只有10M左右 ...
- Python虚拟环境和包管理工具Pipenv的使用详解--看完这一篇就够了
前言 Python虚拟环境是一个虚拟化,从电脑独立开辟出来的环境.在这个虚拟环境中,我们可以pip安装各个项目不同的依赖包,从全局中隔离出来,利于管理. 传统的Python虚拟环境有virtualen ...
- Pipenv——最好用的python虚拟环境和包管理工具
pipenv 是Kenneth Reitz大神的作品,能够有效管理Python多个环境,各种包.过去我们一般用virtualenv搭建虚拟环境,管理python版本,但是跨平台的使用不太一致,且有时候 ...
随机推荐
- Informatica报错“表或视图不存在”的某种原因
软件版本:9.6.1 背景:测试将OLTP数据库的用户信息表(CUST_INFO)抽取到DW库(DW_CUST_INFO) 问题:工作流启动后,报错RR_4035,并告知表或视图不存在 分析:在导入源 ...
- 网络编程—【自己动手】用C语言写一个基于服务器和客户端(TCP)!
如果想要自己写一个服务器和客户端,我们需要掌握一定的网络编程技术,个人认为,网络编程中最关键的就是这个东西--socket(套接字). socket(套接字):简单来讲,socket就是用于描述IP地 ...
- CVE-2010-2883-CoolType.dll缓冲区溢出漏洞分析
前言 此漏洞是根据泉哥的<漏洞战争>来学习分析的,网上已有大量分析文章在此只是做一个独立的分析记录. 复现环境 操作系统 -> Windows XP Sp3 软件版本 -> A ...
- spring boot:swagger3文档展示分页和分栏的列表数据(swagger 3.0.0 / spring boot 2.3.3)
一,什么情况下需要展示分页和分栏的数据的文档? 分页时,页面上展示的是同一类型的列表的数据,如图: 分栏时,每行都是一个列表,而且展示的数据类型也可能不同 这也是两种常用的数据返回形式 说明:刘宏缔的 ...
- centos8平台使用stress做压力测试
一,安装stress: 说明:el8的源里面还没有,先用el7的rpm包 [root@centos8 source]# wget https://download-ib01.fedoraproject ...
- LinkageSel无限级联动下拉菜单
http://files.cnblogs.com/files/chenghu/LinkageSel-master.zip
- Helium文档14-WebUI自动化-hover鼠标悬浮
前言 hover 实现功能是将鼠标光标悬停在给定的元素或点上 入参介绍 element def hover(element): """ :param element: T ...
- vscode自定义插件安装位置
vscode的插件默认安装位置在: C:\Users\用户名\.vscode\extensions 如果不想将插件安装在C盘,可以自定义一个目标位置存储,使用如下: 右键快捷方式,在原本的目标后加入- ...
- MFiX做增量编译的时候不要删掉*.mod和*.inc文件
其实之前发现了这个问题,但是没有记录,过了好久又忘了.具体问题是,在做增量编译的之前,都会习惯性地删除多余文件再编译,随手就把*.mod和*.inc这类中间文件也删了,结果修改完代码执行 make - ...
- MAP;MLE
判别学习算法:直接对问题进行求解,比如二分类问题,都是在空间中寻找一条直线从而把类别的样例分开,对于新的样例只要判断在直线的那一侧就可. ==>这种直接求解的方法称为判别学习方法 生成学习算法: ...