使用pipenv管理python虚拟环境
2021-03-25 18:25
标签:识别 base 虚拟环境安装 切换 字段 ase 用户访问 eve too 近期的项目中,我开始尝试着从virtualenv管理python虚拟环境,切换到用pipenv来管理。 经过一段时间的使用,着实觉得pipenv使用的更加顺手,更加的便捷。这当然也延续了 Kenneth 大神一贯的项目作风-- 再配合上 我们通过 注:这里简单略过安装部分,网上大把的教程有教如何在各个系统环境下安装,不是本文的主要内容 前提:假设我们在用户目录 我们首先进入项目目录: 进入项目以后,如果直接执行 但是我们一般会创建虚拟环境的时候指定python版本,就需要配上 下面是执行后的输出信息: 这将在项目目录中创建两个新文件 Pipfile 存放着当前虚拟环境的配置信息,包含python版本,pypi源,以及项目安装的依赖库。 激活虚拟环境, 在当前目录执行下面的指令即可: 如果你和我一样想要使用 如果没有这个需求,可以忽略这一段话。 在使用pipenv的时候,常常会在安装的时候,一直卡在了 所以,我一般会在创建好Pipfile以后,修改到文件中 可以通过更新 如果我们想要在虚拟环境中安装某个指定的库,比如 如果想查看当前环境中第三方包之间的依赖关系,可以通过 从输出可以看出,我们按照的 任何时候想退出虚拟环境,只需一条简单的 安装好 要实现 这样就配置好了 Options: --upgrade 更新pipenv&pip到最新版本 --where 输出项目根目录信息 --venv 输出虚拟环境信息 --py 输出python解释器的信息 --envs 输出环境变量信息 --rm 删除当前虚拟环境 --bare 精简输出 --man 显示帮助手册页面 --three, --two 使用python3/2创建虚拟环境 --python \ 指定应该使用哪个版本的Python虚拟环境 --site-packages 为虚拟环境启用site-packages --version 显示版本并退出 检查装的包的安全性 Options: --three, --two 使用python3/2创建虚拟环境 --python \ 指定应该使用哪个版本的Python虚拟环境 --system 使用系统的Python --unused \ 指定项目路径,显示可能未使用的依赖关系。 卸载未在pipfile.lock中指定的所有软件包 Options: -v,--verbose 详细信息模式 --three, --two 使用python3/2创建虚拟环境 --python \ 指定应该使用哪个版本的Python虚拟环境 --dry-run 只输出不需要的包 显示当前安装的依赖关系图信息 Options: --bare 最小的输出 (备注:这个不太理解,尝试过指定了这个参数会输出所有的包,不指定却只输出pip安装的包,感觉和官方注释相反) --json 输出JSON格式 --reverse 逆转依赖关系图 安装参数提供的软件包并将它们添加到pipfile,如果没有提供参数,就安装所有软件包。 Options: -d, --dev 在[dev-packages]中安装软件包 --three, --two 使用python3/2创建虚拟环境 --python \ 指定应该使用哪个版本的Python虚拟环境 --system 系统pip管理 -r, --requirements \ 导入一个requirements.txt文件。 -c, --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 多个包(可选参数) 生成pipfile.lock Options: -v,--verbose 详细信息模式 --three, --two 使用python3/2创建虚拟环境 --python \ 指定应该使用哪个版本的Python虚拟环境 -r, --requirements 生成与requirements.txt兼容的lock文件 -d, --dev 生成与requirements.txt兼容的开发模式依赖项 --clear 清除依赖关系缓存 --pre 允许预发布 --keep-outdated 防止在pipfile.lock中更新过时的依赖关系 在编辑器中查看指定的模块 Options: --three, --two 使用python3/2创建虚拟环境 --python \ 指定应该使用哪个版本的Python虚拟环境 MODULE 模块名(必填项) 运行一个虚拟环境中的命令(就是在未激活虚拟环境时可以直接用虚拟环境的python执行) Options: --three, --two 使用python3/2创建虚拟环境 --python \ 指定应该使用哪个版本的Python虚拟环境 Arguments COMMAND 命令(必填项) ARGS 参数(可选项) 在虚拟环境中产生一个shell(就是激活虚拟环境) Options: --three, --two 使用python3/2创建虚拟环境 --python \ 指定应该使用哪个版本的Python虚拟环境 --fancy 以好看的模式运行shell(用于如果优化过配置的shell) --anyway 产生一个子shell,即使已经在虚拟环境中 这个比较很少用,但就是虚拟环境中的虚拟环境,执行后在终端前面看到两个虚拟环境的括号: Arguments: SHELL_ARGS 可选项 安装所有在pipfile.lock中指定的软件包 Options: -v,--verbose 详细信息模式 -d, --dev 另外在[dev-packages]中安装软件包 --three, --two 使用python3/2创建虚拟环境 --python \ 指定应该使用哪个版本的Python虚拟环境 --bare 精简输出 --clear 清除依赖关系缓存 --sequential 一次只安装一个依赖项,而不是同时安装 卸载指定的软件包并将其从pipfile中删除 Options: -v,--verbose 详细信息模式 --three, --two 使用python3/2创建虚拟环境 --python \ 指定应该使用哪个版本的Python虚拟环境 --system 系统的pip管理 --lock 卸载之后锁定 --all-dev 从[dev-packages]中卸载所有软件包 --all 从虚拟环境中清除所有包。但不会编辑pipfile --keep-outdated 防止在pipfile.lock中更新过时的依赖关系 Arguments: PACKAGE_NAME 包名(可选参数) MORE_PACKAGES 多个包(可选参数) 更新指定包 Options: -d, --dev 在[dev-packages]中安装软件包 --three, --two 使用python3/2创建虚拟环境 --python \ 指定应该使用哪个版本的Python虚拟环境 -v, --verbose 详细信息模式 --clear 清除依赖关系缓存 --bare 精简输出 --pre 允许预发布 --keep-outdated 防止在pipfile.lock中更新过时的依赖关系 --sequential 一次只安装一个依赖项,而不是同时安装 --outdated 列出过时的依赖关系 --dry-run 列出过时的依赖关系 使用pipenv管理python虚拟环境 标签:识别 base 虚拟环境安装 切换 字段 ase 用户访问 eve too 原文地址:https://www.cnblogs.com/lyck/p/13763464.html前言
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
中记录的依赖库)。--two
或者--three
这个参数:
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
pipenv
根据这个来寻找项目的根目录。Pipfile
文件是 TOML
格式而不是 requirements.txt
那样的纯文本。[1]default
和 development
区分Pipfile
的一个锁定。支持锁定项目不同的版本所依赖的环境.pipenv shell
创建 .env 文件
autoenv
来自动激活虚拟环境,就在当前项目的根目录下面,创建一个名为 .env 的文件,将 pipenv shell
写进去。具体使用在后面说明。更新 pypi源来提高依赖库安装的速度
Locking
这里,通过加上 -v
参数,可以看到安装过程中的步骤信息,卡在了下载那里,这时应该可以意识到是因为网络的原因,pipenv创建的 Pipfile
中默认的pypi源是python官方的 https://pypi.python.org/simple。我们国内用户访问下载的时候会很慢。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.0.2, installed: 3.0.4]
- idna [required: =2.5, installed: 2.6]
- urllib3 [required: =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]...
check
pipenv check [OPTIONS] [ARGS]...
clean
pipenv clean [OPTIONS]
graph
pipenv graph [OPTIONS]
install
pipenv install [OPTIONS] [PACKAGE_NAME] [MORE_PACKAGES]...
lock
pipenv lock [OPTIONS]
open
pipenv open [OPTIONS] MODULE
run
pipenv run [OPTIONS] COMMAND [ARGS]...
shell
pipenv shell [OPTIONS] [SHELL_ARGS]...
(my_project-dhpIKgdN) (my_project-dhpIKgdN) [root@centos my_project]#
sync
pipenv sync [OPTIONS]
uninstall
pipenv uninstall [OPTIONS] [PACKAGE_NAME] [MORE_PACKAGES]...
update
pipenv update [OPTIONS] [PACKAGES]...
文章标题:使用pipenv管理python虚拟环境
文章链接:http://soscw.com/index.php/essay/67950.html