Pip, Pipenv, Poetry or Conda——你会选择哪个?
2020年使用哪个包管理器更好?他们在给这几个东东投票,你会选哪个呢?
介绍
大多数开发人员在被引入python时,很可能pip是他们学会用来管理软件包的第一个工具。 在开发人员工作的头几年,我一直使用pip进行操作,那时直到改变之前,几乎没有其他选择。
pip
pip默认随附于python,并且使用pip安装软件包非常简单明了,
$ pip install [package-name]如果您需要使程序包井井有条,并且不想在用户或系统路径中安装项目包,则可能需要使用虚拟环境。
$ python3 -m venv venv然后你需要激活它
例子(linux / unix)
$ source venv/bin/activate 然后在完成后停用
$ deactivate下一步将是跟踪已安装的软件包
$ pip freeze >> requirements.txt当其他人需要在其他地方安装该项目时,这将有很大的帮助。
完成了吗 好吧,还没有,我们需要确保我们也解决依赖关系。
因此,我们可以使用pip-tools,它是pip-compile和pip-sync的组合。
因此,仅安装带有pip的软件包,您将需要4-5个步骤来实现,我认为这很麻烦。
Conda
Conda是适用于python的出色软件包管理工具,它将为您处理软件包管理和虚拟环境。
安装
您可以在MacO,Windows或Linux上安装conda。
Conda与Python无关(尽管它是用python编写的)。 与其余程序包管理器相比,最大的优势是您可以安装几乎所有安装程序,从C库到R程序包甚至是二进制文件。
用法
创建一个新的virtualenv
$ conda create --name venv安装套件
$ conda install [package-name]我对Conda的不满意之处在于它并不是真正的最小功能,它具有许多我不使用的功能。 同样,您需要安装conda-lock来锁定程序包依赖项。 我认为应该提供主要的conda软件包。
Poetry
这是我一直以来最喜欢的终极工具之一,它真的非常好用,可以处理虚拟环境,依赖关系以及依赖关系。 此外,它还有出色的(最新的)文档。
安装
您可以在Windows,Mac或Linux上安装Poetry,请在此处检查。
用法
$ poetry init这将创建pyproject.toml,这是您Poetry诗歌的主要配置文件
这是一个例子
[tool.poetry] name = "test_project" version = "0.1.0" description = "" authors = ["ahmednafies <ahmed.nafies@gmail.com>"][tool.poetry.dependencies] python = "^3.7"[tool.poetry.dev-dependencies][build-system] requires = ["poetry>=0.12"] build-backend = "poetry.masonry.api"让我们安装一个软件包(例如请求)
$ poetry add requests您将看到已安装了请求,并将版本添加到pyproject.toml中,并创建了一个新文件poetry.lock,其中包含了请求包的所有依赖项。
[[package]] category = "main" description = "Python package for providing Mozilla's CA Bundle." name = "certifi" optional = false python-versions = "*" version = "2020.6.20"[[package]] category = "main" description = "Universal encoding detector for Python 2 and 3" name = "chardet" optional = false python-versions = "*" version = "3.0.4"[[package]] category = "main" description = "Internationalized Domain Names in Applications (IDNA)" name = "idna" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.10"[[package]] category = "main" description = "Python HTTP for Humans." name = "requests" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" version = "2.24.0"[package.dependencies] certifi = ">=2017.4.17" chardet = ">=3.0.2,<4" idna = ">=2.5,<3" urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26"[package.extras] security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"][[package]] category = "main" description = "HTTP library with thread-safe connection pooling, file post, and more." name = "urllib3" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" version = "1.25.10"[package.extras] brotli = ["brotlipy (>=0.6.0)"] secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "pyOpenSSL (>=0.14)", "ipaddress"] socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"][metadata] content-hash = "b70f6f5e0cfc8eed2ae66f49b863ab5b47e7a8c563510179878591339113ebd2" python-versions = "^3.7"[metadata.files] certifi = [ {file = "certifi-2020.6.20-py2.py3-none-any.whl", hash = "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41"}, {file = "certifi-2020.6.20.tar.gz", hash = "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3"}, ] chardet = [ {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, ] idna = [ {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, ] requests = [ {file = "requests-2.24.0-py2.py3-none-any.whl", hash = "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898"}, {file = "requests-2.24.0.tar.gz", hash = "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b"}, ] urllib3 = [ {file = "urllib3-1.25.10-py2.py3-none-any.whl", hash = "sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461"}, {file = "urllib3-1.25.10.tar.gz", hash = "sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a"}, ]诗歌的最大特点之一是,您可以将开发依赖项(仅用于开发(例如ipython)的依赖项)与生产依赖项区分开。
$ poetry add ipython --dev现在您将看到ipython被归类为开发依赖项
[tool.poetry] name = "test_project" version = "0.1.0" description = "" authors = ["ahmednafies <ahmed.nafies@gmail.com>"][tool.poetry.dependencies] python = "^3.7" requests = "^2.24.0"[tool.poetry.dev-dependencies] ipython = "^7.16.1"[build-system] requires = ["poetry>=0.12"] build-backend = "poetry.masonry.api"并且如果您要跳过安装开发人员依赖项(例如在生产环境中)。
$ poetry install --no-dev无需激活/停用,只需运行它即可。
$ poetry run ipython但是,如果您想在虚拟环境中获得外壳程序访问权限,则可以使用..
$ poetry shell删除包..
$ poetry remove [package-name]更新包..
$ poetry update [package-name]对我而言,使用诗歌的唯一缺点是它使用pyproejct.toml,如果您使用黑色格式化程序,则其配置通常也可以在pyproject.toml中处理,而且我个人不希望使用我的格式化程序和 依赖项列表位于同一位置。
Pipenv
这是我经常使用的。 就像诗一样,但我很少喜欢。
安装
如果您使用的是MacOS,则可以通过Homebrew轻松安装Pipenv:
$ brew install pipenv或者,如果您使用的是Debian Buster +:
$ sudo apt install pipenv或者,如果您使用的是Fedora:
$ sudo dnf install pipenv或者,如果您使用的是FreeBSD:
# pkg install py36-pipenv如果以上都不是选项:
$ pip install pipenv否则,请详细查看资料(https://pipenv.pypa.io/en/latest/#install-pipenv-today)。
用法
使用pipenv,您甚至不需要初始化任何东西。
只需将软件包直接安装在要初始化pipenv的仓库中
以安装requests 为例
$ pipenv install requests您会发现添加了两个文件
Pipfile
[[source]] name = "pypi" url = "https://pypi.org/simple" verify_ssl = true[dev-packages][packages] requests = "*"[requires] python_version = "3.7"和Pipfile.lock与所有依赖项
{ "_meta": { "hash": { "sha256": "acbc8c4e7f2f98f1059b2a93d581ef43f4aa0c9741e64e6253adff8e35fbd99e" }, "pipfile-spec": 6, "requires": { "python_version": "3.8" }, "sources": [ { "name": "pypi", "url": "https://pypi.org/simple", "verify_ssl": true } ] }, "default": { "certifi": { "hashes": [ "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3", "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41" ], "version": "==2020.6.20" }, "chardet": { "hashes": [ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" ], "version": "==3.0.4" }, "idna": { "hashes": [ "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.10" }, "requests": { "hashes": [ "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b", "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898" ], "index": "pypi", "version": "==2.24.0" }, "urllib3": { "hashes": [ "sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a", "sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", "version": "==1.25.10" } }, "develop": {} }分离依赖项(dev和prod)..
$ pipenv install ipython --dev在生产中,如果您需要安装没有开发依赖项的软件包..
$ pipenv install如果您需要安装开发依赖项..
$ pipenv install --dev无需激活/停用。
$ pipenv run ipython如果您需要在虚拟环境中访问..
$ pipenv shell更新包..
$ pipenv update [package-name]删除包..
$ pipenv uninstall [package-name]结论
如果您认为使用pip和virtualenv来管理python软件包太麻烦了,那么本文为您提供了两个不错的工具,它们可以替代pip和virtualenv来简化您的开发过程。
版权声明:
作者: FreeClashNode
链接: https://www.freeclashnode.com/news/article-3288.htm
来源: www.freeclashnode.com
文章版权归作者所有,未经允许请勿转载。
热门文章
- 11月2日免费节点分享|22.5M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 10月14日免费节点分享|22.5M/S,Clash节点/V2ray节点/Singbox节点/SSR节点|免费上网梯子每天更新
- 10月25日免费节点分享|18.1M/S,SSR节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 10月13日免费节点分享|22.1M/S,V2ray节点/Clash节点/Singbox节点/Shadowrocket节点|免费上网梯子每天更新
- 10月12日免费节点分享|22.7M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 10月27日免费节点分享|20M/S,Shadowrocket节点/Singbox节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 10月28日免费节点分享|22.8M/S,Singbox节点/SSR节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 10月26日免费节点分享|21.5M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 10月23日免费节点分享|22.2M/S,Shadowrocket节点/Clash节点/Singbox节点/V2ray节点|免费上网梯子每天更新
- 10月21日免费节点分享|22M/S,Clash节点/Singbox节点/V2ray节点/SSR节点|免费上网梯子每天更新
最新文章
- 11月10日免费节点分享|19M/S,Clash节点/SSR节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 解锁全球视野:星愿浏览器科学上网终极指南
- 11月9日免费节点分享|22.3M/S,Shadowrocket节点/Clash节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 轻松翻越网络高墙:Shadowrocket一键导入配置全攻略
- 11月8日免费节点分享|21.3M/S,Clash节点/V2ray节点/Singbox节点/SSR节点|免费上网梯子每天更新
- 当Vmess突然失效:一场技术与封锁的无声博弈
- 11月7日免费节点分享|22.9M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 梅林固件科学上网完全指南:从入门到精通,零成本解锁网络自由
- 11月6日免费节点分享|20.9M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 幸运破解器科学上网全解析:解锁数字世界的终极指南
- 11月5日免费节点分享|21.9M/S,Shadowrocket节点/Singbox节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 11月4日免费节点分享|18M/S,Clash节点/Singbox节点/SSR节点/V2ray节点|免费上网梯子每天更新
- 穿越数字迷雾:深度解析V2Ray中转迟滞之谜与极速优化指南
- 跨越数字边界:科学上网的终极指南与深度思考
- 从连接到掌控:深入理解 Quantumult 的工作流程与网络管理哲学
- 11月2日免费节点分享|22.5M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 深度解析《荒野冲突》:征服与策略的终极对决
- 11月1日免费节点分享|20.3M/S,V2ray节点/Shadowrocket节点/Clash节点/Singbox节点|免费上网梯子每天更新
- 斐讯路由器刷机配置v2ray全攻略:打造安全高效的翻墙网络环境
- 10月31日免费节点分享|18.7M/S,Shadowrocket节点/Clash节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 谷歌浏览器科学上网扩展全攻略:从入门到精通
- 10月30日免费节点分享|20.4M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 苹果手机V2Ray完全指南:从零开始打造安全上网环境
- 10月29日免费节点分享|21.6M/S,SSR节点/Clash节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 探索数字世界的门户:电脑科学上网贴吧完全指南
- 10月28日免费节点分享|22.8M/S,Singbox节点/SSR节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 穿越数字边界:科学上网的全面指南与深度思考
- 10月27日免费节点分享|20M/S,Shadowrocket节点/Singbox节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 数字世界的破壁之旅:科学上网全指南与实用工具深度解析
- 10月26日免费节点分享|21.5M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 跨越知识边界:浙大学子的全球学术网络探索指南
- 10月25日免费节点分享|18.1M/S,SSR节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 10月24日免费节点分享|20.5M/S,V2ray节点/Clash节点/Singbox节点/Shadowrocket节点|免费上网梯子每天更新
- 刘大猫科学上网全攻略:解锁全球网络的终极指南
- 10月23日免费节点分享|22.2M/S,Shadowrocket节点/Clash节点/Singbox节点/V2ray节点|免费上网梯子每天更新
- 全面解析Quantumult安卓版:功能、安装与配置教程
- 双重防护,畅享无界:AdGuard联手V2RayNG,打造极致安全的上网体验
- 10月22日免费节点分享|18.8M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 掌握Clash白名单设置:精准控制代理流量的艺术
- 10月21日免费节点分享|22M/S,Clash节点/Singbox节点/V2ray节点/SSR节点|免费上网梯子每天更新
- 突破网络边界:技术科学上网的终极安全指南
- 10月20日免费节点分享|22.9M/S,SSR节点/V2ray节点/Clash节点/Singbox节点|免费上网梯子每天更新
- Shadowrocket 选购指南:从入门到精通,找到你的专属代理神器
- 10月19日免费节点分享|19.3M/S,Singbox节点/V2ray节点/Clash节点/Shadowrocket节点|免费上网梯子每天更新
- 深入解读:V2Ray为何比SSR更安全?一场网络隐私的全方位较量
- 10月18日免费节点分享|20.6M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 深度指南:Shadowrocket从入门到精通——iOS用户的网络自由密钥
- 10月17日免费节点分享|18M/S,Clash节点/SSR节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 深入解析科学上网套:全方位使用指南与常见问题解答
- 10月16日免费节点分享|22M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
归档
- 2026-11 18
- 2026-10 61
- 2026-09 58
- 2026-08 63
- 2026-07 61
- 2026-06 55
- 2026-05 56
- 2026-04 51
- 2026-03 60
- 2026-02 52
- 2026-01 56
- 2025-12 59
- 2025-11 55
- 2025-10 56
- 2025-09 55
- 2025-08 49
- 2025-07 31
- 2025-06 30
- 2025-05 31
- 2025-04 30
- 2025-03 388
- 2025-02 360
- 2025-01 403
- 2024-12 403
- 2024-11 390
- 2024-10 403
- 2024-09 388
- 2024-08 402
- 2024-07 427
- 2024-06 442
- 2024-05 181
- 2024-04 33
- 2024-03 31
- 2024-02 29
- 2024-01 51
- 2023-12 52
- 2023-11 32
- 2023-10 32
- 2023-09 3