参考:
Python的虚拟环境管理工具:最常用的便是virtualenv,virtualenvwrapper,pipenv这几种虚拟环境的管理都是基于virtualenv,只是做了不同的封装,达到了更好的效果。
- virtualenv ,此工具会在项目目录下创建一个文件夹,名字叫做virtualenv_name,此目录下会包含python拷贝,之后所有的依赖都会保存至此目录中,在虚拟环境激活状态下,可以安装所需的依赖包,安装的依赖包会保存至项目虚拟环境目录virtualenv_name 下,不会污染系统全局环境;
- 缺点:
- 可能需要手动安装/删除某些特定版本的包
- 要定期更新
requirements.txt
,保持项目环境的一致性- 会保留两个版本
requirements.txt
,一个用于开发,一个用于生产环境,导致更多复杂性- virtualenvwrapper ,virtualenvwrapper是对virtualenv接口的封装。virtualenvwrapper会将虚拟环境的目录统一保存,不需手动管理,使用起来更加便利;
- pipenv ,pipenv是Kenneth Reitz在2017年1月发布的Python依赖管理工具,现在由PyPA维护。你可以把它看做是pip和virtualenv的组合体,而它基于的Pipfile则用来替代旧的依赖记录方式(requirements.txt),pipenv 在易用性上要简单很多,同时增加了 lock 文件,能更好的锁定版本。如果没有特殊要求可以 pipenv 直接使用 lock 的版本,开发又可以小步迭代,实现依赖的稳步升级。
- 实现同时管理项目中的python虚拟环境和相关包依赖
pipenv的优势
- pipenv会在项目目录下创建
Pipfile
、Pipfile.lock
文件,管理包之间的依赖关系,以前我们需要将虚拟环境依赖包的导出为requirements.txt, 一旦依赖包变动,就要重新导出,现在Pipfile和Pipfile.lock文件可以节省这些步骤,更方便地管理;- 安装卸载包无需激活虚拟环境,直接在项目文件夹下操作;
- 卸载时,自动检查依赖库是否被其他包依赖,来选择是否彻底删除。
- 无需激活虚拟环境执行代码,只要有pipfile文件通过
pipenv run python xx.py
。- 便于docker容器化管理,Pipfile文件支持生成requirements文件,便于项目代码docker化管理,另外,pipfile还支持–dev环境,可以在调试阶段安装许多调试工具等,而不影响生产环境的环境。
- 各个地方使用了哈希校验,无论安装还是卸载包都十分安全,且会自动公开安全漏洞。
- 通过加载
.env
文件简化开发工作流程
Anaconda Prompt 或者 cmd 输入 ->
pip install pipenv
检测安装是否成功:
pipenv --version
预览一下pipenv的用法
pipenv --help
创建环境 pipenv install
& pipenv shell
【直接在地址行输入cmd 或者 pipenv shell】
使用
pipenv install
&pipenv shell
区别
pipenv install
需要在DOS界面下操作,在命令提示符前面显示虚拟环境名字后,才算进入环境
pip shell
可以在地址行直接输入,激活anaconda的pipenv工具,一步到位进入虚拟环境,没有anaconda时可能不能用
(WeiBoImageCrawling-rDB0ue93) F:\Ccode\WeiBoImageCrawling>pipenv install
Creating a virtualenv for this project…
Pipfile: F:\Ccode\WeiBoImageCrawling\Pipfile
Using C:/Users/流年/AppData/Local/Programs/Python/Python37-32/python.exe (3.7.4) to create virtualenv…
[ ] Creating virtual environment...created virtual environment CPython3.7.4.final.0-32 in 2272ms
creator CPython3Windows(dest=C:\Users\流年\.virtualenvs\WeiBoImageCrawling-rDB0ue93, clear=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\流年\A
ppData\Local\pypa\virtualenv)
added seed packages: pip==20.2.4, setuptools==50.3.2, wheel==0.36.2
activators BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
Successfully created virtual environment!
Virtualenv location: C:\Users\流年\.virtualenvs\WeiBoImageCrawling-rDB0ue93
Installing dependencies from Pipfile.lock (a65489)…
================================ 0/0 - 00:00:00
上述命令会生成
Pipfile
和Pipfile.lock
,自动生成一个随机的虚拟环境目录名[项目名称+随机字符]。
Pipfile:用于保存项目的python版本、依赖包等相关信息
Pipfile文件可以单独移放到其他项目内,用于项目虚拟环境的建立和依赖包的安装
Pipfile.lock:用于对Pipfile的锁定
pipenv install
Pipfile 文件
目录中存在,根据这个Pipfile生成虚拟环境。
目录中不存在,该命令将创建一个 Pipfile 文件。
若项目目录中虚拟环境已创建且有Pipfile文件,将根据Pipfile文件来安装依赖包
windows下执行命令,生成的虚拟环境在C:\Users\用户名.virtualenvs文件夹下
一般虚拟环境目录名:创建环境时所在的项目目录名 + 随机字符串,eg:myblog-Gtn4e1q9
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
[requires]
python_version = "3.7"
[scripts]
test = "python3 -m unittest discover -s ./tests"
dev = "python3 manage.py runserver 0.0.0.0:8000"
source
用来设置仓库地址,即从哪下载虚拟环境所需要的包
url
为,为自己想用的源packages
用来指定项目依赖的包,可以用于生产环境和生成requirements文件
dev-packages
用来指定开发环境需要的包,这类包只用于开发过程,不用与生产环境,比如单元测试相关的包,只在开发阶段有用,这样分开便于管理。安装调试工具、性能测试工具、python语法工具
requires
中指定目标Python版本
[scripts]
添加自定义的脚本命令,并通过 pipenv run 的方式在虚拟环境中执行对应的命令:
pipenv run test
相当于执行pipenv run python3 -m unittest discover -s ./tests
pipenv run dev
相当于pipenv run python3 manage.py runserver 0.0.0.0:8000
Pipfile.lock
中记录了当前虚拟环境中安装的依赖的版本号以及哈希,以保证每次根据这些值装出来的依赖都是一致的,该文件用来保证包的完整性。记住,任何情况下不要手动修改该文件!项目提交时,可将
Pipfile
文件和Pipfile.lock
文件一并提交,给其他开发人员克隆下载,他们可以根据此Pipfile文件运行命令pipenv install
生成自己的虚拟环境。
pipenv --python 3.6 #指定使用Python3.6的虚拟环境 pipenv --two #使用系统的Python2在创建虚拟环境 pipenv --three #使用系统的Python3在创建虚拟环境 #注意:以上三个参数只能单独使用。它们还具有破坏性,会删除当前的虚拟环境,然后用适当版本的虚拟环境替代。
- 当给定了一个Python版本的时候,Pipenv会自动扫描系统中能够匹配给定的Python版本的Python解释器,没指定版本时,使用系统默认的Python版本。
激活环境 pipenv shell
创建环境后会自动进入到虚拟环境中,当退出虚拟环境重新进入到虚拟环境则需要执行以上命令
执行完命令,命令提示符前出现了如**(TestPipenv-tmf99lpc)**的虚拟环境的名字,代表进入了虚拟环境
虚拟环境中的,python版本、pip、第三方库,都不会与系统中的库冲突
在虚拟环境中运行代码项目 python xxx.py
eg:
(WeiBoImageCrawling-rDB0ue93) F:\Ccode\WeiBoImageCrawling>python xxx.py
xxx.py 运行...
不进入虚拟环境的情况下使用虚拟环境运行代码,可以使用pipenv run python xxx.py
命令,eg:
F:\Ccode\WeiBoImageCrawling>pipenv run python xxx.py
xxx.py 运行...
安装依赖包到虚拟环境
pipenv install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/
pipenv install parsel==1.3.1 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pipenv install --dev nose2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
--dev
标志,此标志的包只用于开发环境,安装包记录在Pipfile
中的dev-package
中克隆
Profile
文件后使用命令pipenv install
创建虚拟环境,默认不会安装dev-package
下的安装包,除非使用命令pipenv install --dev
Pipefile
和Pipefile.lock
都会按照你的操作进行自动更新,如果需要手动修改包的依赖条件,手工编辑 Pipefile 并进行安装即可。
注意:强烈建议使用双引号包裹包名和版本号以避免unix操作系统中的输入和输出重定向问题
pipenv install requests # 不指定版本
pipenv install requests==2.31 # 指定版本
pipenv install --dev requests # 在dev开发环境安装测试包(可以加–skip-lock参数)
pipenv install “requests>=1.4” # 只安装等于或者大于 1.4.0 的版本
pipenv install “requests<=2.13” # 只安装小于或者等于 2.13.0 的版本
pipenv install “requests>2.19” # 安装 2.19.1 版本但是不安装 2.19.0 版本
pipenv install “requests!=2.19” # 避免安装某个版本
pipenv --site-packages # 加载系统已安装 Python 包
pipenv install package_name --skip-lock # 跳过lock,等项目开发好后,再更新所有报的hash值
pipenv install -r path/to/requirements.txt #导入某个requirements文件
pipenv install “requests~=2.2” # 锁定包的主版本(这相当于使用2.*)
请优先使用 ~= 标识符而不是 == 标识符,因为后者会阻止 pipenv 更新包
安装完成后,会在Pipfile文件中看到
卸载包
pipenv uninstall beautifulsoup4 #在项目所在虚拟环境中卸载beautifulsoup4
pipenv uninstall --all #从虚拟环境中移除所有已安装的包,但Pipfile.lock文件不受影响
pipenv uninstall --all--dev #从虚拟环境中卸载所有开发包,并从Pipfile文件中移除这些包
更新命令
pipenv update requests #在项目中更新requests包
pipenv update #更新项目中所有的包
pipenv update --outdated #查看现有包哪些已经过期
查看命令
pipenv --where #查看项目位置
pipenv --venv #查看虚拟环境位置
pipenv --py #查看解释器信息
pipenv graph #显示现有的依赖包/包的依赖结构/已安装的模块
pipenv list #查看已安装的包
pipenv lock #更新Pipfile.lock文件锁定当前环境的依赖版本
exit #退出虚拟环境
删除虚拟环境 pipenv --rm
其他命令 pipenv -h
Options:
--where Output project home information.
--venv Output virtualenv information.
--py Output Python interpreter information.
--envs Output Environment Variable options.
--rm Remove the virtualenv.
--bare Minimal output.最小输出?
--completion Output completion (to be executed by the
shell).
--man Display manpage. 显示手册页。
--support Output diagnostic information for use in
GitHub issues.使用GitHub时,输出诊断信息
--site-packages / --no-site-packages
Enable site-packages for the virtualenv.
[env var: PIPENV_SITE_PACKAGES]
--python TEXT Specify which version of Python virtualenv
should use.
--three / --two Use Python 3/2 when creating virtualenv.
--clear Clears caches (pipenv, pip, and pip-tools).
[env var: PIPENV_CLEAR] 清除缓存
-v, --verbose Verbose mode. 详细模式
--pypi-mirror TEXT Specify a PyPI mirror. 指定PyPI镜像
--version Show the version and exit.
-h, --help Show this message and exit.
Usage Examples:
Create a new project using Python 3.7, specifically:
$ pipenv --python 3.7
Remove project virtualenv (inferred from current directory):
$ pipenv --rm
Install all dependencies for a project (including dev):
$ pipenv install --dev
Create a lockfile containing pre-releases:创建包含预发行版本的锁定文件:
$ pipenv lock --pre
Show a graph of your installed dependencies:
$ pipenv graph
Check your installed dependencies for security vulnerabilities:检查已安装的依赖项是否存在安全漏洞:
$ pipenv check
Install a local setup.py into your virtual environment/Pipfile:将本地setup.py安装到虚拟环境
$ pipenv install -e .
Use a lower-level pip command:使用较低级别的pip命令
$ pipenv run pip freeze
Commands:
check Checks for PyUp Safety security vulnerabilities and against PEP
508 markers provided in Pipfile.
clean Uninstalls all packages not specified in Pipfile.lock.
graph Displays currently-installed dependency graph information.
install Installs provided packages and adds them to Pipfile, or (if no
packages are given), installs all packages from Pipfile.
lock Generates Pipfile.lock.
open View a given module in your editor.
run Spawns a command installed into the virtualenv.
shell Spawns a shell within the virtualenv.
sync Installs all packages specified in Pipfile.lock.
uninstall Uninstalls a provided package and removes it from Pipfile.
update Runs lock, then sync.
$ pipenv
Usage: pipenv [OPTIONS] COMMAND [ARGS]...
命令具有以下选项
Options:pipenv
--update 更新Pipenv & pip
--where 显示项目文件所在路径
--venv 显示虚拟环境实际文件所在路径
--py 显示虚拟环境Python解释器所在路径
--envs 显示虚拟环境的选项变量
--rm 删除虚拟环境
--bare 最小化输出
--completion 完整输出
--man 显示帮助页面
--three / --two 使用Python 3/2创建虚拟环境(注意本机已安装的Python版本)
--python TEXT 指定某个Python版本作为虚拟环境的安装源
--site-packages 附带安装原Python解释器中的第三方库
--jumbotron 不知道啥玩意....
--version 版本信息
-h, --help 帮助信息
可使用的命令参数:
Commands:
check 检查安全漏洞
graph 显示当前依赖关系图信息
install 安装虚拟环境或者第三方库
lock 锁定并生成Pipfile.lock文件
open 在编辑器中查看一个库
run 在虚拟环境中运行命令
shell 进入虚拟环境
uninstall 卸载一个库
update 卸载当前所有的包,并安装它们的最新版本
.exe
安装 pyinstaller
pipenv install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/
打包命令
pyinstaller -F <入口.py>
-F 打包成可执行文件
-w (小写) 不显示命令行窗口
eg: pyinstaller -F E:/tf/lab.8.1-huffman-coding/byteSourceCoder.py
pipenv可以像virtualenv一样使用命令生成requirements.txt文件
pipenv lock -r --dev > requirements.txt
同样的,也可以像virtualenv一样通过requirements.txt文件安装包
pipenv install -r requirements.txt
这个命令让我们可以重用以前requirements.txt文件来构建我们新的开发环境,把我们的项目顺利的迁到pipenv。
pip install <包名> #安装,自动下载到Python的Lib>site-packages目录
pip uninstall <包名> #卸载
pip freeze #查看已安装的包及其版本
pip list -o #查看可升级的包
pip install -U <包名> #升级指定包
python -m pip install --upgrade pip #升级pip