内容简介:本文由博主翻译,译者评价:软件开发者对工程环境、对开发工具的追求是不会止步的。随着开发要素的变迁,工具会不断演进、创新,来适应新的需求,解决面临的各类问题。开发者对新工具的挖掘/理解/采纳,也会反复循环。我们肯定得考虑切换工具的成本,但是也不能固步自封,因循守旧。这个就要自行评估和平衡了。这篇文章中,对Python项目的控制管理分成两个部分:Python解释器交给pyenv,项目中使用的Python包交给Pipenv。确实是一个很不错的选择。
本文由博主翻译,译者评价:
软件开发者对工程环境、对开发 工具 的追求是不会止步的。随着开发要素的变迁,工具会不断演进、创新,来适应新的需求,解决面临的各类问题。开发者对新工具的挖掘/理解/采纳,也会反复循环。我们肯定得考虑切换工具的成本,但是也不能固步自封,因循守旧。这个就要自行评估和平衡了。
这篇文章中,对 Python 项目的控制管理分成两个部分:Python解释器交给pyenv,项目中使用的Python包交给Pipenv。确实是一个很不错的选择。
这是一种个人强烈推荐的在本地使用Python进行开发的的办法。你可能已经发现了,不同项目有着不同Python版本的依赖项,针对管理这些项目是很麻烦的。
更为复杂的是,有多种方法可以安装Python:
- 操作系统预安装
- 使用brew 或者 apt 这样的包管理器
- 使用www.python.org上的二进制文件
- 使用pyenv-easy方法安装和管理Python安装过程:sunglasses:
本指南使用pyenv来管理Python安装,使用Pipenv来管理项目依赖项(而不是原始pip)。
安装pyenv
让我们通过brew安装:
$ brew install pyenv
如果你不在Mac上,请参阅pyenv的 安装说明 。
将以下内容添加到〜/ .bash_profile或〜/ .bashrc(取决于你的shell)以在终端加载时自动初始化pyenv:
eval “$(pyenv init -)”
译者注:pyenv有个自动安装器,更简单易用,看博主上一篇文章。
pyenv如何工作?
查看所有可用的Python版本:
$ pyenv install –list
让我们安装Python 3.6.6
$ pyenv install 3.6.6 Installed Python-3.6.6 to /Users/dvf/.pyenv/versions/3.6.6
pyenv不会更改你的全局解释器,除非你告诉它:
$ python –version Python 2.7.14 $ pyenv global 3.6.6 Python 3.6.6
pyenv允许你将不同版本的python本地安装到一个目录中。让我们创建一个针对python 3.7.0的项目:
$ pyenv install 3.7.0 Installed Python-3.7.0 to /Users/dvf/.pyenv/versions/3.7.0 $ mkdir my_project && cd my_project $ python –version Python 3.6.6 $ pyenv local 3.7.0 $ python –version Python 3.7.0
现在,只要你发现自己在my_project中,你就会自动使用Python 3.7.0解释器。
搞明白没有?如果没有,停在这里并花一些时间来捣鼓pyenv-它的工作原理是在〜/ .pyenv中安装所有Python解释器,并根据你当前的目录动态调整你的$ PATH。
Pipenv是什么?它是如何运作的?
Pipenv是官方推荐的管理项目依赖关系的方式。 与在项目中拥有requirements.txt文件和管理virtualenv不同,现在你的项目中有一个Pipfile文件,可以自动完成所有这些工作。
首先通过pip安装它,这是一个快速发展的项目,因此请确保你拥有最新版本(撰写本文时为2018.10.13):
pip install -U pipenv
首次使用 Pipenv
让我们在你的项目中设置Pipenv:
$ cd my_project $ pipenv install Creating a virtualenv for this project… Pipfile: /Users/dvf/my_project/Pipfile Using /Users/dvf/.pyenv/versions/3.7.0/bin/python3.7 (3.7.0) to create virtualenv…
你将在项目中找到两个新文件:Pipfile和Pipfile.lock。
如果你在现存的项目中安装,Pipenv会将你的旧requirements.txt转换为Pip文件。 够酷吧?
对于新项目,PipFile应该是这样的:
[[source]] url = “https://pypi.org/simple” verify_ssl = true name = “pypi” [packages] [dev-packages] [requires] python_version = “3.7”
请注意,我们这里没有激活任何虚拟环境,Pipenv为我们处理虚拟环境。 因此,安装新的依赖项很简单:
$ pipenv install django Installing django … Installing collected packages: pytz, django Successfully installed django-2.1.2 pytz-2018.5 Adding django to Pipfile’s [packages]… Pipfile.lock (4f9dd2) out of date, updating to (a65489)… Locking [dev-packages] dependencies… Locking [packages] dependencies… Updated Pipfile.lock (4f9dd2)! Installing dependencies from Pipfile.lock (4f9dd2)… :snake: ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 2/2 — 00:00:01 To activate this project’s virtualenv, run pipenv shell. Alternatively, run a command inside the virtualenv with pipenv run.
如果你检查Pipfile,你会发现它现在包含django =“*”作为依赖项。
如果我们想在开发期间安装dev依赖项以供使用,例如YAPF,则需要在安装步骤中添加–dev:
$ pipenv install –dev yapf
什么是Pipfile.lock文件?
Pipfile.lock文件非常重要,因为它做了两件事:
- 通过保持每个已安装包的哈希值来提供良好的安全性。
- 引入所有依赖项和子依赖项的版本,为你提供可复制的环境。
让我们看看它目前的样子:
{ "_meta": { "hash": { "sha256": "627ef89...64f9dd2" }, "pipfile-spec": 6, "requires": { "python_version": "3.7" }, "sources": [ { "name": "pypi", "url": "<a class="markup--anchor markup--pre-anchor" href="https://pypi.org/simple" target="_blank" rel="nofollow noopener" data-href="https://pypi.org/simple">https://pypi.org/simple</a>", "verify_ssl": true } ] }, "default": { "django": { "hashes": [ "sha256:acdcc1...ab5bb3", "sha256:efbcad...d16b45" ], "index": "pypi", "version": "==2.1.2" }, "pytz": { "hashes": [ "sha256:a061aa...669053", "sha256:ffb9ef...2bf277" ], "version": "==2018.5" } }, "develop": {} }
请注意,每个依赖项的版本都是固定的。如果没有很好的理由,你肯定总是希望将此文件提交给你的源代码管理系统。
自定义索引
在Pipenv出现之前,我们一直很难使用私有的Python仓库。例如,你想在组织内托管私有Python仓库。 现在你需要做的就是将它们定义为Pipfile中的附加源:
[[source]] url = “https://pypi.org/simple” verify_ssl = true name = “pypi” [[source]] url = “https://www.example.com” verify_ssl = true name = “some-repo-name” [packages] django = “*” my-private-app = {version=”*”, index=”some-repo-name”} [dev-packages] [requires] python_version = “3.7”
请注意,我们告诉my-private-app使用私有仓库。 如果省略,Pipenv将遍历索引,直到找到包。
:bulb:Pipenv还将使用值中的任何环境变量,如果你有不想放在源代码管理系统中的敏感凭据(这是我的贡献</ humblebrag>),这将是非常有用的。
部署时,如果安装的依赖项与Pipfile.lock不匹配,则知道部署失败非常重要。 所以你应该在你的安装步骤中添加–deploy,如同这样:
$ pipenv install –deploy
你还可以检查哪些依赖项不匹配:
$ pipenv check
并查看这些包安装了哪些子依赖项:
$ pipenv graph –reverse pip==18.1 pytz==2018.5 – Django==2.1.2 [requires: pytz] setuptools==40.4.3 wheel==0.32.2 yapf==0.24.0
一次性命令,脚本和激活虚拟环境
如果你正在积极开发一个项目,则激活虚拟环境会很有帮助:
$ pipenv shell Launching subshell in virtual environment… (my_project) ➜ my_project
或者,如果你想在虚拟环境中执行命令:
$ pipenv run python manage.py runserver
你还可以向pipfile添加类似于npm package.json的脚本:
[[source]] url = “https://pypi.org/simple” verify_ssl = true name = “pypi” [packages] django = “*” [dev-packages] yapf = “*” [scripts] server = “python manage.py runserver” [requires] python_version = “3.7”
现在你可以执行脚本:
$ pipenv run server
我们刚刚触及冰山一角。 如果你想了解有关Pipenv的更多信息,我建议你阅读其 优秀的文档 。
本文翻译自: Why you should use pyenv + Pipenv for your Python projects
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Argo 项目入驻 CNCF,一文解析 Kubernetes 原生工作流
- 项目初始化模板 AdminStore 新增工作流和定时任务
- 项目初始化模板 AdminStore 新增工作流和定时任务
- [JWFD开源工作流]JWFD开源工作流-矩阵引擎设计初步
- 前端工程工作流规范
- SharePoint PowerShell 启动工作流
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Distributed Systems
Sukumar Ghosh / Chapman and Hall/CRC / 2014-7-14 / USD 119.95
Distributed Systems: An Algorithmic Approach, Second Edition provides a balanced and straightforward treatment of the underlying theory and practical applications of distributed computing. As in the p......一起来看看 《Distributed Systems》 这本书的介绍吧!